2017-05-15 61 views
1

我正在寫一個OpenGL庫,可以使用屏幕座標繪製點,線和矩形。但是,我不知道如何將屏幕座標轉換爲剪輯或相機座標。我使用現代OpenGL(頂點數組和頂點緩衝區,以及着色器)。如何使用屏幕座標繪製OpenGL基元(GL_POINT,GL_LINE等)?

這基本上就是我努力爭取:

DrawPoint(10, 10, 5); // draws a point at pixel 10, 10 with a radius of 5 

同樣的概念用於繪製線條和矩形。

此外,我不提供代碼,因爲這不是我正在尋找的,我正在尋找概念和數學。

回答

2

你可能想要的是一個正交投影矩陣。此代碼會在你的抽獎循環:

int width = getFramebufferWidth(); 
int height = getFramebufferHeight(); 
glm::mat4 mvp = glm::ortho(0, width, 0, height); 

glUniformMatrix4fv(glGetUniformLocation(program, "mvp"), 1, false, glm::value_ptr(mvp)); 

glViewport(0, width, 0, height); 
//Draw the Objects, clear the screen, whatever it is you need to do. 

然後,在你的Vertex Shader,你有這樣的事情:

#version 330 

layout(location = 0) in vec2 position; 

uniform mat4 mvp; 

void main() { 
    gl_Position = mvp * vec4(position, 0, 1); 
} 

然後,當你指定的東西在<10, 10>位置繪製,它將完全在那個位置上繪製。

此代碼使用GLM構建有問題的矩陣。

+0

謝謝,這似乎應該工作。 –

相關問題