软件频道>程序开发>JavaVBVCDelphiC/C++Web开发微软专栏移动数据库程序人生软件工程|开发客
您现在的位置: 天极网 > 开发频道 > 基于VC++的OpenGL编程讲座之曲线和曲面
全文

基于VC++的OpenGL编程讲座之曲线和曲面

2005-09-15 10:34作者:刘涛出处:天极网责任编辑:方舟
  三、图元逼近法绘制三维物体

  在OpenGL的辅助库中,提供了绘制11种基本几何图形的函数,具体参考第一讲的有关内容,在此不再赘述。这里我们讨论用另外一种方法来绘制三维物体 。

  需要注意的是,这里我们用来近似曲面的多边形最好选择三角形,而不是四边形或其他形状的多边形,这是因为三角形的三个顶点在任何时候都位于同一平面内,它一定是非常简单的非凹多边形,而四边形或其他多边形的顶点可能不在同一平面内,也就有可能不是简单多边形,对于这样的多边形,OpenGL是不能正常处理的。假设我们绘制一个球体,球体表面用很多个小三角形拼接而成,显然,用来近似球面的三角形越小、三角形越多,那么球面就越光滑。为了简要地说明如何用三角形逼近球体,这里我们使用三角形来构造一个20面体,二十面体的顶点坐标定义在vdata[][]数组中,tindinces[][]数组定义了构成二十面体的二十个三角形顶点的绘制顺序。下面是主要实现代码:

#define x 5.25731
#define z 8.50651
static GLfloat vdata[12][3]={
{x,0.0,z},{x,0.0,z},{-x,0.0,-z},{x,0.0,-z},
{0.0,z,x},{0.0,z,-x},{0.0,-z-x},{0.0,-z,-x},
{z,x,0.0},{-z,x,0.0},{z,-x,0.0},{-z,-x,0.0}
};
static GLint tindices[20][3]={
{0,4,1},{0,9,4},{9,5,4},{4,5,8},{4,8,1},
{8,10,1},{8,3,10},{5,3,8},{5,2,3},{2,7,3},
{7,10,3},{7,6,10},{7,11,6},{11,0,6},
{6,1,10},{9,0,11},{9,11,2},{9,2,5},{7,2,11}
};
glColor3f(1.0, 0.0, 0.0);
for(int i=0;i<20;i++){
glBegin(GL_TRIANGLES);
glVertex3fv(&vdata[tindices[i][0]][0]);
glVertex3fv(&vdata[tindices[i][1]][0]);
glVertex3fv(&vdata[tindices[i][2]][0]);
glEnd();
}

  显然,用正二十面体来表示一个球体显得过于粗糟,可以通过增加面数的方法使正多面体和求更为接近,一种简单的方法是剖分法,即将前面定义的三角形面分成几个面,例如,一分为四,形成4个多边形等,具体实现方法这里就不再赘述了。

软件资讯·软件下载尽在天极软件

共3页。 首页 上一页 1 2 3
相关搜索:
关注此文读者还看过
文章排行
本周
本月
最近更新
关于我们|About us|网站律师|天极服务|电子杂志|RSS订阅|加入我们|网站地图
TMG
Copyright (C) 1999-2009 Chinabyte.com, All Rights Reserved 版权所有 天极网络
商务联系、网站内容、合作建议:010-82657868
版权声明 在线提交意见反馈 渝ICP证B2-20030003号
经营性网站备案信息 网警备案 中国网站排名
天极传媒:天极网|比特网|IT专家网|IT商网|52PK游戏网|IT分众