|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
Away3d. Отрисовка траекторий орбит планет
Приветствую.
Мне нужно как-то отобразить линии орбит, примерно как тут http://www.solarsystemscope.com/ Имеются в виду тонкие линии кругов. Что пришло в голову: - заранее смоделировать в 3д редакторе - не подходит, так как орбиты могут быть совершенно разными. - растягивать одну 3д модель - она перестанет быть тонкой линией. - сделать линии из маленьких шаров - это совсем глупость. Подскажите адекватное решение задачи. |
|
|||||
Регистрация: Feb 2011
Адрес: Украина Днепропетровск
Сообщений: 106
|
1.
private var segmentSet:SegmentSet; private var segment:LineSegment; ........................ segment = new LineSegment(v0, v1, color, color, thickness); //рисуем линию между ними segmentSetPoint.addSegment(segment); Создать новый меш либо заменит геометрию старого. Но 1-2 Дадут ребь. 3. В демках от айвей есть работа с партиклями Basic_Fire.as, навероно как то ими нужно создавать, я их не трогал, может и туплю. А Вы случием не знаете как там из 3Д точки получить 2д точку. |
|
|||||
[+4 24.04.13]
[+4 20.04.13] Регистрация: Feb 2013
Адрес: Seireitei
Сообщений: 176
|
3d круга вроде нету в away, остается вариант LineSegment, посмотри исходники класса WireframeSphere
|
|
|||||
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
Спасибо за советы, сегменты - отличная идея.
|
|
|||||
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
После "доработки" класса WireframeCylinder, получилось вот такой код, может кому пригодится:
package { import away3d.primitives.WireframePrimitiveBase; import flash.geom.Vector3D; public class Circle3D extends WireframePrimitiveBase { private var radius:Number; private var segments:uint; public function Circle3D(radius:Number = 50, segments:uint = 16, color:uint = 0xFFFFFF) { super(color, 1); this.radius = radius; this.segments = segments; } override protected function buildGeometry():void { var revolutionAngle:Number; var revolutionAngleDelta:Number = 2 * Math.PI / segments; var nextVertexIndex:int = 0; var x:Number; var y:Number; var previousV:Vector3D = null; for (var i:int = 0; i <= segments; ++i) { revolutionAngle = i * revolutionAngleDelta; x = radius * Math.cos(revolutionAngle); y = radius * Math.sin(revolutionAngle); var vertex:Vector3D; if (previousV) { vertex = new Vector3D(x, 0, y); updateOrAddSegment(nextVertexIndex++, vertex, previousV); previousV = vertex; } else { previousV = new Vector3D(x, 0, y); } } } } } |
Часовой пояс GMT +4, время: 07:08. |
|
« Предыдущая тема | Следующая тема » |
|
|