2011-03-20 273 views
1
GL.LoadIdentity(); 
    GL.Translate(0f, 0f,-1f); 

    GL.Begin(BeginMode.Quads); 
    GL.Color4(1f, 0f, 0f, 1f); 

    GL.Vertex3(-1.0f, 1.0f,0);    
    GL.Vertex3(1.0f, 1.0f,0);    
    GL.Vertex3(1.0f, -1.0f,0);    
    GL.Vertex3(-1.0f, -1.0f,0);    
    GL.End(); 

這是使用世界座標系,現在我想要使用像素中的屏幕位置。怎麼做?非常感謝您的幫助OpenGL:如何將世界座標轉換爲屏幕座標?

回答

2

OpenGL沒有「世界」座標系。它具有模型視圖空間,該模型視圖空間由模型視圖矩陣轉換,並具有從模型視圖空間到投影矩陣轉換的剪輯空間。剪輯空間是[-1,1]^3,它被映射到視口和Z緩衝區深度範圍。

因此,您需要做的是定義一個轉換鏈,通過標識轉換將模型視圖座標映射到視口座標(對Z不適用)。從剪輯空間到視口的轉換是固定的。所以,你要做到這一點使用的投影,使模型視圖恆等變換:

該做的伎倆:

glViewport(x, y, width, height); 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0, width, 0, height, -1, 1); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

把它放在每一套繪圖命令在視口中像素的空間來發生的前面。

相關問題