Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
Android OpenGL坐标问题_Android_Opengl Es - Fatal编程技术网

Android OpenGL坐标问题

Android OpenGL坐标问题,android,opengl-es,Android,Opengl Es,我试图理解OpenGL中坐标系统的基本概念,所以我一直在制作在线指南的测试应用程序 目前,我已使用以下简单坐标在屏幕上绘制了一个简单的正方形: -1.0f, 1.0f, 0.0f, // 0, Top Left -1.0f, -1.0f, 0.0f, // 1, Bottom Left 1.0f, -1.0f, 0.0f, // 2, Bottom Right 1.0f, 1.0f, 0.0f, //

我试图理解OpenGL中坐标系统的基本概念,所以我一直在制作在线指南的测试应用程序

目前,我已使用以下简单坐标在屏幕上绘制了一个简单的正方形:

          -1.0f,  1.0f, 0.0f,  // 0, Top Left
          -1.0f, -1.0f, 0.0f,  // 1, Bottom Left
           1.0f, -1.0f, 0.0f,  // 2, Bottom Right
           1.0f,  1.0f, 0.0f,  // 3, Top Right
在我的应用程序中,我运行以下代码:

     GLU.gluPerspective(gl, 45.0f, (float) width / (float) height, 0.1f, 100.0f);
我在这里的基本理解是,代码将观察端口角度设置为45度,并将窗口大小的宽高比设置为45度

我正在做的另一件事是将查看位置设置为Z轴上的-4个单位:
gl.glTranslatef(0,0,-4)

这就是景观中的结果

在肖像中


我的问题是:

坐标系是如何工作的,一个单位代表多少像素?改变方向和宽高比如何影响方程


如果我想画一个屏幕大小的正方形,具有45度的观察端口和z-4的观察位置。。。如何计算出单位所需的宽度和高度?

我将尽我所能回答

没有任何理由改变宽高比或45度角。按你现有的方式来做,可以防止东西以不寻常的方式水平或垂直拉伸。因为您使用的是透视视图,所以三维空间的深度与没有深度的正交视图相同。在执行glTranslatef(0,0,-4)时,您实际执行的操作是更改MODELVIEW Matix,将其沿负z方向移动4,可能是在实际绘制正方形之前。默认情况下,“摄影机”位于0,0,0,Y(向上)为向上方向


您可能能够将3D空间转换为像素,但对于透视视图类型,我完全不确定您是否真的想要或需要转换。然而,2D正交视图将是另一回事,因为许多人也使用OpenGL进行2D游戏。想要一个与屏幕大小完全相同的正方形,正交可能是最好的选择,你应该能够通过一些谷歌搜索,计算出你的像素密度与2d空间的比较。

谢谢,我认为你为我指明了正确的方向。我一直在阅读关于不同类型投影(正交/透视)的资源,我发现正交的工作方式至少我能理解。这可能不是一种流行的思维方式,但对我来说,透视一直是一种尝试和错误的方式。画一个形状,然后玩不同的变换,直到它是从一个角度看我喜欢。。。然后从那里开始。正交基本上是,只是如何用OpenGL做2D。