OpenGL中旋轉平移縮放等變換的順序對模型的影響 -开发者知识库

OpenGL中旋轉平移縮放等變換的順序對模型的影響 -开发者知识库,第1张

l 前提:

0x01. 假設繪制頂點的語句為Draw Array,變換的語句(旋轉、平移、縮放)為M,而

M0;

M1;

M2;

Draw Array;

則稱對Array先進行M2再進行M1、M0

0x02. 本文基於SharpGL版本的OpenGL(C#版本)

l 預備知識:

0x01. gl.Rotate是按照右手系來計算的,即設旋轉軸為大拇指方向,則從指跟到指尖的方希為正方向。OpenGL中旋轉平移縮放等變換的順序對模型的影響 -开发者知识库,clip_image001,第2张

0x02. gl.Scale 會改變法向量的值,從而會對顏色有影響。通過gl.Enable(OpenGL.GL_NORMALIZE)或者

gl.Disable(OpenGL.GL_LIGHTING)可消除其影響。

l 實驗

0x01. 先gl.Rotate(0,0,90),再gl.Translate(100,0,0):可見旋轉不影響坐標系的方向,旋轉后平移的方向和原坐標系方向相同

OpenGL中旋轉平移縮放等變換的順序對模型的影響 -开发者知识库,clip_image002,第3张 OpenGL中旋轉平移縮放等變換的順序對模型的影響 -开发者知识库,clip_image003,第4张 OpenGL中旋轉平移縮放等變換的順序對模型的影響 -开发者知识库,clip_image004,第5张

0x02. 先gl.Scale(0.5, 0.5, 0.5),再gl.Translate(100, 0, 0):可見放縮不會影響平移的長度,其長度和原坐標系長度保持一致

OpenGL中旋轉平移縮放等變換的順序對模型的影響 -开发者知识库,clip_image005,第6张 OpenGL中旋轉平移縮放等變換的順序對模型的影響 -开发者知识库,clip_image006,第7张 OpenGL中旋轉平移縮放等變換的順序對模型的影響 -开发者知识库,clip_image007,第8张

0x03. 先gl.Scale(0.5, -0.5, 0.5),再gl.Rotate(0, 0, -90):可見放縮放值為負值,形成軸對稱的情形下,旋轉的方向還是原坐標系中旋轉的方向

OpenGL中旋轉平移縮放等變換的順序對模型的影響 -开发者知识库,clip_image008,第9张 OpenGL中旋轉平移縮放等變換的順序對模型的影響 -开发者知识库,clip_image009,第10张 OpenGL中旋轉平移縮放等變換的順序對模型的影響 -开发者知识库,clip_image010,第11张

0x04. 先gl.Translate(100, 0, 0),再gl.Scale(0.5, -0.5, 0.5),再gl.Rotate(0, 0, -90):旋轉和縮放都是在原坐標系下進行的

OpenGL中旋轉平移縮放等變換的順序對模型的影響 -开发者知识库,clip_image011,第12张 OpenGL中旋轉平移縮放等變換的順序對模型的影響 -开发者知识库,clip_image012,第13张 OpenGL中旋轉平移縮放等變換的順序對模型的影響 -开发者知识库,clip_image013,第14张 OpenGL中旋轉平移縮放等變換的順序對模型的影響 -开发者知识库,clip_image014,第15张

l 總結

無論進行說明轉換操作,都不會改變原坐標系,而后續的轉換操作也都是基於原坐標系進行的。

最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复