2D纹理或立方体映射
2D texture or cube mapping
我正在尝试创建一个行星(OpenGL和c++),但我不知道如何围绕我创建的球体包装图片。
我能够创建一个实心球体,我也可以绘制网格(纬度和经度)的行星。我现在最大的问题是如何获得这个球体或网格周围的图像。
有没有人知道一个简单的遵循纹理映射教程?
我建议你使用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);
U坐标基本上被计算为:
U = asin(x) / PI + 0.5
V坐标:
V = asin(y) / PI + 0.5
这里有一些关于如何在球体网格上实现立方体和球体映射的易于理解的教程:
- NVidia Cube Map OpenGL
- OpenGL Wiki Texturing a Sphere
- CSU课程纹理
我假设您以这种方式(或多或少)创建具有经度和纬度两个参数的行星:
for longitude from -Pi to Pi
from latitude from -Pi/2 to Pi /2
add vertex
next
next
为顶点指定纹理坐标u
和v
的最简单方法是使用经度/纬度坐标。
u = (longitude + Pi) / (2 Pi)
v = (Pi/2 - latitude) / Pi
这样你就可以使用像这样的纹理。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 将函数类成员映射到类本身内部
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 使用std::函数映射对象方法
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- C++映射分割错误(核心转储)
- 内联映射初始化的动态atexit析构函数崩溃
- 使用"std::unordereded_map"映射到"std::list"对象
- 如何从多映射中删除特定的重复项
- 在未初始化映射的情况下,将值插入到映射的映射中
- QT通过C++添加映射QML项目
- 如何使用 std::累积在 C++ 中计算总和立方体
- 在c++中访问int到类对象的映射时出错
- 如何有效地计算将单位立方体映射到自身的反射和旋转?
- 如何制作映射纹理的立方体,在内部和外部显示不同的纹理
- 2D纹理或立方体映射
- 用DevIL在DDS文件中加载一个立方体映射
- 我是否正确地指定了立方体映射的坐标