OpenGL ES和屏幕坐标

有无论如何,我可以让OpenGL ES 2.0接受坐标(例如Vextex )在int意味着像素,而不是默认的float系统? 另外我怎么能设置点(0,0)在屏幕的左上角,而不是在屏幕中间的默认值(使像素坐标系统更容易)?

如果您正在制作2D风格的游戏,则可以在代码中使用例如320×480的屏幕坐标,然后在顶点着色器中将其转换为OpenGL ES坐标。

我建议你为所有的顶点操作使用一个MVPmatrix,但是对于正交2D投影的一个简单的实现,你可以手动完成,如下所示:

 // Minimalist vertex shader #version 100 attribute vec3 position; void main(void) { gl_Position = vec4(position.x * 2.0 / 320.0 - 1.0, position.y * -2.0 / 480.0 + 1.0, position.z, 1.0); } 

该顶点着色器将屏幕坐标原点放在左上角。 并从320 x 480变换坐标。从这里,根据需要replace320和480的值。

正射投影matrix显示在这里: https : //gamedev.stackexchange.com/a/4312/3020

我假设你正在尝试绘制2D系统。 您最好的select是通过调用来使用正投影

 glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble nearVal, GLdouble farVal) 

或者您正在使用的matrix创建函数/帮助程序的等效函数。 这样,你可以指定相对于屏幕的坐标,如果你的屏幕分辨率是800×600,你可以使用

 glOrtho(0, 800, 600, 0, 0, 1) 

得到一个变换matrix,它可以让你在像素值中指定坐标,并在左上角指定原点。

当你通过着色器发送数据时,我不认为你可以使用int。 如果是这样,你不应该。 GPU的devise是为了快速处理漂浮物,所以如果可能的话尽量坚持。

对于第二个问题,您应该详细了解一下3D场景的投影是如何在投影到“视图”或屏幕上时显示的: https : //stackoverflow.com/a/6150298/341358