3. 类继承实现CEdge3d, CFace3d, CVector3d, CVertex3d, CMesh3d : public CObject3d
4. 纹理实现比较特殊。
class CTexture : public CObject class CSceneGraph3d::CArray3d<CTexture> m_ArrayTexture, GLuint *m_pIndexTextureBinding;
步骤
函数
创建纹理列表名称
CSceneGraph3d中纹理名称创建采用以下步骤 glGenTextures+ glBindTexture定义列表中纹理的名称 glTexImage2D绑定m_ArrayTexture[i]绑定纹理
CSceneGraph3d::glDraw函数中,先用glBindTexture指定纹理名称,然后调用m_ArrayObject3d[i].glDraw()定义纹理坐标
在CMesh3d中定义纹理坐标,使用glTexCoord2f,,因为有以下类成员class CMesh3d:: m_pTextureCoordinate, m_pTextureCoordinateIndex. CMesh3d :: GetTextureIndex();5 优点
用三角形代表每个face,每个face都有3个neighbor face的指针,每个face有6个vertex3d, 其中多余的便于subdivision。每个face有颜色,材料,法线等数据,便于画图。但是vertex都是指针,换言之,face不会改动vertex的坐标 CMesh3d中有face 和vertex两个List,一个CTransform m_Transform,画图之前可以使用坐标旋转。m_IndexTexture保持和CSceneGraph3d纹理名称一致。 Trace函数便于调试6 缺点
CTexture类实际上实现的是读取和对函数glTexImage2D(GL_TEXTURE_2D,,,CTexture:: GetWidth(),CTexture::GetHeight(),,GL_RGB,GL_UNSIGNED_BYTE, glTexImage2D::GetData())接口的使用,没有glDraw()接口,所以不应该归结到CObject继承里。 而CSceneGraph3d::glBuildList似乎已经调用了一次CMesh3d::glBuildList,而CSceneGraph3d::glDraw中继续调用CMesh3d::glDraw()àCMesh3d::glBuildList,好像重复。 似乎glBuildList不应该作为基类CObject3D的虚函数继承,因为好像只有CMesh3d才需要用列表显示
本文地址:http://com.8s8s.com/it/it24386.htm