Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   Геометрия треугольников, Away3D 4.1.4 (http://www.flasher.ru/forum/showthread.php?t=205387)

FlasherEgor 02.12.2013 15:19

Геометрия треугольников, Away3D 4.1.4
 
Здравствуйте. Недавно мне понадобилось создать меш из одного полигона, т. е, нужен был такой класс, чтобы по трем заданным вершинам Vector3D создавать один треугольник. Грубо говоря, как-то так:
Код AS1/AS2:

new Mesh(new TriangleGeometry(vector1,vector2,vector3),myMaterial)

Сначала я пытался сам написать такой класс, для этого рылся в исходниках Away. Не получилось. :o

Тогда загуглил, но нашел только это:
http://away3d.com/livedocs/3.6.0_lib.../Triangle.html
Но это нечто совсем старинное...
И вот это:
https://github.com/satcy/as3satcy/bl...gleGeometry.as
Но это, как я понял, правильные треугольники, а мне нужно вообще произвольный.

Поэтому прошу помочь, может, есть у кого-нибудь такой класс, или хотя бы как его написать?

vorodis2 02.12.2013 17:09

vertexData - массив c шагом 13 0-2 позиции xyz 9-10 положение текстуры
indexData это положение точки из vertexData помноженое на 13

смотри пример
Код AS3:

 
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/

FlasherEgor 03.12.2013 18:25

Спасибо! Я попробую разобраться, что к чему. Если возникнут неразрешимые вопросы, то задам. =)

FlasherEgor 09.12.2013 19:37

vorodis2, подскажите ещё пожалуйста, что не так в моем классе, или я его правильно написал?
А то меш не отрисовывается...
Код AS3:

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:14.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.