Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
OpenGL-将2D纹理坐标转换为3D坐标_Opengl_Texture Mapping - Fatal编程技术网

OpenGL-将2D纹理坐标转换为3D坐标

OpenGL-将2D纹理坐标转换为3D坐标,opengl,texture-mapping,Opengl,Texture Mapping,我有一个3D球体上的2D纹理,我想知道如何将纹理上的2D坐标转换成3D坐标。我知道这与纹理的剪裁有关:我正在使用OpenGL的自动剪裁功能将纹理放置在球体上 编辑: 要澄清问题: 我有一个2D平面,它是一个包含红色边界的图像,现在我把物体放在这个平面上,它们有一个碰撞半径,并且正在疯狂地移动。每当物体与红色边框碰撞时,它们就会反弹。 现在我把这个二维平面绕着一个三维球体扭曲。在圆的位置,我想放置在球体上移动的3D模型。现在的问题是从平面上的“简单”二维坐标到球体上更复杂的三维坐标,以正确定位三

我有一个3D球体上的2D纹理,我想知道如何将纹理上的2D坐标转换成3D坐标。我知道这与纹理的剪裁有关:我正在使用OpenGL的自动剪裁功能将纹理放置在球体上


编辑: 要澄清问题:
我有一个2D平面,它是一个包含红色边界的图像,现在我把物体放在这个平面上,它们有一个碰撞半径,并且正在疯狂地移动。每当物体与红色边框碰撞时,它们就会反弹。

现在我把这个二维平面绕着一个三维球体扭曲。在圆的位置,我想放置在球体上移动的3D模型。现在的问题是从平面上的“简单”二维坐标到球体上更复杂的三维坐标,以正确定位三维模型

我的第一种方法是将二维坐标映射到球坐标,球坐标可以很容易地转换为三维坐标,但我该怎么做?

您不会将二维坐标“转换”为三维坐标。您拥有的2D坐标是UV坐标(从0到1),它们表示纹理空间中的一个位置。您要做的是将这些UV坐标映射到顶点。

您可以阅读有关UV贴图的更多信息


在OpenGL中,这取决于您使用的版本。您可以在
glVertex
调用(for)之前使用
glTexCoord
调用,也可以在VBO中设置它,以便在碎片着色器打开时进行处理。

如果您计划使用gluSphere()函数,则无需担心计算UV纹理坐标,因为opengl使用正确的函数为您完成此操作

  • 在这里您可以检查gluSphere()
  • 这里有一个

如果您计划渲染自己的球体,请选中

,那么如何从UV坐标到3D坐标。我需要知道OpenGL如何将UV坐标映射到球体上吗?为每个顶点指定一个UV坐标,并且在渲染时(碎片着色器或OpenGL固定着色器,如果使用较旧版本),它会插值UV坐标和顶点位置,以定义要渲染的像素的颜色。我已经在使用gluSphere了,但是我正在使用纹理作为2D游戏场,我想把它环绕在一个球体上。所以我需要的是一种方法来告诉在3D空间中纹理的像素位于何处。@Backfighter,据我所知,你有一个2D网格MxN网格,你希望你的网格环绕一个球体。对吗?如果是这样的话,您首先不需要gluSphere。因为这意味着您希望使用2D MxN网格构建自己的球体。但是,如果您有纹理(例如jpeg图像而不是2D平面),则可以使用UV坐标覆盖它(请查看我提供的链接)。如果您对纹理覆盖背后的理念感兴趣,请参见。