1. 程式人生 > >OpenGL座標系的理解

OpenGL座標系的理解

最近在專案中老是遇到座標系轉換,尤其是在OpengGL座標系和視窗座標系之間轉換。OpengGL座標系和視窗座標系之間的關係如下圖所示:


許多情況下我們想用滑鼠去挑選某個物體。要使用選擇模式實現這個功能,首先是在滑鼠點選附近的範圍內建立一個裁剪區域(可視區域),然後測試有哪些物體在這個可視區域內。GLU庫中提供了一個函式gluPickMatrix,我們可以用這個函式建立一個用於描述新的可視區域的矩陣,然後乘以當前的投影矩陣,就可以得到我們想要的可視區域。

void gluPickMatrix(GLdouble x, GLdouble y, GLdouble width, GLdouble height, GLint viewport[4]);

x,y為視窗的座標定義了可視區域的中心,我們可以設定為滑鼠點選的位置。width 和height指定了可視區域的寬高(以視窗中的畫素為單位)。viewport是視口。我們可以通過glGetIntegerv(GL_VIEWPORT, viewport);來獲得。

gluPickMatrix的效果是把裁剪區域變換為單位立方體-1<= (x,y,z) <=1(或-w<=(wx,wy,wz)<=w,挑選矩陣有效的執行一次正交變換,把裁剪區域對映到單位立方體上。

由於OpenGL的座標原點在視窗的左下角,而Windows的座標原點在視窗的左上角。
所以我們呼叫時,要注意把Y軸的值反轉一下。
gluPickMatrix(xPos, viewport[3] – yPos + viewport[1], 2,2, viewport);


相關推薦

OpenGL座標系理解

最近在專案中老是遇到座標系轉換,尤其是在OpengGL座標系和視窗座標系之間轉換。OpengGL座標系和視窗座標系之間的關係如下圖所示: 許多情況下我們想用滑鼠去挑選某個物體。要使用選擇模式實現這個功能,首先是在滑鼠點選附近的範圍內建立一個裁剪區域(可視區域),然後測試有

openGL座標系

從我們構造模型的區域性座標系(Local/Object Space)經過一系列的處理最終渲染到螢幕座標系(Screen Space)下,這個過程有6種座標系。 一、世界座標系(World Coordinates) 學名:右手笛卡爾座標系統。 在OpenGL中,世界座標系是以螢幕中心為原點(0, 0, 0

OpenGL ES 理解紋理與紋理過濾

1.理解紋理 OpenGL中的紋理可以用來表示影象,照片,甚至由一個數學演算法生成的分形資料。每個二維的紋理都由許多小的紋理元素組成,它們是小塊的資料,類似於我們前面討論過的片段和畫素。要使用紋理,最常用的方式是直接從一個影象檔案載入資料。 每個二維紋理都有其自己

OpenGL理解一些基本問題

寫在前面啦啦啦,搞了很久的Unity Shaders,越學越覺得基礎知識很重要。學Unity Shader的時候,總會想,shader到底是什麼呢?shader的pipeline是什麼呢?它們是怎麼工作

OpenGLES Android篇零基礎系列(二):OpenGL座標系及模型矩陣(ModelViewMatrix),投影矩陣(ProjectionMatrix)等的深入理解

上一篇我們粗略的介紹了下GLES20 中 GLSurfaceView以及Render介面的使用。 對於三角形頂點座標的定義並沒有做出註釋,其實在官方的ApiDemo中,它也是赤裸裸的,一個註釋都沒有,且程式碼寫得一點都不敢恭維,不知道那位同行現在是不是還在go

OpenGL程式設計指南8-Transform Feedback例子理解

transform feedback 是,OpenGL管線中,的,頂點處理階段結束之後,圖元裝配和光柵化之前的一個步驟。transform feedback,可以重新捕獲即將裝配為圖元(點、線段、三角形)的頂點,然後將它們的部分或全部屬性傳遞到快取物件中。 transform feedback主

android平臺下OpenGL ES 3.0從矩形中看矩陣和座標系

OpenGL ES 3.0學習實踐 android平臺下OpenGL ES 3.0從零開始 android平臺下OpenGL ES 3.0繪製純色背景 android平臺下OpenGL ES 3.0繪製圓點、直線和三角形 android平臺下OpenGL E

OpenGL開發關於VAO和VBO的理解

文章目錄 OpenGL渲染時涉及到的資料傳輸 上述流程中涉及到的記憶體 一、VBO的相關API呼叫 二、渲染vbo記憶體中的資料需要呼叫的API 三、VAO的相關呼叫的API

3分鐘理解齊次座標系

本文用於初學者學習齊次座標系。博主也是通過這篇文章學習的,認為該文章通俗易懂,並且非常形象,所以轉載,供各位讀者觀看,同時以防博主遺忘知識點。 下面開始進入正題: http://blog.csdn.net/janestar/article/details/44244849

理解對映方式、裝置座標系、邏輯座標系、設定邏輯座標原點與裝置座標原點

一、關於對映方式 參考的網路文章地址:http://blog.csdn.net/xuyongbeijing2008/article/details/8063801  對映方式定義了將邏輯單位轉換為裝置單位的度量單位,並定義了邏輯座標系的X、Y軸的方向。所以,對映方式不

OPENGL裝置座標系(dns)是左手座標系,螢幕座標系原點在左下角向上向右增加

4.顏色值格式不同 D3D9 最常用的頂點顏色格式是BGRA格式(也就是D3DCOLOR),而OpenGL預設用的是RGBA格式。D3D9用BGRA純粹是因為歷史原因,早期硬 件不支援UBYTE4的格式,只能用D3DCOLOR,然後再shader裡呼叫D3DCOLORtoUBYTE4。現在的GPU都支援

OpenGL——對渲染的理解小結

最近斷斷續續,看了好久的OpenGL,終於有感覺有一點點入門了,渲染過程中,一些之前我很不理解的東西,變得有些清晰了。正如我當年研究CUDA平行計算的時候,從序列思想,到並行程式設計思想的過度,是最難的一步。 對我來說,學習的過程中遇到了一下難以馬上弄通透的問題。 難點1

OpenGl的glMatrixMode()函式理解

glMatrixMode()函式的引數,這個函式其實就是對接下來要做什麼進行一下宣告,也就是在要做下一步之前告訴計算機我要對“什麼”進行操作了,這個“什麼”在glMatrixMode的“()”裡的選項(引數)有3種模式: GL_PROJECTION 投影, GL_MODEL

openGL 頂點,座標系,紋理座標

瞭解座標系是繪製圖形的基礎。在使用openGL的場景中,有世界座標,區域性座標,紋理座標,和螢幕座標幾種。 openGL 座標系: 分3個軸,x,y,z 中心點為o, 箭頭方向為正方向,最大與最小值為1和-1,這是經過歸一化處理的。這樣設計是為了顯示卡計算方便。

OpenGL-對紋理的理解

看了《OpenGL程式設計指南》第九章紋理貼圖之後,一開始還對紋理的理解思路還是有點亂,後面不斷的閱讀別人的部落格之後才慢慢的有了更加清晰的認識,於是通過部落格再進一步理順一下思路。 1.關於紋理的一些基本概念理解 紋理:簡單的說,紋理就是矩形的資料陣列。例

OpenGl 學習——三種變換的理解

    剛開始學OpenGL, 沒有認真看書,結果似懂非懂,其實一點都沒有搞懂,尤其是被裡面的各種變換搞得暈來轉去的。沒辦法,反覆的讀《OpenGL 程式設計指南》紅寶書中關於變換的章節,終於有了點眉目了。瞬間感覺:啊,世界變得清明瞭許多!     廢話不多說,直接切入正題

Opengl的glPushMatrix和glPopMatrix理解

        glPushMatrix()和glPopMatrix()的配對使用可以消除上一次的變換對本次變換的影響,將本次需要執行的縮放、平移等操作放在兩者之間。使本次變換是以世界座標系的原點為參考點進行。 1)OpenGL中的modelview矩陣變

OpenGL——理解HDR與Bloom

學習資料連結 https://learnopengl-cn.github.io/05%20Advanced%20Lighting/06%20HDR/ https://learnopengl-cn.github.io/05%20Advanced%20Lighting/07%2

OPENGL 矩陣座標系變換

所謂的座標系變換就是呼叫某個函式後得到的座標。 關係如下圖:(當時小謝給我畫的~) 綠色框框內的表示需要自己寫程式碼的~     齊次座標(Homogeneous coordinates)   三維頂點(x,y,z),引入新分

OpenGL ES 2.0座標系設定與頂點轉換

原文:http://blog.csdn.net/yu0089/article/details/18600903   前面我們對使用Android OpenGL ES 2.0繪圖做過綜述。對於剛剛接觸到OpenGL的人來說,紋理和貼圖往往令其感動很頭疼。在解開這些謎團之前,