Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在OpenGL ES中,如何将屏幕坐标转换为世界坐标?_Iphone_Opengl Es - Fatal编程技术网

Iphone 在OpenGL ES中,如何将屏幕坐标转换为世界坐标?

Iphone 在OpenGL ES中,如何将屏幕坐标转换为世界坐标?,iphone,opengl-es,Iphone,Opengl Es,这是一个2D游戏,所以只有一个x轴和y轴。游戏在iPhone上处于横向模式。我希望能够设置渲染纹理位置的屏幕x和y坐标。如果您正在进行2D游戏,您可以设置投影和模型视图矩阵,这样您就根本不需要转换: // This goes in your init code somewhere // Set up 480x320 orthographic projection glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrthof(-240.0f, 24

这是一个2D游戏,所以只有一个x轴和y轴。游戏在iPhone上处于横向模式。我希望能够设置渲染纹理位置的屏幕x和y坐标。

如果您正在进行2D游戏,您可以设置投影和模型视图矩阵,这样您就根本不需要转换:

// This goes in your init code somewhere
// Set up 480x320 orthographic projection
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(-240.0f, 240.0f, -160.0f, 160.0f, -1.0f, 1.0f);

// Rotate into landscape mode
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(-90.0f, 0.0f, 1.0f, 0.0f);
这使得世界坐标(-240,-160)映射到屏幕的左上角(在横向模式下为左下角),(240160)映射到右下角(横向模式下为右上角),等等。由于iPhone的屏幕是480x320,因此您不需要通过设置矩阵在世界坐标和屏幕坐标之间进行转换


当然,如果您希望能够移动相机,则需要通过相机的位置进行偏移。

如果您正在进行2D游戏,则可以设置投影和模型视图矩阵,以便您根本不需要转换:

// This goes in your init code somewhere
// Set up 480x320 orthographic projection
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(-240.0f, 240.0f, -160.0f, 160.0f, -1.0f, 1.0f);

// Rotate into landscape mode
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(-90.0f, 0.0f, 1.0f, 0.0f);
这使得世界坐标(-240,-160)映射到屏幕的左上角(在横向模式下为左下角),(240160)映射到右下角(横向模式下为右上角),等等。由于iPhone的屏幕是480x320,因此您不需要通过设置矩阵在世界坐标和屏幕坐标之间进行转换


当然,如果您想移动相机,则需要通过相机的位置进行偏移。

谢谢。我刚刚注意到,在iPhone的OpenGL ES中没有2D方法。你知道等价语句是什么吗?gluOrtho2D()只是glOrtho()的一个包装,所以我用它代替了它。谢谢。我刚刚注意到,在iPhone的OpenGL ES中没有2D方法。你知道等价语句是什么吗?gluOrtho2D()只是glOrtho()的包装器,所以我用它代替了它。