OpenGL:三维数学基础坐标系、向量、矩阵

一、计算机图形学

计算机图形学(Computer Graphics)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。其广泛应用于游戏、动画、仿真、虚拟现实(VR)、增强现实(AR)等领域。

在数学之中,研究自然数和整数的领域称为离散数学,研究实数的领域称作连续数学。

在计算机图形学中,为虚拟世界选择度量单位的关键是选择离散的精度。一种错误的观点认为short、int是离散的,而float、double是连续的,而事实上,这些数据类型都是离散的。于是,计算机图形学有如下准则:

计算机图形学第一准则:近似原则——如果它看上去是对的,它就是对的。

二、笛卡尔坐标系

2D笛卡尔坐标系是一个精确定位点的框架。2D坐标的标准表示法是(x,y),相信大家初中都学过。一般,标准的笛卡尔坐标系是x轴向右,y轴向上。而计算机图形学中的屏幕坐标往往是x轴向右,y轴向下。如图1所示。

3D笛卡尔坐标系类似,增加了第三个维度,z轴。3D坐标系分为完全不同的2种坐标系,左手坐标系和右手坐标系。判断方法为,左手坐标系:伸出左手,让拇指和食指成“L”形,大拇指向右,食指向上,其余手指指向前方。此时,拇指、食指和其余三指分别代表x、y、z轴的正方向。右手坐标系,相同,只是把左手换成右手。如图2所示。

图2:左手坐标系与右手坐标系

其中左手坐标系广泛应用于计算机图形学、D3D之中,而右手坐标系广泛应用于OpenGL、线性代数、3DSMax之中。

三、多坐标系

任何一个3D坐标系都是可以无限延伸的,可以包含空间中所有的点,因此,只需要一个坐标系,就能描述所有的点。但是,人们发现,不同情况下使用不同的坐标系会更为方便。

1.世界坐标系

世界坐标系是一个特殊的坐标系,它描述了其他坐标系所需要的参考框架。它是一个坐标系系统中最大的、最外部的坐标系。“向东”、“向南”这些概念只有在世界坐标系中才有。

2.物体坐标系

物体坐标系是和特定物体相关的坐标系。每个物体都有独立的坐标系。“前”、“后”、“左”、“右”这些概念只有在物体坐标系中才有意义。

3.摄像机坐标系

摄像机坐标系是于观察者密切相关的坐标系,它是一种特殊的物体坐标系,被定义在摄像机的屏幕可视区域。摄像机坐标系中,摄像机在原点,x轴向右,z轴向前(朝向屏幕内或摄像机方向),y轴向上(不是世界的上方而是摄像机本身的上方)。

4.惯性坐标系

惯性坐标系简化了世界坐标系到物体坐标系的转换。其原点与物体坐标系重合,而坐标轴与世界坐标系平行。

引入惯性坐标系的意义在于:物体坐标系转换到惯性坐标系只需要旋转,从惯性坐标系转换到世界坐标系只需要平移。

四、向量

对程序猿而言,向量就是一个数组。数组包含的“数”的数目就是向量的维度。一般计算机图形学中的向量主要讨论2维、3维和4维向量。前两者一般用于2维、3维空间中位置和位移的表示,4维向量一般用于颜色(RGB和透明度alpha)。

任意一个点都可以用从原点开始的向量来表示。

下面就是本章重点之一,向量运算法则(示例皆为3维向量):

1.负向量

几何意义:向量变负,将得到一个与原向量大小相等,方向相反的向量。

2.向量的模

上公式中sqrt表示开方。

几何意义:向量的长度

3.标量与向量的乘法

几何意义:以因子|k|缩放向量的长度,如果k < 0则向量的方向被倒转。

4.向量的加减法

几何意义:向量a和b相加的几何解释为:平移向量,使向量a的头连接向量b的尾,接着从a的尾向b的头画一个向量,这就是向量加法的“三角形法则”。减法与之类似。

5.向量点乘

术语“点乘”来自记法a·b中的点号,点乘中的点乘号不可省略。其优先级高于加法和减法。

几何意义:点乘结果越大,2个向量越接近。

a·b = || a || || b || cosθ

θ为两向量夹角

6.向量叉乘

术语“叉乘”来自于记法aXb中的叉号。叉乘号不能省略。叉乘优先级高于点乘。

叉乘不满足结合律。满足反交换律:aXb = -(bXa)

几何意义:aXb垂直于a、b,指向a、b所在平面的正上方,大小为以a、b为两边的平行四边形的面积,即为||a|| ||b|| sinθ。

五、矩阵

对程序猿来说,向量是一维数组,矩阵就是二维数组。向量是标量的数组,矩阵是向量的数组。

矩阵的运算法则如下:

1.标量与矩阵相乘

2.矩阵乘法

只有满足特定情况,两个矩阵才能相乘,一个rXn的矩阵A可以和nXc的矩阵B相乘,结果为一个rXc的矩阵,记为AB。矩阵乘法满足结合律,不满足交换律。

三维矩阵相乘的情况:

矩阵的几何意义:矩阵很抽象,一般来说,方阵(行列数相等的矩阵)能描述任意线性变换。下面将具体讲述矩阵和线性变换的公式。

六、矩阵和线性变换

1.旋转

2.缩放

以单位向量n为缩放方向,k为因子的缩放矩阵为:

3.正交投影

向垂直于单位向量n的平面的投影矩阵为:

4.镜像

通过原点且垂直于n的平面的镜像变换矩阵为:

5.变换的组合

变换组合在渲染中非常普遍,设想世界中有一任意方向、任意位置的物体,我们要把他渲染到任意方向、任意位置的摄像机中。为了做到这一点,我们必须将物体的所有顶点从物体坐标系变换到世界坐标系,接着再从世界坐标系变换到摄像机坐标系。

其中数学变换如下:

这样就能在渲染的循环外先将所有矩阵组合起来,使循环内作矩阵乘法时只需要和一个矩阵相乘即可(省一次矩阵乘法,效率可提高不少)。

三维图形学中的坐标系,向量、矩阵的数学和几何意义以及公式就到此为止,本文涵盖了《3D数学基础+图形与游戏开发》前八章的大部分内容。单纯的理论知识是枯燥乏味的,但三维虚拟世界是丰富多彩的,希望阅读本文的读者将其作为三维图形学基础知识的笔记来看待。



  • OpenGL:涓夌淮鏁板鍩虹鍧愭爣绯汇佸悜閲忋佺煩闃
    绛旓細2D绗涘崱灏鍧愭爣绯绘槸涓涓簿纭畾浣嶇偣鐨勬鏋躲2D鍧愭爣鐨勬爣鍑嗚〃绀烘硶鏄(x,y)锛岀浉淇″ぇ瀹跺垵涓兘瀛﹁繃銆備竴鑸紝鏍囧噯鐨勭瑳鍗″皵鍧愭爣绯绘槸x杞村悜鍙筹紝y杞村悜涓娿傝岃绠楁満鍥惧舰瀛︿腑鐨勫睆骞曞潗鏍囧線寰鏄痻杞村悜鍙筹紝y杞村悜涓嬨傚鍥1鎵绀恒3D绗涘崱灏斿潗鏍囩郴绫讳技锛屽鍔犱簡绗笁涓淮搴︼紝z杞淬3D鍧愭爣绯诲垎涓哄畬鍏ㄤ笉鍚岀殑2绉嶅潗鏍囩郴锛屽乏鎵嬪潗鏍囩郴...
  • OpenGL鍏ラ棬(鍥)-- OpenGL鍧愭爣绯讳笌鍧愭爣鍙樻崲
    绛旓細鎬荤殑鏉ヨ锛孫penGL涓殑鍧愭爣澶勭悊杩囩▼鍖呮嫭妯″瀷鍙樻崲銆佽鍙樻崲銆佹姇褰卞彉鎹佽鍙e彉鎹㈢瓑杩囩▼锛涓夌淮鐗╀綋鐨勬樉绀鸿繃绋嬶紙OpenGL鍧愭爣鍙樻崲鍏ㄥ眬杩囩▼锛夊涓锛歄penGL涓噰鐢ㄦ柟寮2鐨勮鐐规潵瑙i噴瑙嗗彉鎹傚啀涓句竴涓緥瀛愶紝姣斿锛屼竴涓墿浣撲腑蹇冧綅浜庡師鐐癸紝鐓х浉鏈轰篃浣嶄簬鍒濆浣嶇疆鍘熺偣锛屾柟鍚戞寚鍚-Z杞淬備负浜嗗鐗╀綋鐨+Z闈㈡垚鍍忥紝閭d箞蹇呴』灏嗙収鐩...
  • openGL涓殑鍧愭爣绯
    绛旓細openGL涓娇鐢ㄧ殑鏄彸鎵鍧愭爣绯 openGL鍦ㄦ瘡娆¢《鐐圭潃鑹插悗锛屽彲瑙侀《鐐归兘鏄爣鍑嗗寲璁惧鍧愭爣锛屽嵆姣忎釜椤剁偣鐨剎銆亂銆亃鍊奸兘搴旇鍦-1鍒1涔嬮棿锛岃秴鍑鸿繖涓寖鍥寸殑椤剁偣鏄笉鍙鐨 灏嗗潗鏍囪浆鎹负鏍囧噯鍖栬澶囧潗鏍囷紝鎺ョ潃鍐嶈浆鎹负灞忓箷鍧愭爣鐨勮繃绋嬫槸鍒嗘杩涜鐨勶紝杩欎釜杩囩▼涓紝鐗╀綋鐨勯《鐐瑰湪鏈缁堣浆鎹负灞忓箷鍧愭爣涔嬪墠杩樹細琚浆鎹㈠埌澶氫釜鍧...
  • OpenGL ES 3.0(浜)鍧愭爣绯
    绛旓細鍥犱负灏嗘墍鏈夊彲瑙佺殑鍧愭爣閮芥寚瀹氬湪-1.0鍒1.0鐨勮寖鍥村唴涓嶆槸寰堢洿瑙,鎵浠ヤ細鎸囧畾鑷繁鐨勫潗鏍囬泦骞跺皢瀹冨彉鎹㈠洖鏍囧噯鍖栬澶囧潗鏍囩郴,灏卞儚OpenGL ES鏈熸湜鐨勯偅鏍枫備负浜嗗皢椤剁偣鍧愭爣浠庤瀵熷潗鏍囩郴绌洪棿鍙樻崲鍒拌鍓潗鏍囩郴绌洪棿,闇瑕佸畾涔変竴涓姇褰辩煩闃(Projection Matrix),瀹冩寚瀹氫簡涓涓寖鍥寸殑鍧愭爣,姣斿鍦ㄦ瘡涓淮搴︿笂鐨-1000鍒1000銆傛姇褰辩煩闃垫帴鐫浼氬皢鍦...
  • 鍏充簬OpenGL寤虹珛涓夌淮缃戞牸鍧愭爣绯,璇ユ庝箞澶勭悊
    绛旓細鍦ㄥ嚑浣曠敾鏉5.04鐨勯粯璁ゅ畨瑁呬腑锛屼负浜嗘彁楂樿蒋浠舵墦寮閫熷害锛屽苟娌℃湁灏嗘墍鏈夌殑鑷畾涔夊伐鍏烽兘瀹夎杩涘幓锛屾病鏈夊畨瑁呯殑灏卞寘鎷綘瑕佺殑涓夌淮鍧愭爣绯汇傜偣浣忚嚜瀹氫箟宸ュ叿鍥炬爣锛屽彸绉诲姩榧犳爣锛屽悜涓嬪埌鏈涓嬭竟鐨勫浘鏍囷紝鈥滈夋嫨宸ュ叿鏂囦欢澶光濓紝灏嗘枃浠跺す鎸囧悜浣犲畨瑁呰矾寰勪腑鐨則ool folder鏂囦欢澶瑰嵆鍙傛鏃讹紝浣犵殑鑷畾涔夊伐鍏蜂腑灏辨湁浜3d鍜岀珛浣撳嚑浣...
  • OpenGL ES鍩虹鐞嗚 (涓) 鈥斺 缂撳瓨銆佸抚缂撳瓨銆佷笂涓嬫枃涓鍧愭爣绯荤瓑
    绛旓細GPU 鎵鎺у埗鐨勫唴瀛樹腑銆 OpenGL ES 浼氭寜闇鍦ㄤ袱涓唴瀛樺尯鍩熶箣闂村鍒朵俊鎭紝鐭ラ亾浣曟椂鍙戠敓澶嶅埗鏈夊姪浜庣▼搴忕殑浼樺寲銆侽penGL ES 鎬绘槸寮濮嬩簬涓涓煩 褰㈢殑绗涘崱鍎鍧愭爣绯伙紝濡備笅鍥炬墍绀恒侽penGL ES 鍧愭爣鏄互娴偣鏁版潵瀛樺偍鐨勩傜幇浠 GPU 瀵规诞鐐硅繍绠楀仛浜嗕笓闂ㄧ殑浼樺寲锛屽嵆 浣挎槸浣跨敤鍏朵粬鏁版嵁绫诲瀷鐨勯《鐐逛篃浼氳杞崲鎴愭诞鐐瑰笺
  • opengl,obb鍖呭洿鐩,濡備綍灏嗙粯鍥鍧愭爣绯诲潗鏍囪浆鍖栦负涓栫晫鍧愭爣绯诲潗鏍?
    绛旓細鍦ㄧ敤c++璋冪敤opengl搴撶粯鍒3d鍩虹鍥惧舰鏃,闇瑕佷负涓涓墿浣(姣斿涓涓悆)鏋勫缓涓涓寘鍥寸洅,浣嗘槸鎴戝彂鐜板湪缁樺埗鐞冧綋鐨勬椂鍊,鐞冪殑鏃嬭浆/鎷変几/骞崇Щ閮芥槸闈犲綋鍓嶇粯鍥鍧愭爣绯荤殑鏃嬭浆/鎷変几/骞崇Щ(鍗砱lR... 鍦ㄧ敤c++璋冪敤opengl搴撶粯鍒3d鍩虹鍥惧舰鏃,闇瑕佷负涓涓墿浣(姣斿涓涓悆)鏋勫缓涓涓寘鍥寸洅,浣嗘槸鎴戝彂鐜板湪缁樺埗鐞冧綋鐨勬椂鍊,鐞冪殑鏃嬭浆/鎷変几/...
  • 璇烽棶OpenGL閲屾庝箞鐢涓夌淮鍧愭爣鍟?鑳戒笉鑳藉府蹇欎笅涓涓嬩唬鐮?
    绛旓細涓夌淮 include<GL/glut.h> void display(){ glClear(GL_COLOR_BUFFER_BIT);glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(1.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0);glutWireCube(0.5);glutSwapBuffers();} void reshape(int w,int h){ glViewport(0,0,w,h);glMatrix...
  • 浜屻OpenGL鍧愭爣绯
    绛旓細OpenGL ES 鍧愭爣绯荤粺鍖呮嫭 瑙嗙獥鍧愭爣 銆 瑙勬牸鍖栬澶囧潗鏍 銆 瑁佸壀鍧愭爣 鍜 瑙嗚鍧愭爣 銆 涓栫晫鍧愭爣 銆 瀵硅薄鍧愭爣 锛屽涓嬪浘鐨勬磱钁变竴鏍锋垚涓涓灞傜郴缁熴傚湪 涓栫晫 銆 鐗╀綋 銆 鐓х浉鏈 绌洪棿鏄 鍙虫墜鍧愭爣绯 銆 鍦 瑙勮寖鍖栬澶囧潗鏍囩郴 鐢ㄧ殑鏄 宸︽墜鍧愭爣绯 銆傝绐楀潗鏍囦篃灏辨槸鎴戜滑鎵嬫満绐楀彛瀵瑰簲鐨勫潗鏍囩郴缁燂紝浠ュ乏涓婅...
  • OpenGL-鍧愭爣绯
    绛旓細鍧愭爣绯荤粺浠庣瑳鍗″皵鍧愭爣鍒扮墿鐞嗗睆骞曞儚绱犵殑鏄犲皠鏄氳繃瑙嗗彛(viewport)鐨勮缃潵鎸囧畾 瑙嗗彛涓鑸拰绐楀彛鏄瓑姣旂殑 姝f姇褰(Orthographics Projection)鎴栧钩琛屾姇褰 閫忚鎶曞奖 OpenGL閲 姣忎釜椤剁偣鐨剒,y,z閮藉簲璇ュ湪−1鍒1涔嬮棿锛岃秴鍑鸿繖涓寖鍥寸殑椤剁偣灏嗘槸涓嶅彲瑙 椤剁偣鍧愭爣鍦ㄨ浆鎹负灞忓箷鍧愭爣涔嬪墠浼氬彉鎹㈠涓潗鏍囩郴缁( Coordinate ...
  • 扩展阅读:苹果手机三维看图软件 ... 手机三维模型看图软件 ... 管道三维看图软件 ... 思联三维看图软件下载 ... 免费三维cad制图软件 ... 三维设计官网登录 ... 三维设计2024版电子版 ... 三维数模下载网站 ... 免费三维机械图纸下载网站 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网