Whats a good 3d C++ class to represent a 3D mesh object ?

Started by
3 comments, last by James 24 years, 6 months ago
My object class looks alot like yours...
(Somebody please make the code font bigger)
code:
    int          m_iNumPolygons;    CPolygon    *m_cPolygons;    int          m_iNumVertices;    CVector     *m_cVertices;    CVector     *m_cVNormals;    D3DMATRIX    m_tMatrix;    CVector      m_cPosition;    CVector      m_cAngle;    CTextureCoord *m_cTextureCoords;    CColor      *m_cVertexColors;    int          m_iTextureType;    int          m_iShadingType;

I store texturecoords both in the polygons,
and in another array, I use the array when
I do environmentmapping.

Greetings Tobias

[This message has been edited by Ake (edited October 04, 1999).]

Advertisement
I have a (for my application) more flexible approach, which is based on a "channel" system. Each Geometry object in my scene is requested every frame to return one or more PrimitiveSet objects. These objects contain various "channels" of per-vertex data:

WSG_XYZ
WSG_COLORn (0-15)
WSG_TEXCOORDn (0-15)
WSG_NORMAL

In addition, the PrimitiveSet has a few functions like ImmediatePrimitive() and
IndexedPrimitive() for specifying TRIANGLES, TRIANGLE_STRIPS, TRIANGLE_FANS etc.

Each PrimitiveSet is bound to a "shader" script, which determines which textures will be used, blending setup between texture layers and what texture coordinate channels to bind the images to. Etc etc.

I find this approach much more flexible than having a fixed class of a "3d" object, as each Geometry-based object has a more "API" based relation to the graphics engine.
YMMV.

Heh, aav could have been describing the exact method I've used in my current project.

for a single stream the setup would be something like the following.(complete objects have 1 or more streams)

Surface* // specs textures/blends/procedural // functions
polytype // particles/tris/bezier patches
indices* // index array
verts* // vertex array
texverts** // pointer to texture coord arrays
// the number used is determined
// by the surface
normals* // normal array

Hi all,

I'm writing a simple geometry engine in c++ to work on top of OpenGL. As I began to lay down some code for the 3DObject class I was wondering if anyone had any experience writing one already and could give some ointers or even a sample class definition. e.g. something like the following ....

class C3DObject : CWorldObject
{
public:
C3DObject();
virtual ~C3DObject();

float* m_pfVertices;
unsigned int m_uiNumVertices;

float* m_pfNormals;
unsigned int m_uiNumNormals;

float* m_pfColours;
unsigned int m_uiNumColours;
};

Using C++ I've found it easier to use vectors
instead of pointer arrays - memory allocation/garbage collection is much easier...

As for the way I've implemented my class, check out my GLobs page

Basically I created an object class which contains vertexbins (ie polygons) and vertex vectors, the polygons using local referencing to get the polygon number..

That's a really bad description....check out the page for more..

This topic is closed to new replies.

Advertisement