Пример #1
0
        public static void generateTrianglesFromShape(DestructionVertexData output, AppendConsumeStack stack, Shape shape, DestructionShapeParams shapeParams, DestructionSensor[] sensors)
        {
            //rhi::debugDraw::addSphere( toVector3( sensor.posLSWithScale ), sensor.radius, 0xFF0000FF, true );
            tmpUV[0] = Vector3.zero;
            tmpUV[1] = Vector3.zero;
            tmpUV[2] = Vector3.zero;

            for (int itri = 0; itri < shape.numIndices_; itri += 3)
            {
                int itri0 = shape.indices_[itri];
                int itri1 = shape.indices_[itri + 1];
                int itri2 = shape.indices_[itri + 2];

                tmpP[0] = shape.GetPosition(itri0);
                tmpP[1] = shape.GetPosition(itri1);
                tmpP[2] = shape.GetPosition(itri2);

                tmpN[0] = shape.GetNormal(itri0);
                tmpN[1] = shape.GetNormal(itri1);
                tmpN[2] = shape.GetNormal(itri2);

                //Vector3 t[3] =
                //{
                //    Vector3( picoPolyShape::getTangent( shape, itri0 ) ),
                //    Vector3( picoPolyShape::getTangent( shape, itri1 ) ),
                //    Vector3( picoPolyShape::getTangent( shape, itri2 ) ),
                //};

                if( shape.uvs_ != null && shape.uvs_.Length > 0 )
                {
                    tmpUV[0] = shape.GetTexcoord(itri0);
                    tmpUV[1] = shape.GetTexcoord(itri1);
                    tmpUV[2] = shape.GetTexcoord(itri2);
                }

                stack.appendTriangle(tmpP, tmpN, tmpUV);

                if( stack.full() )
                {
                    _processIterative(output, stack, sensors, shapeParams);
                }
            }
            //process remaining triangles from stack
            _processIterative(output, stack, sensors, shapeParams);
        }