《深入了解OpenGL》第二讲:顶点线性变换.docVIP

《深入了解OpenGL》第二讲:顶点线性变换.doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《深入了解OpenGL》第二讲:顶点线性变换

《深入了解OpenGL》第二讲:顶点线性变换 时间: 2010-05-11 12:56 点击: 2157 次 上周发布了 《深入了解OpenGL》第一讲:绘制基本图元,今天CocoaChina会员 zenny_chen 带来了OpenGL知识第二讲。帖子地址 /bbs/read.php?tid-20395.html 这一章节可能会比较枯燥, 上周发布了《深入了解OpenGL》第一讲:绘制基本图元,今天CocoaChina会员 “zenny_chen” 带来了OpenGL知识第二讲。帖子地址 /bbs/read.php?tid-20395.html 这一章节可能会比较枯燥,当然示例代码将会非常有趣。枯燥的是将会有很多线性代数的知识夹杂其中。在本章中我们将对3D图形进行绘制。我们会介绍 顶点变换的过程,以及法线向量与绘制顺序。 这里将首先介绍一下一个三维空间上的顶点被映射到二维屏幕坐标的步骤,请各位务必牢记: 物体顶点坐标(顶点)=》模型视图变换 - 视觉坐标=》投影变换 - 裁剪坐标=》透视划分 - 规格化设备坐标=》视口变换 - 窗口坐标 上图中,=》表示经过某种变换;- 表示得到某个坐标。 下面我们将根据这个顺序来依次介绍各个变 换。这里将主要介绍模型视图变换和投影变换。 先介绍OpenGL中物体顶点坐标的表示。 OpenGL中,物体的顶点坐标是由一个四维的行向量来表示的,表示为:(x, y, z, w)。其中,x, y, z分别对应x轴、y轴和z轴,而w用于辅助做线性变换。我们会理所当然地认为,三维坐标系只要三个分量就够了,w到底有何用呢? 我们这里首先要说 明一下,在OpenGL中,线性变换矩阵的变换都是用矩阵的乘法,没有加减法,因此所有线性变换都是通过矩阵的乘法来完成的。所以,比如说我们要把一个顶 点:(1, 1, 1)沿x轴向右平移5个单位,那要用三维变换矩阵表示的话就要是:M = [6, 0, 0; 0, 1, 0; 0, 0, 1]。那么v\ = v * M = (6, 1, 1)。 但很多场合下使用三维空间做变换将会使计算变得非常复杂,甚至很难进行变换,因此引入 四维空间使得变换更加灵活。 比如,顶点v = (1, 1, 1, 1)沿x轴向右平移5个单位,那么变换矩阵M = [1, 0, 0, 0; 0, 1, 0, 0; 0, 0, 1, 0; 5, 0, 0, 1]。 我们将看到这个4x4的变换矩阵与3x3的相比就显得简单很多。因 为对于平移来说,本身就是加法,而三维空间中就需要使用乘法,从而加大了计算负荷。 在OpenGL中,物体的顶点坐标在进行计算时总是以行向量的 形式表示,并且计算时总是在最左边。 下面将正式介绍视图各种变换。 先贴代码: - (void)prepareOpenGL { ????glShadeModel(GL_SMOOTH); ???? ????glClearColor(0.0, 0.0, 0.0, 0.0); ????glViewport(0, 0, 320, 320); ? ????glMatrixMode(GL_PROJECTION); ????glLoadIdentity(); ????glOrtho(-1.0, 1.0, -1.0, 1.0, 1.0, 5.0); ???? ????glMatrixMode(GL_MODELVIEW); ????glLoadIdentity(); ????glTranslatef(0.3f, 0.2f, 0.0f); ????glRotatef(-30.0f, 0.0f, 0.0f, 1.0f); ???? ????glFrontFace(GL_CCW); ????glEnable(GL_CULL_FACE | GL_DEPTH_TEST); } ? - (void)drawRect:(NSRect)dirtyRect { ???? ????static struct ????{ ????????GLubyte colours[4]; ????????GLfloat vertices[3]; ???????? ????}vertexInfoList[] = { ????????{ {255, 0, 0, 255}, {-0.5f, 0.5f, -1.0f} }, ????????{ {0, 255, 0, 255}, {-0.5f, -0.5f, -1.0f} }, ????????{ {0, 0, 255, 255}, {0.5f, 0.5f, -2.0f} }, ????????{ {255, 0, 255, 255}, {0.5f, -0.5f, -2.0f} } ????}; ???? ????// Drawing co

文档评论(0)

cgtk187 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档