2D纹理或立方体贴图

时间:2013-05-13 15:36:20

标签: c++ opengl mapping textures

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

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

有没有人知道关于纹理映射的简单教程?

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

U坐标基本上计算如下:

U = asin(x) / PI + 0.5 

V协调:

V = asin(y) / PI + 0.5 

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

答案 2 :(得分: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

这样您就可以使用像this one这样的纹理。请注意,极点被压缩很多。