Commit f95fd674 authored by hybrid's avatar hybrid

Allow cuboid creation instead of just uniform cubes.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@2346 dfc29bdd-3216-0410-991c-e03cc46cb475
parent a98c3319
...@@ -28,10 +28,10 @@ public: ...@@ -28,10 +28,10 @@ public:
//! Creates a simple cube mesh. //! Creates a simple cube mesh.
/** /**
\param size Size of the cube. \param size Dimensions of the cube.
\return Generated mesh. \return Generated mesh.
*/ */
virtual IMesh* createCubeMesh(f32 size=5.f) const =0; virtual IMesh* createCubeMesh(const core::vector3df& size=core::vector3df(5.f,5.f,5.f)) const =0;
//! Create a pseudo-random mesh representing a hilly terrain. //! Create a pseudo-random mesh representing a hilly terrain.
/** /**
......
...@@ -46,7 +46,7 @@ void CCubeSceneNode::setSize() ...@@ -46,7 +46,7 @@ void CCubeSceneNode::setSize()
{ {
if (Mesh) if (Mesh)
Mesh->drop(); Mesh->drop();
Mesh = SceneManager->getGeometryCreator()->createCubeMesh(Size); Mesh = SceneManager->getGeometryCreator()->createCubeMesh(core::vector3df(Size));
} }
......
...@@ -16,7 +16,7 @@ namespace irr ...@@ -16,7 +16,7 @@ namespace irr
namespace scene namespace scene
{ {
IMesh* CGeometryCreator::createCubeMesh(f32 size) const IMesh* CGeometryCreator::createCubeMesh(const core::vector3df& size) const
{ {
SMeshBuffer* buffer = new SMeshBuffer(); SMeshBuffer* buffer = new SMeshBuffer();
...@@ -34,7 +34,6 @@ IMesh* CGeometryCreator::createCubeMesh(f32 size) const ...@@ -34,7 +34,6 @@ IMesh* CGeometryCreator::createCubeMesh(f32 size) const
video::SColor clr(255,255,255,255); video::SColor clr(255,255,255,255);
buffer->Vertices.reallocate(12); buffer->Vertices.reallocate(12);
buffer->Vertices.set_used(0);
buffer->Vertices.push_back(video::S3DVertex(0,0,0, -1,-1,-1, clr, 0, 1)); buffer->Vertices.push_back(video::S3DVertex(0,0,0, -1,-1,-1, clr, 0, 1));
buffer->Vertices.push_back(video::S3DVertex(1,0,0, 1,-1,-1, clr, 1, 1)); buffer->Vertices.push_back(video::S3DVertex(1,0,0, 1,-1,-1, clr, 1, 1));
...@@ -565,22 +564,22 @@ IMesh* CGeometryCreator::createCylinderMesh(f32 radius, f32 length, ...@@ -565,22 +564,22 @@ IMesh* CGeometryCreator::createCylinderMesh(f32 radius, f32 length,
const u32 nonWrappedSize = ( tesselation* 4 ) - 2; const u32 nonWrappedSize = ( tesselation* 4 ) - 2;
for ( i = 0; i != nonWrappedSize; i += 2 ) for ( i = 0; i != nonWrappedSize; i += 2 )
{ {
buffer->Indices.push_back ( i + 2 ); buffer->Indices.push_back(i + 2);
buffer->Indices.push_back ( i + 0 ); buffer->Indices.push_back(i + 0);
buffer->Indices.push_back ( i + 1 ); buffer->Indices.push_back(i + 1);
buffer->Indices.push_back ( i + 2 ); buffer->Indices.push_back(i + 2);
buffer->Indices.push_back ( i + 1 ); buffer->Indices.push_back(i + 1);
buffer->Indices.push_back ( i + 3 ); buffer->Indices.push_back(i + 3);
} }
buffer->Indices.push_back ( 0 ); buffer->Indices.push_back(0);
buffer->Indices.push_back ( i + 0 ); buffer->Indices.push_back(i + 0);
buffer->Indices.push_back ( i + 1 ); buffer->Indices.push_back(i + 1);
buffer->Indices.push_back ( 0 ); buffer->Indices.push_back(0);
buffer->Indices.push_back ( i + 1 ); buffer->Indices.push_back(i + 1);
buffer->Indices.push_back ( 1 ); buffer->Indices.push_back(1);
// close down // close down
v.Pos.X = 0.f; v.Pos.X = 0.f;
...@@ -591,20 +590,20 @@ IMesh* CGeometryCreator::createCylinderMesh(f32 radius, f32 length, ...@@ -591,20 +590,20 @@ IMesh* CGeometryCreator::createCylinderMesh(f32 radius, f32 length,
v.Normal.Z = 0.f; v.Normal.Z = 0.f;
v.TCoords.X = 1.f; v.TCoords.X = 1.f;
v.TCoords.Y = 1.f; v.TCoords.Y = 1.f;
buffer->Vertices.push_back ( v ); buffer->Vertices.push_back(v);
u32 index = buffer->Vertices.size () - 1; u32 index = buffer->Vertices.size() - 1;
for ( i = 0; i != nonWrappedSize; i += 2 ) for ( i = 0; i != nonWrappedSize; i += 2 )
{ {
buffer->Indices.push_back ( index ); buffer->Indices.push_back(index);
buffer->Indices.push_back ( i + 0 ); buffer->Indices.push_back(i + 0);
buffer->Indices.push_back ( i + 2 ); buffer->Indices.push_back(i + 2);
} }
buffer->Indices.push_back ( index ); buffer->Indices.push_back(index);
buffer->Indices.push_back ( i + 0 ); buffer->Indices.push_back(i + 0);
buffer->Indices.push_back ( 0 ); buffer->Indices.push_back(0);
if (closeTop) if (closeTop)
{ {
...@@ -617,20 +616,20 @@ IMesh* CGeometryCreator::createCylinderMesh(f32 radius, f32 length, ...@@ -617,20 +616,20 @@ IMesh* CGeometryCreator::createCylinderMesh(f32 radius, f32 length,
v.Normal.Z = 0.f; v.Normal.Z = 0.f;
v.TCoords.X = 0.f; v.TCoords.X = 0.f;
v.TCoords.Y = 0.f; v.TCoords.Y = 0.f;
buffer->Vertices.push_back ( v ); buffer->Vertices.push_back(v);
index = buffer->Vertices.size () - 1; index = buffer->Vertices.size() - 1;
for ( i = 0; i != nonWrappedSize; i += 2 ) for ( i = 0; i != nonWrappedSize; i += 2 )
{ {
buffer->Indices.push_back ( i + 1 ); buffer->Indices.push_back(i + 1);
buffer->Indices.push_back ( index ); buffer->Indices.push_back(index);
buffer->Indices.push_back ( i + 3 ); buffer->Indices.push_back(i + 3);
} }
buffer->Indices.push_back ( i + 1 ); buffer->Indices.push_back(i + 1);
buffer->Indices.push_back ( index ); buffer->Indices.push_back(index);
buffer->Indices.push_back ( 1 ); buffer->Indices.push_back(1);
} }
buffer->recalculateBoundingBox(); buffer->recalculateBoundingBox();
...@@ -690,9 +689,9 @@ IMesh* CGeometryCreator::createConeMesh(f32 radius, f32 length, u32 tesselation, ...@@ -690,9 +689,9 @@ IMesh* CGeometryCreator::createConeMesh(f32 radius, f32 length, u32 tesselation,
for ( i = 0; i != nonWrappedSize; i += 1 ) for ( i = 0; i != nonWrappedSize; i += 1 )
{ {
buffer->Indices.push_back ( i + 0 ); buffer->Indices.push_back(i + 0);
buffer->Indices.push_back ( index ); buffer->Indices.push_back(index);
buffer->Indices.push_back ( i + 1 ); buffer->Indices.push_back(i + 1);
} }
buffer->Indices.push_back(i + 0); buffer->Indices.push_back(i + 0);
......
...@@ -19,7 +19,7 @@ class CGeometryCreator : public IGeometryCreator ...@@ -19,7 +19,7 @@ class CGeometryCreator : public IGeometryCreator
{ {
void addToBuffer(const video::S3DVertex& v, SMeshBuffer* Buffer) const; void addToBuffer(const video::S3DVertex& v, SMeshBuffer* Buffer) const;
public: public:
IMesh* createCubeMesh(f32 size) const; IMesh* createCubeMesh(const core::vector3df& size) const;
IMesh* createHillPlaneMesh( IMesh* createHillPlaneMesh(
const core::dimension2d<f32>& tileSize, const core::dimension2d<u32>& tileCount, const core::dimension2d<f32>& tileSize, const core::dimension2d<u32>& tileCount,
......
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