基本上,你不应该在那里需要任何花哨的东西。纹理坐标空间从零到一。因此,为中间的顶点选择一些中间值。没有图像我无法更全面地解释它,因此我能做的最好的就是向您指出这篇文章:
UV mapping
这是一个很好的起点。希望这有助于作为一个开端。
我的猜测是:
{
double lng = 2 * M_PI * (double) (j - 1) / longs;
double x = cos(lng);
double y = sin(lng);
double s1, s2, t;
s1 = ((double) i) / halfLats;
s2 = ((double) i + 1) / halfLats;
t = ((double) j) / longs;
glTexCoord2d(s1, t);
glNormal3d(x * zr0, y * zr0, z0);
glVertex3d(x * zr0, y * zr0, z0);
glTexCoord2d(s2, t);
glNormal3d(x * zr1, y * zr1, z1);
glVertex3d(x * zr1, y * zr1, z1);
}
记住在OpenGL中正确设置纹理。具有纹理的示例调用:
glActiveTexture(GL_TEXTURE0);
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
// texture must be bound & enabled
texture.bind();
texture.enable();
drawHemisphere(1, 40, 40);
texture.disable();
我用Java+JOGL来测试它,所以它不是一对一的C++解决方案,但在概念上它应该是相同的。至少你有合适的
glTexCoord2d()
电话。