Commit f02c10a0 authored by hybrid's avatar hybrid

Make more use of meshbuffer vertex access methods.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@1090 dfc29bdd-3216-0410-991c-e03cc46cb475
parent e548cc90
...@@ -87,54 +87,18 @@ bool CSTLMeshWriter::writeMeshBinary(io::IWriteFile* file, scene::IMesh* mesh, s ...@@ -87,54 +87,18 @@ bool CSTLMeshWriter::writeMeshBinary(io::IWriteFile* file, scene::IMesh* mesh, s
if (buffer) if (buffer)
{ {
const u16 indexCount = buffer->getIndexCount(); const u16 indexCount = buffer->getIndexCount();
const u16 attributes = 0;
switch(buffer->getVertexType()) for (u32 j=0; j<indexCount; j+=3)
{ {
case video::EVT_STANDARD: const core::vector3df& v1 = buffer->getPosition(buffer->getIndices()[j]);
{ const core::vector3df& v2 = buffer->getPosition(buffer->getIndices()[j+1]);
video::S3DVertex* vtx = (video::S3DVertex*)buffer->getVertices(); const core::vector3df& v3 = buffer->getPosition(buffer->getIndices()[j+2]);
const u16 attributes = 0; const core::plane3df tmpplane(v1,v2,v3);
for (u32 j=0; j<indexCount; j+=3) file->write(&tmpplane.Normal, 12);
{ file->write(&v1, 12);
const core::plane3df tmpplane(vtx[buffer->getIndices()[j]].Pos,vtx[buffer->getIndices()[j+1]].Pos,vtx[buffer->getIndices()[j+2]].Pos); file->write(&v2, 12);
file->write(&tmpplane.Normal, 12); file->write(&v3, 12);
file->write(&vtx[buffer->getIndices()[j]].Pos, 12); file->write(&attributes, 2);
file->write(&vtx[buffer->getIndices()[j+1]].Pos, 12);
file->write(&vtx[buffer->getIndices()[j+2]].Pos, 12);
file->write(&attributes, 2);
}
}
break;
case video::EVT_2TCOORDS:
{
video::S3DVertex2TCoords* vtx = (video::S3DVertex2TCoords*)buffer->getVertices();
const u16 attributes = 0;
for (u32 j=0; j<indexCount; j+=3)
{
const core::plane3df tmpplane(vtx[buffer->getIndices()[j]].Pos,vtx[buffer->getIndices()[j+1]].Pos,vtx[buffer->getIndices()[j+2]].Pos);
file->write(&tmpplane.Normal, 12);
file->write(&vtx[buffer->getIndices()[j]].Pos, 12);
file->write(&vtx[buffer->getIndices()[j+1]].Pos, 12);
file->write(&vtx[buffer->getIndices()[j+2]].Pos, 12);
file->write(&attributes, 2);
}
}
break;
case video::EVT_TANGENTS:
{
video::S3DVertexTangents* vtx = (video::S3DVertexTangents*)buffer->getVertices();
const u16 attributes = 0;
for (u32 j=0; j<indexCount; j+=3)
{
const core::plane3df tmpplane(vtx[buffer->getIndices()[j]].Pos,vtx[buffer->getIndices()[j+1]].Pos,vtx[buffer->getIndices()[j+2]].Pos);
file->write(&tmpplane.Normal, 12);
file->write(&vtx[buffer->getIndices()[j]].Pos, 12);
file->write(&vtx[buffer->getIndices()[j+1]].Pos, 12);
file->write(&vtx[buffer->getIndices()[j+2]].Pos, 12);
file->write(&attributes, 2);
}
}
break;
} }
} }
} }
...@@ -160,38 +124,13 @@ bool CSTLMeshWriter::writeMeshASCII(io::IWriteFile* file, scene::IMesh* mesh, s3 ...@@ -160,38 +124,13 @@ bool CSTLMeshWriter::writeMeshASCII(io::IWriteFile* file, scene::IMesh* mesh, s3
{ {
const u16 indexCount = buffer->getIndexCount(); const u16 indexCount = buffer->getIndexCount();
switch(buffer->getVertexType())
for (u32 j=0; j<indexCount; j+=3)
{ {
case video::EVT_STANDARD: writeFace(file,
{ buffer->getPosition(buffer->getIndices()[j]),
video::S3DVertex* vtx = (video::S3DVertex*)buffer->getVertices(); buffer->getPosition(buffer->getIndices()[j+1]),
for (u32 j=0; j<indexCount; j+=3) buffer->getPosition(buffer->getIndices()[j+2]));
writeFace(file,
vtx[buffer->getIndices()[j]].Pos,
vtx[buffer->getIndices()[j+1]].Pos,
vtx[buffer->getIndices()[j+2]].Pos);
}
break;
case video::EVT_2TCOORDS:
{
video::S3DVertex2TCoords* vtx = (video::S3DVertex2TCoords*)buffer->getVertices();
for (u32 j=0; j<indexCount; j+=3)
writeFace(file,
vtx[buffer->getIndices()[j]].Pos,
vtx[buffer->getIndices()[j+1]].Pos,
vtx[buffer->getIndices()[j+2]].Pos);
}
break;
case video::EVT_TANGENTS:
{
video::S3DVertexTangents* vtx = (video::S3DVertexTangents*)buffer->getVertices();
for (u32 j=0; j<indexCount; j+=3)
writeFace(file,
vtx[buffer->getIndices()[j]].Pos,
vtx[buffer->getIndices()[j+1]].Pos,
vtx[buffer->getIndices()[j+2]].Pos);
}
break;
} }
file->write("\n",1); file->write("\n",1);
} }
......
...@@ -32,50 +32,17 @@ CTriangleSelector::CTriangleSelector(IMesh* mesh, ISceneNode* node) ...@@ -32,50 +32,17 @@ CTriangleSelector::CTriangleSelector(IMesh* mesh, ISceneNode* node)
const u32 cnt = mesh->getMeshBufferCount(); const u32 cnt = mesh->getMeshBufferCount();
for (u32 i=0; i<cnt; ++i) for (u32 i=0; i<cnt; ++i)
{ {
IMeshBuffer* buf = mesh->getMeshBuffer(i); const IMeshBuffer* buf = mesh->getMeshBuffer(i);
s32 idxCnt = buf->getIndexCount(); const u32 idxCnt = buf->getIndexCount();
const u16* const indices = buf->getIndices(); const u16* const indices = buf->getIndices();
core::triangle3df tri;
switch (buf->getVertexType()) for (u32 j=0; j<idxCnt; j+=3)
{ {
case video::EVT_STANDARD: Triangles.push_back(core::triangle3df(
{ buf->getPosition(indices[j+0]),
video::S3DVertex* vtx = (video::S3DVertex*)buf->getVertices(); buf->getPosition(indices[j+1]),
for (s32 j=0; j<idxCnt; j+=3) buf->getPosition(indices[j+2])));
{
Triangles.push_back(core::triangle3df(
vtx[indices[j+0]].Pos,
vtx[indices[j+1]].Pos,
vtx[indices[j+2]].Pos));
}
}
break;
case video::EVT_2TCOORDS:
{
video::S3DVertex2TCoords* vtx = (video::S3DVertex2TCoords*)buf->getVertices();
for (s32 j=0; j<idxCnt; j+=3)
{
Triangles.push_back(core::triangle3df(
vtx[indices[j+0]].Pos,
vtx[indices[j+1]].Pos,
vtx[indices[j+2]].Pos));
}
}
break;
case video::EVT_TANGENTS:
{
video::S3DVertexTangents* vtx = (video::S3DVertexTangents*)buf->getVertices();
for (s32 j=0; j<idxCnt; j+=3)
{
Triangles.push_back(core::triangle3df(
vtx[indices[j+0]].Pos,
vtx[indices[j+1]].Pos,
vtx[indices[j+2]].Pos));
}
}
break;
} }
} }
} }
......
...@@ -76,52 +76,10 @@ void CWaterSurfaceSceneNode::animateWaterSurface() ...@@ -76,52 +76,10 @@ void CWaterSurfaceSceneNode::animateWaterSurface()
{ {
const u32 vtxCnt = Mesh->getMeshBuffer(b)->getVertexCount(); const u32 vtxCnt = Mesh->getMeshBuffer(b)->getVertexCount();
switch(Mesh->getMeshBuffer(b)->getVertexType()) for (u32 i=0; i<vtxCnt; ++i)
{ addWave(Mesh->getMeshBuffer(b)->getPosition(i),
case video::EVT_STANDARD: OriginalMesh->getMeshBuffer(b)->getPosition(i),
{ time);
video::S3DVertex* v =
(video::S3DVertex*)Mesh->getMeshBuffer(b)->getVertices();
video::S3DVertex* v2 =
(video::S3DVertex*)OriginalMesh->getMeshBuffer(b)->getVertices();
for (u32 i=0; i<vtxCnt; ++i)
{
addWave(v[i].Pos, v2[i].Pos, time);
}
}
break;
case video::EVT_2TCOORDS:
{
video::S3DVertex2TCoords* v =
(video::S3DVertex2TCoords*)Mesh->getMeshBuffer(b)->getVertices();
video::S3DVertex2TCoords* v2 =
(video::S3DVertex2TCoords*)OriginalMesh->getMeshBuffer(b)->getVertices();
for (u32 i=0; i<vtxCnt; ++i)
{
addWave(v[i].Pos, v2[i].Pos, time);
}
}
break;
case video::EVT_TANGENTS:
{
video::S3DVertexTangents* v =
(video::S3DVertexTangents*)Mesh->getMeshBuffer(b)->getVertices();
video::S3DVertexTangents* v2 =
(video::S3DVertexTangents*)OriginalMesh->getMeshBuffer(b)->getVertices();
for (u32 i=0; i<vtxCnt; ++i)
{
addWave(v[i].Pos, v2[i].Pos, time);
}
}
break;
} // end switch
}// end for all mesh buffers }// end for all mesh buffers
SceneManager->getMeshManipulator()->recalculateNormals(Mesh); SceneManager->getMeshManipulator()->recalculateNormals(Mesh);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment