北京地铁站施工管理三维建模管理软件公司排行榜

发表时间:2023-04-04 18:47
、OpenGL建模  OpenGL根底库供给了除夜量绘制各类类型图元的编制,辅助库也供给了良多描述复杂三维图形的函数。这一章首要介绍根底图元,如点、线、多边形,有了这些图元,便可以成立斗劲复杂的模子了。OpenGL根底图形编程(二)OpenGL概念成立.、描述图元  OpenGL是三维图形的函数库,它所界说的点、线、多边形等图元与一般的界说不太一样,存在必定的不合。对编程者来讲,能否理解二者之间的不合十分首要。一种不合源于基于计较机计较的限制。OpenGL中所有浮点计较精度有限,故点、线、多边形的坐标值存在必定的误差。此外一种不合源于位图显示的限制。以这类编制显示图形,最小的显示图元是一个象素,当然每个象素宽度很小,但它们仍然比数学上所界说的点或线宽要除夜良多。当用OpenGL 进行计较时,当然是用一系列浮点值界说点串,但每个点仍然是用单个象素显示,只是近似拟合。  OpenGL图元是抽象的几何概念,不是真实世界中的物体,是以须用相关的数学模子来描述。.. 齐次坐标(Homogeneous Coordinate)  在空间直角坐标系中,肆意一点可用一个三维坐标矩阵[x y z]暗示。假定将该点用一个四维坐标的矩阵[Hx Hy Hz H]暗示时,则称为齐次坐标暗示编制。在齐次坐标中,一维坐标H称为比例因子。  在OpenGL中,二维坐标点全看作三维坐标点,所有的点都用齐次坐标来描述,统一作为三维齐次点来措置。每个齐次点用一个向量(x, y, z, w)暗示,其中四个元素全不为零。齐次点具有以下几个性质:  )假定实数a非零,则(x, y, x, w)和(ax, ay, az, aw)暗示统一个点,近似于xy = (ax)( ay)。  )三维空间点(x, y, z)的齐次点坐标为(x, y, z, .),二维平面点(x,y)的齐次坐标为(x, y, ., .)。  )当w不为零时,齐次点坐标(x, y, z, w)即三维空间点坐标(xw, yw, zw);当w为零时,齐次点(x, y, z, .)暗示此点位于某标的方针的无限远处。  寄望:OpenGL中指定w除夜于或等于.。.. 点(Point)  用浮点值暗示的点称为极点(Vertex)。所有极点在OpenGL内部计较时都作为三维点措置,用二维坐标(x, y)界说的点在OpenGL中默许z值为。所有极点坐标用齐次坐标(x, y, z, w) 暗示,假定w不为.,这些齐次坐标暗示的极点即为三维空间点(xw, yw, zw)。编程者可以自己指定w值,但很少这样做。一般来讲,w缺省为.。.. 线(Line)  在OpenGL中,线代表线段(Line Segment),不是数学意义上的那种沿轴两个标的方针无限迟误的线。这里的线由一系列极点顺次连结而成,有闭合和不闭合两种。见图-所示。.. 多边形(Polygon)  OpenGL中界说的多边形是由一系列线段顺次连结而成的封锁区域。这些线段不能交叉,区域内不能有浮泛,多边形必需在凸多边形,否则不能被OpenGL函数领受。正当和犯警多边形图示见图-。OpenGL多边形可所以平面多边形,即所有极点在一个平面上,也可所以空间多边形。更复杂的多边形将在提高篇中介绍。.、绘制图元.. 界说极点  在OpenGL中,所有几何物体事实下场都由有必定顺次的极点集来描述。  函数glVertex{}{sifd}[v](TYPE coords)可以用二维、三维或齐次坐标界说极点。举例以下: glVertexs(,)  glVertexd(.,.,.)  glVertexf(.,.,-.,.)  GLfloat pp[]={.,.,.}  glVertexfv(pp)例子暗示一个空间极点(, , ),第二个例子暗示用双精度浮点数界说一个极点,第三个例子暗示用齐次坐标界说一个极点,其真实坐标为(., ., -.),一个例子暗示用一个指针(或数组)界说极点。.. 组织几何图元  在现实操作中,凡是用一组相关的极点序列以必定的编制组织起来界说某个几何图元,而不采纳孤立界说多个极点来组织几何图元。在OpenGL中,所有被界说的极点必需放在glBegain()和glEnd()两个函数之间才能切确表达一个几何图元或物体,否则,glVertex()不完成任何操作。如:  glBegin(GL_POLYGON)    glVertexf(.,.)    glVertexf(.,.)    glVertexf(.,.)    glVertexf(.,.)    glVertexf(.,.)  glEnd()以上这段法度楷模界说了一个多边形,假定将glBegin()中的参数GL_POLYGON改成GL_POINTS,则图形酿成一组极点(个),见图-所示。点函数glBegin(GLenum mode)标识表记标帜描述一个几何图元的极点列表的最早,其参数mode暗示几何图元的描述类型。所有类型及声名见表-所示,响应的图示见图-。函数glEnd()标识表记标帜极点列表的竣事。  从图-中可看出,可以采纳良多编制组织几何图元,这些编制仅仅依托于所给的极点数据。  在glBegin()和glEnd()之间最首要的信息就是由函数glVertex()界说的极点,需要时也可为每个极点指定色彩、法向、纹理坐标或其他,即挪用相关的函数,见表-所示,具体用法往后会逐步介绍。看以下几句: glBegin(GL_POINTS)    glColorf(.,.,.) red color     glVertex(...)    glColorf(.,.,.) green color     glColorf(.,.,.) blue color     glVertex(...)    glVertex(...)  glEnd()色彩等的设置只对当前点或后续点有用。上一例中个点是红色,第二个点和第三个点都是蓝色。其中设置绿色时,往后没有极点操作,而是设置蓝色,故只有当前蓝色对紧跟后来的两个极点有用。  为了更好地舆解组织几何图元函数的用法,下面举一个简单的例子:例- 几何图元组织例程(drawgeom.c)  include "glos.h"  include  include   void myinit(void)  void DrawMyObjects(void)  void CALLBACK myReshape(GLsizei w,GLsizei h)  void CALLBACK display(void)   void myinit(void)  {    glClearColor(.,.,.,.)    glClear(GL_COLOR_BUFFER_BIT)    glShadeModel(GL_FLAT)  }   void CALLBACK myReshape(GLsizei w,GLsizei h)  {    glViewport(,,w,h)    glMatrixMode(GL_PROJECTION)    glLoadIdentity()     if(w以上法度楷模运行功能就是图-所示的内容,这个例子很好地说了然几何图元的类型及色彩等函数的用法。但愿读者自己细心分化每个物体的绘制编制,体味其中的关头的处所,达到触类旁通的下场。当然,还可操作上一章辅助库中供给的根底三维图元组织斗劲复杂的物体,你无妨也试一试。


分享到: