Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/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
Ios 使用openGL ES更改相机位置_Ios_Opengl Es 2.0_Glkit - Fatal编程技术网

Ios 使用openGL ES更改相机位置

Ios 使用openGL ES更改相机位置,ios,opengl-es-2.0,glkit,Ios,Opengl Es 2.0,Glkit,我有一个iOS简单的项目,我在其中显示一个形状。到现在为止,一直都还不错。现在我正在尝试更改相机位置,以便在等轴测透视图中查看我的对象。我不知道如何使用OpenGL ES 2.x移动/旋转相机 当然,我可以旋转对象本身,使其从等距角度看,但这似乎不是正确的设计 有没有人可以分享一段Objective-C代码来帮助我正确定位这台相机 使用响应中的提示进行更新: 我使用Cocos3D帮助进行矩阵计算 CC3GLMatrix *camera = [CC3GLMatrix matrix]; [camer

我有一个iOS简单的项目,我在其中显示一个形状。到现在为止,一直都还不错。现在我正在尝试更改相机位置,以便在等轴测透视图中查看我的对象。我不知道如何使用OpenGL ES 2.x移动/旋转相机

当然,我可以旋转对象本身,使其从等距角度看,但这似乎不是正确的设计

有没有人可以分享一段Objective-C代码来帮助我正确定位这台相机

使用响应中的提示进行更新:

我使用Cocos3D帮助进行矩阵计算

CC3GLMatrix *camera = [CC3GLMatrix matrix];
[camera populateFromTranslation:CC3VectorMake(0, 0, 0)];
[camera rotateBy:CC3VectorMake(30, 0, 0)];
[camera rotateBy:CC3VectorMake(0, 45, 0)];  
glUniformMatrix4fv(_cameraUniform, 1, 0, camera.glMatrix);
然后在顶点中添加摄影机

gl_Position = Projection * Modelview * Camera * Position;

就我在OpenGL ES中的有限知识而言,没有“摄影机对象”。必须相对于原点移动其他所有对象才能移动或旋转场景。正如Taum提到的,您可以使用着色器来完成此操作。

就我在OpenGL ES中的有限知识而言,没有“摄影机对象”。必须相对于原点移动其他所有对象才能移动或旋转场景。正如Taum所提到的,您可以使用着色器来实现这一点。

OpenGL ES,甚至在2.x中,没有任何对象与世界、摄影机与任何东西的概念。广义上讲,它有一个输入顶点流,以某种方式排列以生成几何体,这些顶点根据某种统一状态进行单独处理,然后计算出哪些碎片需要绘制,并单独执行计算以确定每个碎片的输出颜色

您提供:

  • 顶点
  • 制服
  • 顶点着色器
  • 片段着色器
通常,人们让顶点描述相对于模型中心的位置

它们有一些状态描述模型在世界上的位置,另一些状态描述相机在世界上的位置。他们以制服的形式提供这些信息,通常合并成一个矩阵

然后,他们将有一个顶点着色器,或多或少,只是将统一应用于顶点

最后,片段着色器将采样一些纹理或绘制该面所需的任何内容


因此,在本例中,您可以为对象指定不同的变换,使其看起来是等轴测的。作为第二段查询,设计不错的原因是,在将状态发送到OpenGL的最后一步中,考虑到两个单独的输入,您将计算该转换。因此,您将这两件事分别保存在程序中,然后仅为OpenGL将它们合并为一件事。

OpenGL ES,甚至在2.x中,没有任何对象与世界、相机与任何东西的概念。广义上讲,它有一个输入顶点流,以某种方式排列以生成几何体,这些顶点根据某种统一状态进行单独处理,然后计算出哪些碎片需要绘制,并单独执行计算以确定每个碎片的输出颜色

您提供:

  • 顶点
  • 制服
  • 顶点着色器
  • 片段着色器
通常,人们让顶点描述相对于模型中心的位置

它们有一些状态描述模型在世界上的位置,另一些状态描述相机在世界上的位置。他们以制服的形式提供这些信息,通常合并成一个矩阵

然后,他们将有一个顶点着色器,或多或少,只是将统一应用于顶点

最后,片段着色器将采样一些纹理或绘制该面所需的任何内容


因此,在本例中,您可以为对象指定不同的变换,使其看起来是等轴测的。作为第二段查询,设计不错的原因是,在将状态发送到OpenGL的最后一步中,考虑到两个单独的输入,您将计算该转换。因此,您在程序中将这两件事分开保存,然后仅针对OpenGL将它们合并为一件事。

是的,这是正确的,但通常在着色器中添加一个表示摄影机变换的矩阵(统一参数),然后将每个顶点乘以该矩阵。您的回答让人觉得通常的做法是逐个更改顶点的值;)@谢谢你。我已经有一段时间没有使用OpenGL ES了。这就是我的意思。谢谢你,我想我明白了。是的,这是真的,但通常你在着色器中添加一个表示摄影机变换的矩阵(一个统一参数),然后将每个顶点乘以该矩阵。您的回答让人觉得通常的做法是逐个更改顶点的值;)@谢谢你。我已经有一段时间没有使用OpenGL ES了。这就是我的意思。谢谢你,我想我明白了。谢谢你的解释。现在有道理了。谢谢你的解释。现在有道理了。