0

我正在尝试创建一个行星(OpenGL 和 C++),但我不知道如何将图片包裹在我创建的球体周围。

我能够创建一个实心球体,还可以绘制地球的网格(纬度和经度)。我现在最大的问题是在这个球体或网格周围拍一张照片。

有谁知道一个简单易学的纹理映射教程?

4

3 回答 3

2

如果您想要一种简单的方法将纹理添加到球体,我建议您使用gluSphere();来绘制行星,这里有一个示例代码,说明如何制作一个包裹着纹理的球体,首先您必须声明一个新的引用GLUquadric(声明这个在initGl方法之前)

GLUquadric* q;

现在在initGl方法里面我们把下面的代码:

q=gluNewQuadric();
gluQuadricNormals(q, GL_SMOOTH);

textureID = LoadTexture("***.bmp");      //put the name of the photo resource file you want to use.
gluQuadricTexture(q , GL_TRUE);

在内部DrawGlScene方法中,我们使用以下代码来绘制球体并将我们创建的纹理包裹在它周围:

glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,textureID);
gluSphere(q , 2 , 30 , 30);     
glDisable(GL_TEXTURE_2D);
于 2013-05-14T01:26:00.277 回答
2

U坐标基本上被计算为:

U = asin(x) / PI + 0.5 

V坐标:

V = asin(y) / PI + 0.5 

以下是一些关于如何在球体网格上实现立方体和球体贴图的易于理解的教程:

于 2013-05-14T08:23:15.593 回答
1

我假设您以这种方式(或多或少)创建具有经度和纬度两个参数的行星:

for longitude from -Pi to Pi
    from latitude from -Pi/2 to Pi /2
        add vertex
    next
next

指定纹理坐标uv顶点的最简单方法是使用经度/纬度坐标。

u = (longitude + Pi) / (2 Pi)
v = (Pi/2 - latitude) / Pi

这样你就可以使用这样的纹理。请注意,极点被压缩得非常厉害。

于 2013-05-13T15:55:13.753 回答