OpenGL Drawing Classes

代码名称:A small VRML viewer using OpenGL and MFC. 下载地址: http://www.vccode.com/file_show.php?id=262.

By: Pierre Alliez

数据结构分析
:
1.
针对画图功能,定义基类CObject3D, 实现glDraw接口,并为显示列表定义
glBuildList.
2.
为了动态判断类对象CObject3D定义int GetType()接口. (is it good? Factory necessary?)

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 优点

  1. 用三角形代表每个face,每个face都有3neighbor face的指针,每个face6vertex3d, 其中多余的便于subdivision。每个face有颜色,材料,法线等数据,便于画图。但是vertex都是指针,换言之,face不会改动vertex的坐标
  2. CMesh3d中有face vertex两个List,一个CTransform m_Transform,画图之前可以使用坐标旋转。m_IndexTexture保持和CSceneGraph3d纹理名称一致。
  3. Trace函数便于调试

6 缺点

  1. CTexture类实际上实现的是读取和对函数glTexImage2D(GL_TEXTURE_2D,,,CTexture:: GetWidth(),CTexture::GetHeight(),,GL_RGB,GL_UNSIGNED_BYTE, glTexImage2D::GetData())接口的使用,没有glDraw()接口,所以不应该归结到CObject继承里。
  2. CSceneGraph3d::glBuildList似乎已经调用了一次CMesh3d::glBuildList,CSceneGraph3d::glDraw中继续调用CMesh3d::glDraw()àCMesh3d::glBuildList,好像重复。
  3. 似乎glBuildList不应该作为基类CObject3D的虚函数继承,因为好像只有CMesh3d才需要用列表显示

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值