You need to sign in or sign up before continuing.
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
if (buffer)
{
const u16 indexCount = buffer->getIndexCount();
switch(buffer->getVertexType())
const u16 attributes = 0;
for (u32 j=0; j<indexCount; j+=3)
{
case video::EVT_STANDARD:
{
video::S3DVertex* vtx = (video::S3DVertex*)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_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;
const core::vector3df& v1 = buffer->getPosition(buffer->getIndices()[j]);
const core::vector3df& v2 = buffer->getPosition(buffer->getIndices()[j+1]);
const core::vector3df& v3 = buffer->getPosition(buffer->getIndices()[j+2]);
const core::plane3df tmpplane(v1,v2,v3);
file->write(&tmpplane.Normal, 12);
file->write(&v1, 12);
file->write(&v2, 12);
file->write(&v3, 12);
file->write(&attributes, 2);
}
}
}
......@@ -160,38 +124,13 @@ bool CSTLMeshWriter::writeMeshASCII(io::IWriteFile* file, scene::IMesh* mesh, s3
{
const u16 indexCount = buffer->getIndexCount();
switch(buffer->getVertexType())
for (u32 j=0; j<indexCount; j+=3)
{
case video::EVT_STANDARD:
{
video::S3DVertex* vtx = (video::S3DVertex*)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_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;
writeFace(file,
buffer->getPosition(buffer->getIndices()[j]),
buffer->getPosition(buffer->getIndices()[j+1]),
buffer->getPosition(buffer->getIndices()[j+2]));
}
file->write("\n",1);
}
......
......@@ -32,50 +32,17 @@ CTriangleSelector::CTriangleSelector(IMesh* mesh, ISceneNode* node)
const u32 cnt = mesh->getMeshBufferCount();
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();
core::triangle3df tri;
switch (buf->getVertexType())
for (u32 j=0; j<idxCnt; j+=3)
{
case video::EVT_STANDARD:
{
video::S3DVertex* vtx = (video::S3DVertex*)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_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;
Triangles.push_back(core::triangle3df(
buf->getPosition(indices[j+0]),
buf->getPosition(indices[j+1]),
buf->getPosition(indices[j+2])));
}
}
}
......
......@@ -76,52 +76,10 @@ void CWaterSurfaceSceneNode::animateWaterSurface()
{
const u32 vtxCnt = Mesh->getMeshBuffer(b)->getVertexCount();
switch(Mesh->getMeshBuffer(b)->getVertexType())
{
case video::EVT_STANDARD:
{
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
for (u32 i=0; i<vtxCnt; ++i)
addWave(Mesh->getMeshBuffer(b)->getPosition(i),
OriginalMesh->getMeshBuffer(b)->getPosition(i),
time);
}// end for all mesh buffers
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