【问题标题】:OpenGL - Convert 2D Texture Coordinates into 3D CoordinatesOpenGL - 将 2D 纹理坐标转换为 3D 坐标
【发布时间】:2015-06-29 17:56:54
【问题描述】:

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


编辑: 澄清问题:
我有一个 2D 平面,它是一个包含用红色绘制的边框的图像,现在我将对象放在这个平面上,这些对象具有碰撞半径并且四处移动。每当物体与红色边框碰撞时,它们就会反弹回来。

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

我的第一种方法是将 2D 坐标映射到可以轻松转换为 3D 坐标的球坐标,但我该怎么做呢?

【问题讨论】:

    标签: opengl texture-mapping


    【解决方案1】:

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

    您可以阅读有关 UV 映射的更多信息here

    在 OpenGL 中,这取决于您使用的版本。在glVertex 调用之前使用glTexCoord 调用(对于old versions of OpenGL),或者将其设置在VBO 中以在newer versions of OpenGL 上的片段着色器中进行处理。

    【讨论】:

    • 那么我如何从UV坐标到3D坐标。我需要知道,OpenGL 如何将 UV 坐标映射到球体上吗?
    • 您为每个顶点分配一个 UV 坐标,并且在渲染时(片段着色器,或 OpenGL 固定着色器,如果使用旧版本)它会插入 UV 坐标和顶点位置以定义像素的颜色呈现。可以在here 找到关于其工作原理的非常好的详细说明。
    【解决方案2】:

    如果您打算使用 gluSphere() 函数,则无需担心计算 UV 纹理坐标,因为 opengl 会为您提供正确的函数。

    如果您打算渲染自己的球体,请查看this question

    【讨论】:

    • 我已经在使用 gluSphere,但我将纹理用作 2D 游戏场,我想将它包裹在一个球体周围。所以我需要一种方法来判断纹理像素在 3D 空间中的位置。
    • @Backfighter 据我了解,您有一个 2D 网格 MxN 网格,并且您希望您的网格环绕 gluSphere。这是正确的吗?如果是这样,您首先不需要 gluSphere。因为这意味着您想使用 2D MxN 网格构建自己的球体。但是,如果您有纹理(例如 jpeg 图像而不是 2D 平面),您可以使用 UV 坐标覆盖它(查看我提供的链接)。如果您对纹理覆盖背后的想法感兴趣,请参阅wiki page here
    猜你喜欢
    • 2018-05-25
    • 2011-07-26
    • 1970-01-01
    • 2015-01-01
    • 2014-06-12
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多