gpt4 book ai didi

iphone - 如何将纹理映射到二十面体的边上?

转载 作者:搜寻专家 更新时间:2023-10-30 20:12:20 25 4
gpt4 key购买 nike

长期以来,我一直在尝试开发一款 3D 游戏。我经历了 this 教程,发现我对实际制作游戏的了解还不够。

我目前正在尝试向他在教程中使用的二十面体(在“查看基本绘图”部分)添加纹理,但我无法在多于一侧获得纹理。其他面毫无逻辑地完全不可见(在我添加纹理之前它们完美地显示出来)。

以下是我的主要问题:

  • 如何在不使用一百万个顶点和颜色来模拟结果的情况下正确显示纹理?

  • 如何根据可以在其他函数中设置的变量移动对象?

最佳答案

试着把你的二十面体想象成一个低多边形球体。我想 Lamarche 的二十面体的中心位于 0,0,0。看看这个教程,它是为directX写的但是它解释了球体纹理映射的一般原理http://www.mvps.org/directx/articles/spheremap.htm .我在我的项目中使用它并且效果很好。您可以通过应用各种变换矩阵来移动 3D 对象。你应该有这样的东西

glPushMatrix();
glTranslatef();
draw icosahedron;
glPopMatrix();

这是我如何根据上述教程对半球形进行 texCoords 的代码片段

    GLfloat *ellipsoidTexCrds;
Vector3D *ellipsoidNorms;

int numVerts = *numEllipsoidVerticesHandle;

ellipsoidTexCrds = calloc(numVerts * 2, sizeof(GLfloat));
ellipsoidNorms = *ellipsoidNormalsHandle;

for(int i = 0, j = 0; i < numVerts * 2; i+=2, j++)
{

ellipsoidTexCrds[i] = asin(ellipsoidNorms[j].x)/M_PI + 0.5;
ellipsoidTexCrds[i+1] = asin(ellipsoidNorms[j].y)/M_PI + 0.5;
}

我大约一年半前写了这篇文章,但我记得我计算的顶点法线等于标准化顶点。这是可能的,因为当你有一个以 (0,0,0) 为中心的球形时,顶点基本上描述了来自球体中心的光线。将它们归一化,您就得到了顶点法线。

顺便说一下,如果您打算在 iPhone 上使用 3D 引擎,请使用 Ogre3D,它的速度非常快。

希望这有帮助:)

关于iphone - 如何将纹理映射到二十面体的边上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5330302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com