繁体   English   中英

OpenGl坐标系不在-1到1

[英]OpenGl coordinate system is not at -1 to 1

我正在用OpenGl和C ++创建一个基本的游戏,并且想要制作一个这样的游戏,以便当播放器到达屏幕边缘时他们无法进一步移动。 我无法确定屏幕边缘在哪里。 我知道Windows通常具有1到-1之间的系统,但我的似乎更像是0.63至-0.63。 播放器在屏幕上显示为一个具有x,y和z位置的框,但只能在2D空间中移动。

我想更改范围,使其在-1和1之间,而不是一个奇数值。

我怎样才能做到这一点?

代码已上传到http://pastebin.com/jxd5YhHa

如果您不会动态更改投影矩阵,那么最简单的方法是调用

glScalef(.63f,.63f,1);

在投影矩阵上

然后,您可以基于这些值限制移动。

要随时计算世界空间坐标,应使用gluUnProject。 假设“ x”和“ y”分别是窗口的宽度和高度(您通过gluPerspective传递的值),则可以找到世界空间坐标,如下所示:

double world_llx,world_lly,world_llz;
//world coordinates of lower left corner of window
gluUnProject(0, 0, 0, view_mat, proj_mat, viewport,&world_llx,&world_lly,&world_llz);
//world coordinate of upper right corner of window
double world_urx,world_ury,world_urz;
gluUnProject(x,y,0,view_mat,proj_mat,viewport,&world_urx,&world_ury,&world_urz);

view_mat是您的视图矩阵。 proj_mat是您的投影矩阵。 您可以使用带有GL_MODELVIEW_MATRIX和GL_PROJECTION_MATRIX的glGetDouble *来获得这两者。

viewport参数可能与窗口具有相同的尺寸。 无论如何,这就是您使用glViewport设置的内容。

假设您的XZ平面位于z == 0。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM