void DecalSceneNode::Setup(triangle3df tri, vector3df intersection){ SColor color(255,255,255,255); pointA=tri.pointA; pointB=tri.pointB; pointC=tri.pointC; posA=intersection.X; posB=intersection.Y; posC=intersection.Z; trinormal=tri.getNormal(); trinormal=trinormal.normalize(); line3d<f32> line1(pointA, pointB); vector3df v1 = line1.getVector().normalize(); vector3df v2 = line1.getClosestPoint( pointC ); line3d<f32> line2(v2,pointC); vector3df v3 = line2.getVector().normalize(); vector3df squarepA=(v1*-basesize)+trinormal*1+(v3*-basesize); vector3df squarepB=squarepA+(v1*basesize*2); vector3df squarepC=squarepA+(v1*basesize*2)+(v3*basesize*2); vector3df squarepD=squarepA+(v3*basesize*2); squarepA=squarepA+vector3df(posA,posB,posC); squarepB=squarepB+vector3df(posA,posB,posC); squarepC=squarepC+vector3df(posA,posB,posC); squarepD=squarepD+vector3df(posA,posB,posC); Vertices[0] = S3DVertex(squarepA.X,squarepA.Y,squarepA.Z, 1,0,0,color,1,0); Vertices[1] = S3DVertex(squarepB.X,squarepB.Y,squarepB.Z, 1,0,0,color,1,1); Vertices[2] = S3DVertex(squarepC.X,squarepC.Y,squarepC.Z, 1,0,0,color,0,1); Vertices[3] = S3DVertex(squarepD.X,squarepD.Y,squarepD.Z, 1,0,0,color,0,0); Box.reset(Vertices[0].Pos); for (s32 i=1; i<4; ++i) { Box.addInternalPoint(Vertices[i].Pos); } }
//! Draws a 3d triangle. void CNullDriver::draw3DTriangle(const triangle3df& triangle, SColor color) { S3DVertex vertices[3]; vertices[0].Pos=triangle.pointA; vertices[0].Color=color; vertices[0].Normal=triangle.getNormal().normalize(); vertices[0].TCoords.set(0.f,0.f); vertices[1].Pos=triangle.pointB; vertices[1].Color=color; vertices[1].Normal=vertices[0].Normal; vertices[1].TCoords.set(0.5f,1.f); vertices[2].Pos=triangle.pointC; vertices[2].Color=color; vertices[2].Normal=vertices[0].Normal; vertices[2].TCoords.set(1.f,0.f); const u16 indexList[] = {0,1,2}; drawVertexPrimitiveList(vertices, 3, indexList, 1, EVT_STANDARD, EPT_TRIANGLES, EIT_16BIT); }