1. 程式人生 > >OpenGL備忘6---座標系統

OpenGL備忘6---座標系統

1.經常用到的五個座標系統
  • 區域性空間(Local Space,或者稱為物體空間(Object Space))
  • 世界空間(World Space)
  • 觀察空間(View Space,或者稱為視覺空間(Eye Space))
  • 裁剪空間(Clip Space)
  • 螢幕空間(Screen Space)
概述: 最重要三個矩陣:模型(Model)、檢視(View)、投影(Projection)====MVP coordinate_systems
  1. 區域性座標是物件相對於區域性原點的座標;也是物件開始的座標。
  2. 將區域性座標轉換為世界座標,世界座標是作為一個更大空間範圍的座標系統。這些座標是相對於世界的原點的。
  3. 接下來我們將世界座標轉換為觀察座標,觀察座標是指以攝像機或觀察者的角度觀察的座標。
  4. 在將座標處理到觀察空間之後,我們需要將其投影到裁剪座標。裁剪座標是處理-1.0到1.0範圍內並判斷哪些頂點將會出現在螢幕上。
  5. 最後,我們需要將裁剪座標轉換為螢幕座標,我們將這一過程成為視口變換(Viewport Transform)。視口變換將位於-1.0到1.0範圍的座標轉換到由glViewport函式所定義的座標範圍內。最後轉換的座標將會送到光柵器,由光柵器將其轉化為片段。
2.正射投影(Orthographic Projection) orthographic projection frustum
glm::ortho(0.0f, 800.0f, 0.0f, 600.0f, 0.1f, 100.0f);
前兩個引數指定了平截頭體的左右座標, 第三和第四引數指定了平截頭體的底部和上部。 通過這四個引數我們定義了近平面和遠平面的大小,
然後第五和第六個引數則定義了近平面和遠平面的距離。 這個指定的投影矩陣將處於這些x,y,z範圍之間的座標轉換到標準化裝置座標系中。
透視投影(Perspective Projection) perspective_frustum
glm::mat4 proj = glm::perspective(45.0f, (float)width/(float)height, 0.1f, 100.0f);
最終應用到頂點組合到一起公式;
注意每個矩陣被運算的順序是相反的(記住我們需要從右往左乘上每個矩陣)。最後的頂點應該被賦予頂點著色器中的gl_Position且OpenGL將會自動進行透視劃分和裁剪。
按照約定,OpenGL是一個右手座標系。最基本的就是說正x軸在你的右手邊,正y軸往上而正z軸是往後的。

coordinate_systems_right_handed
Vertex Shader中應用: uniform mat4 model; uniform mat4 view; uniform mat4 projection;
void main(){   // 注意從右向左讀 gl_Position = projection * view * model * vec4(position, 1.0f);  ... }
傳到shader中寫法“ GLint modelLoc = glGetUniformLocation(ourShader.Program, "model"); glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model));...  // 觀察矩陣和投影矩陣與之類似
常用例子頂點: 繪製一個立方體頂點位置:一共需要36個頂點(6個面 x 每個面有2個三角形組成 x 每個三角形有3個頂點) glDrawArrays(GL_TRIANGLES, 0, 36); GLfloat vertices[] = {   -0.5f, -0.5f, -0.5f, 0.0f, 0.0f,   0.5f, -0.5f, -0.5f, 1.0f, 0.0f,   0.5f, 0.5f, -0.5f, 1.0f, 1.0f,   0.5f, 0.5f, -0.5f, 1.0f, 1.0f,   -0.5f, 0.5f, -0.5f, 0.0f, 1.0f,   -0.5f, -0.5f, -0.5f, 0.0f, 0.0f,   -0.5f, -0.5f, 0.5f, 0.0f, 0.0f,   0.5f, -0.5f, 0.5f, 1.0f, 0.0f,   0.5f, 0.5f, 0.5f, 1.0f, 1.0f,   0.5f, 0.5f, 0.5f, 1.0f, 1.0f,   -0.5f, 0.5f, 0.5f, 0.0f, 1.0f,   -0.5f, -0.5f, 0.5f, 0.0f, 0.0f,   -0.5f, 0.5f, 0.5f, 1.0f, 0.0f,   -0.5f, 0.5f, -0.5f, 1.0f, 1.0f,   -0.5f, -0.5f, -0.5f, 0.0f, 1.0f,   -0.5f, -0.5f, -0.5f, 0.0f, 1.0f -0.5f, -0.5f, 0.5f, 0.0f, 0.0f,   -0.5f, 0.5f, 0.5f, 1.0f, 0.0f,   0.5f, 0.5f, 0.5f, 1.0f, 0.0f,   0.5f, 0.5f, -0.5f, 1.0f, 1.0f,   0.5f, -0.5f, -0.5f, 0.0f, 1.0f,   0.5f, -0.5f, -0.5f, 0.0f, 1.0f,   0.5f, -0.5f, 0.5f, 0.0f, 0.0f,   0.5f, 0.5f, 0.5f, 1.0f, 0.0f,   -0.5f, -0.5f, -0.5f, 0.0f, 1.0f 0.5f, -0.5f, -0.5f, 1.0f, 1.0f 0.5f, -0.5f, 0.5f, 1.0f, 0.0f 0.5f, -0.5f, 0.5f, 1.0f, 0.0f -0.5f, -0.5f, 0.5f, 0.0f, 0.0f -0.5f, -0.5f, -0.5f, 0.0f, 1.0f, -0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.5f, 0.5f, -0.5f, 1.0f, 1.0f 0.5f, 0.5f, 0.5f, 1.0f, 0.0f 0.5f, 0.5f, 0.5f, 1.0f, 0.0f -0.5f, 0.5f, 0.5f, 0.0f, 0.0f,   -0.5f, 0.5f, -0.5f, 0.0f, 1.0f}; OpenGL將深度資訊儲存在Z緩衝區(Z-buffer),允許OpenGl決定何時覆蓋一個畫素何時不覆蓋,使用z--buffer可以設定Opengl進行深度測試 不開啟的話會出現:某些本應被遮擋住的面被繪製在了這個立方體的其他面的上面 Z-緩衝區 深度測試(Depth Testing)
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

相關推薦

OpenGL6---座標系統

1.經常用到的五個座標系統 區域性空間(Local Space,或者稱為物體空間(Object Space))世界空間(World Space)觀察空間(View Space,或者稱為視覺空間(Eye

】 Linux系統安裝時分割槽的選擇(推薦)

前言: 以前初識Linux時,對Linux系統安裝時分割槽的選擇,一點都不瞭解,導致幾次沒法進行下一步安裝,因此就靜下心來,專門拿出時間研究了研究這方面的知識; 以下內容就是以前通過研究Linux安裝過程中分割槽的知識總結出來的一些知識;貼上來,做個備份,也希望對Linux初

】JavaEE系統架構師學習路線之實戰篇

1初級篇         J2SE的Socket網路程式設計應用         J2SE的反射機制高階應用         J2SE高深講解         JAVA程式設計思想 初級教程[MP4]         JAVA程式設計思想 高階教程[MP4]        

】JavaEE系統架構師學習路線圖

轉載自:http://www.javaxxz.com/thread-286706-1-1.html 第1階段(Java程式設計師) - Java語言基礎            -01-常見Dos命令、Java歷史、Java跨平臺、配置Path環境變數、第一個HelloWor

用glew,glfw,FreeImage實現opengl學習筆記6座標變換

這個程式碼參考教程點選開啟連結  這個教程很詳細,程式碼是實現座標的轉換,教程帶原始碼,我仿照原始碼在自己本地的實現,這裡給大家參考使用載入圖片是用的FreeImage是一個開源的載入圖片的,網上的資料也挺多的。這個程式的原始碼在這點選開啟連結  點選裡面的shader3

GLFW+GLEW搭建opengl環境(

使用VS2017社群版本(免費版) 下載GLFW和GLEW原始碼。 使用CMAKE生成工程檔案 開啟右擊GLFW和GLEW專案編譯 GLFW預設是靜態庫 編譯GLEW時調整為靜態庫。將生成的lib和原始碼中的include資料夾放好,新建空的C++專案。在專案屬性設定好路徑。  

Learn OpenGL (六):座標系統

為了將座標從一個座標系變換到另一個座標系,我們需要用到幾個變換矩陣,最重要的幾個分別是模型(Model)、觀察(View)、投影(Projection)三個矩陣。我們的頂點座標起始於區域性空間(Local Space),在這裡它稱為區域性座標(Local Coordinate),它在之後會變為世界座

opengl學習之路六,座標系統

QQ:609162385 下載連結:https://download.csdn.net/download/cqltbe131421/10703034 在上一個教程中,我們學習瞭如何有效地利用矩陣的變換來對所有頂點進行變換。OpenGL希望在每次頂點著色器執行後

ubuntu系統裝機流程與相關軟體安裝

前段時間說有機會把ubuntu裝機的流程貼上來,讓大家避免一些坑,今天電腦系統又崩了,就有了重灌系統的機會,雖然瀏覽器的收藏夾匯出了但沒儲存成功心都在流血,但還是要保持微笑。 下面就是流程啦。 裝一個系統盤重啟電腦什麼的就不說啦,注意的是裝的時候在最後一布把登陸需要密碼給

allegro 16.6 使用

1 新增過孔檔案   開啟PCB Editor,選擇Setup->Constraints->Constraint Manager,選擇Physical->All Layers->Vias,進入Edit Via List. 在此介面中可選擇可使用個

】笨小孩學python3.6版視訊

百度網盤 教程目錄: lpy3thw_ex10.mp4 lpy3thw_ex11.mp4 lpy3thw_ex12.mp4 lpy3thw_ex13.mp4 lpy3thw_ex14.mp4 lpy3thw_ex15.mp4 lpy3thw_ex16.mp4 lpy3th

RedHat Linux 6.3 下安裝 zabbix3.4

1.服務端 安裝zabbix,需要需要具備LAMP環境。 本次安裝各軟體的版本如下 zabbix:3.4, apache:2.2.15(檢視命令:httpd -v); php:5.6.37(檢視命令:php -v); mysql:5.7.23 安裝過程備忘如下: apach

CentOS6.8手動安裝MySQL5.6 轉自貓頭老鷹 自用

原文連結:http://www.cnblogs.com/liuyi2614/p/6382183.html 眾所周知,mysql5.7推出後有很多沒有填好的坑,對於老的系統和專案相容性也存在問題,所以現在普遍的web專案還是應該跑在centos6.8+mysql5.6的環境之下,今天主要說一下mysql5.6

】基於Hadoop,Spark大資料技術的推薦系統演算法實戰教程

課程簡介:                 2017年最新大資料推薦系統演算法實戰視訊教程,共18.1G容量。附講義、程式碼與練習資料,配套齊全,高清不加密。                 課程介紹:                  網際網路行業是大資料應用最前沿的陣地,目前主流的大資料技術,包括 ha

iscsitarget 在Linux2.6.32核心上編譯 若干編譯錯誤與解決方法(

#make make -C usr make[1]: Entering directory `/work/iscsitarget-0.4.16/usr' cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include 

】學習路線之JavaEE系統架構師實戰篇系列視訊教程

1初級篇        J2SE的Socket網路程式設計應用        J2SE的反射機制高階應用        J2SE高深講解        JAVA程式設計思想 初級教程[MP4]        JAVA程式設計思想 高階教程[MP4]        JAVA程式設計思想 中級教程[MP4]   

統一D3D與OpenGL座標系統

        DirectX 3D與OpenGL座標系統的差異性,給我們帶來很大的麻煩,讓跨平臺程式設計的新手很困惑。最近在做一個跨平臺的遊戲,仔細看了下兩者的矩陣,發現並沒有什麼大區別,將d3

】Java高效能高併發秒殺系統實戰視訊教程

1-1 java高併發商城秒殺優化導學.mp41-2 專案環境搭建(Eclipse).mp41-3 專案環境搭建(IDEA).mp41-4 整合mybatis.mp41-5 安裝redis.mp41-6 整合redis上.mp41-7 整合redis中.mp41-8 整合r

Android系統1

time fas fuse persist mount 恢復 freezer uac 系統分區 Android的4種模式 模式 功能 ADB調試system 正常使用 開發者模式開啟usb調試recovery 備份,恢復模式 卡刷模式 twrp下開啟ADB Sidelo

VC++6.0用New DataBase Wizard建立資料庫時出現無法連線的問題解決

搜了無數次未能理解之後,自己突然想到的 在使用VC++ 6.0利用wizard建立資料庫時,出現如下情況: 解決方案為: 1,.檢查伺服器是否啟動,通過SQL Server配置管理器檢視SQL Server服務下SQL Server的狀態是否為”正在執行“; 2.檢查TC