【问题标题】:Texture Mapping C++ OpenGL纹理映射 C++ OpenGL
【发布时间】:2011-05-16 12:10:45
【问题描述】:

我已经阅读了这方面的内容,包括 Nehe 和这里​​的解决方案,但我找不到具体的答案。

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

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

但是我对如何加载实际纹理感到非常困惑,所有的调用都需要

glActiveTexture();
glEnable(GL_TEXTURE_2d);
glBindTexture(GL_TEXTURE);

他们所做的只是让我感到困惑,所有这些是什么意思/做什么,我应该以什么顺序放置这些,以便让 stars.jpg 成为我的背景?

【问题讨论】:

  • 也许你应该看看nehe.gamedev.net 来了解一些关于OpenGL 的基础知识,听起来你有点迷路了。

标签: c++ opengl texture-mapping


【解决方案1】:

在 OpenGL 中加载纹理的第一个工具是 Simple OpenGL Image Loader (SOIL) 库。你只需要传递文件名和一些标志,你就会得到你的纹理 ID。

此外,您现在正在学习非常旧且过时的 OpenGL 版本 - 您可能希望在 google 上找到更新的教程,或者随时浏览specs

【讨论】:

  • 我写的操作系统已经过时了,不会升级了。
  • GPU 和驱动程序很重要,而不是底层操作系统。但即使是旧的 GL 版本,关于 SOIL 的评论仍然有效。
【解决方案2】:

这是加载纹理的分步教程
http://www.nullterminator.net/gltexture.html

重要的是要记住 OpenGL 是一个状态机,所以你必须告诉它“我现在要谈谈纹理”这就是 glActiveTexture(); 的用武之地。

另外请记住,您必须将 .jpg(压缩)中的颜色逐个像素加载到纹理数组中,因此您需要找到一个库来为您提供 .jpg 的位图值文件,否则您需要将其预先转换为 .ppm 或 .bmp,这将使读取值更容易。

【讨论】:

  • “你必须告诉它“我现在要谈谈纹理”,这就是 glActiveTexture(); 出现的地方” - 不正确。此调用采用一个参数(从GL_TEXTURE0GL_TEXTUREn 的常数,n 是最后一个纹理单元的 id)并指示给定的纹理单元是“活动的”单元(受进一步调用的影响)。要拥有一个简单的纹理对象,您只需要一个纹理单元(默认),因此您不需要调用它。
  • 现在,您提供的网站有效(它有助于我理解它),我只是无法将纹理实际显示为背景......
  • 您是否使用了@Kos 答案中指定的图像加载器? stackoverflow.com/questions/4290870/texture-mapping-c-opengl/…还是你还在用jpg格式?
猜你喜欢
  • 2011-05-04
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 2011-08-25
  • 2012-07-28
  • 2014-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多