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