纹理贴图 C++ OpenGL

5

我已经阅读了相关的资料,包括Nehe和这里提供的解决方案,但是我找不到具体的答案。

我正在尝试加载一张名为stars.jpg的照片。 我想通过使用uv坐标来映射它,将其作为场景的背景。

glBegin(GL_QUADS);
glTexCoord2f(0,0);
glVertex2f(0,0);

然而,我对如何加载实际纹理感到非常困惑,所有调用都在...
glActiveTexture();
glEnable(GL_TEXTURE_2d);
glBindTexture(GL_TEXTURE);

这些都让我感到困惑,它们代表什么意思或功能,以及应该按照什么顺序来使用它们,才能将stars.jpg设置为我的背景?


也许你应该看一下http://nehe.gamedev.net,了解一些关于OpenGL的基础知识,听起来你有点迷失。 - AndersK
2个回答

4
你在OpenGL中加载纹理的首选工具是Simple OpenGL Image Loader (SOIL)库。你只需要传递文件名和一些标志,就可以得到纹理ID。
此外,你现在正在学习非常古老和过时的OpenGL版本-你可能想要搜索更新的教程或浏览规格说明,以便做好准备。

我正在使用的操作系统非常过时,而且不会得到升级。 - Jim
GPU和驱动程序很重要,而不是底层操作系统。但是关于SOIL的评论即使针对旧的GL版本仍然适用。 - Kos

3
以下是关于加载纹理的逐步教程:
http://www.nullterminator.net/gltexture.html

需要记住的是,OpenGL 是一个状态机,因此您需要告诉它:“我现在要谈论纹理”,这就是 glActiveTexture(); 的作用。
还要注意的是,您将不得不逐像素从您的 .jpg(压缩)中加载颜色到您的纹理数组中。因此,您需要找到一个可以为您的 .jpg 文件提供位图值的库,或者您需要将其预先转换为 .ppm 或 .bmp,以便更轻松地读取值。

你必须告诉它“我现在要谈论纹理”,这就是glActiveTexture()的作用。这个调用只需要一个参数(从GL_TEXTURE0到GL_TEXTUREn的常量,其中n是最后一个纹理单元的ID),并指示给定的纹理单元是“活动”的(受后续调用影响)。为了拥有一个简单的纹理对象,你只需要一个纹理单元(默认值),所以不需要调用它。 - Kos
现在,你给我的网站可以工作(这有助于我理解它),但我无法使纹理实际显示为背景... - Jim
你是否使用了@Kos答案中指定的图像加载器?https://dev59.com/S1LTa4cB1Zd3GeqPYTZc#4291404 还是仍在使用jpg格式? - TJB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接