![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Nov 2013
Сообщений: 86
|
Здравствуйте. Недавно мне понадобилось создать меш из одного полигона, т. е, нужен был такой класс, чтобы по трем заданным вершинам Vector3D создавать один треугольник. Грубо говоря, как-то так:
Сначала я пытался сам написать такой класс, для этого рылся в исходниках Away. Не получилось. ![]() Тогда загуглил, но нашел только это: http://away3d.com/livedocs/3.6.0_lib.../Triangle.html Но это нечто совсем старинное... И вот это: https://github.com/satcy/as3satcy/bl...gleGeometry.as Но это, как я понял, правильные треугольники, а мне нужно вообще произвольный. Поэтому прошу помочь, может, есть у кого-нибудь такой класс, или хотя бы как его написать? |
|
|||||
|
Регистрация: Feb 2011
Адрес: Украина Днепропетровск
Сообщений: 106
|
vertexData - массив c шагом 13 0-2 позиции xyz 9-10 положение текстуры
indexData это положение точки из vertexData помноженое на 13 смотри пример geometry = new Geometry(); indexData = new Vector.<uint>(); vertexData = new Vector.<Number>(); sah = 0; var sahPoint:Number; for ( i= 0; i < kol; i++){ str = bod.xL.obj[0].obj[i].@vT; arr = str.split(";"); kol2 = arr.length; for ( j = 0; j < kol2; j++) { arr2=arr[j].split(","); kol3 = arr2.length; if (kol3 == 6) { for ( k = 0; k < 6; k += 2) { vertexData.push(Number(arr2[k])-400); vertexData.push(-Number(arr2[k + 1])+300); vertexData.push(0); vertexData.push(0); vertexData.push(0); vertexData.push(0); vertexData.push(0); vertexData.push(0); vertexData.push(0); sahPoint = (Number(arr2[k]) - minX) / bigX; sahPoint = pod.u0 + pgU * sahPoint; vertexData.push(sahPoint); sahPoint = (Number(arr2[k + 1]) - minY) / bigY; sahPoint = pod.v0 + pgV * sahPoint; vertexData.push(sahPoint); //vertexData.push(Math.random()); vertexData.push(0); vertexData.push(0); indexData.push(sah); sah++; } } } } sub = new CompactSubGeometry(); sub.updateData(vertexData); sub.updateIndexData(indexData); geometry.addSubGeometry(sub); if (md != null) md.dispose(); md = new Mesh(geometry,Component3D.textureMaterial); http://vorodis2.com/test/textMesh/ |
|
|||||
|
Регистрация: Nov 2013
Сообщений: 86
|
Спасибо! Я попробую разобраться, что к чему. Если возникнут неразрешимые вопросы, то задам. =)
|
|
|||||
|
Регистрация: Nov 2013
Сообщений: 86
|
vorodis2, подскажите ещё пожалуйста, что не так в моем классе, или я его правильно написал?
А то меш не отрисовывается... package { import away3d.core.base.CompactSubGeometry; import away3d.core.base.Geometry; import away3d.core.base.SubGeometry; import away3d.core.base.SubGeometryBase; import flash.geom.Vector3D; /** * ... * */ public class TriangleGeometry extends Geometry { public function TriangleGeometry(v1:Vector3D,v2:Vector3D,v3:Vector3D) { super(); var vertexData:Vector.<Number> = new Vector.<Number>(); var indexData:Vector.<uint> = new Vector.<uint>(); vertexData.push(v1.x, v1.y, v1.z, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); vertexData.push(v2.x, v2.y, v2.z, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0); vertexData.push(v3.x, v3.y, v3.z, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0); indexData.push(0); indexData.push(13); indexData.push(26); var sg:CompactSubGeometry = new CompactSubGeometry(); sg.updateData(vertexData); sg.updateIndexData(indexData); addSubGeometry(sg); } } } |
![]() |
![]() |
Часовой пояс GMT +4, время: 07:40. |
|
|
« Предыдущая тема | Следующая тема » |
|
|