纹理在openGL中使用2D纹理映射3D对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了纹理在openGL中使用2D纹理映射3D对象相关的知识,希望对你有一定的参考价值。

我有一个由三角形组成的立方体,因此有8个顶点和相应的内部来创建三角形。我无法为这个立方体创建纹理坐标。我尝试使用以下值:

    float amt = 1.0f;
m_texBuffer.push_back(Texel(0.0f, 0.0f));
m_texBuffer.push_back(Texel(amt, 0.0f));
m_texBuffer.push_back(Texel(amt, amt));
m_texBuffer.push_back(Texel(0.0f, amt));

m_texBuffer.push_back(Texel(0.0f, 0.0f));
m_texBuffer.push_back(Texel(amt, 0.0f));
m_texBuffer.push_back(Texel(amt, amt));
m_texBuffer.push_back(Texel(0.0f, amt));

随着amt的变化值,我得到了奇怪的视觉效果。我明白,因为一个图像可以比实际的对象小,所以没有一对一的对应关系,所以我试着让一个小的值,但仍然没有去。

答案

对于常规纹理,每个坐标的采样范围为0到1,与采样分辨率无关。

不幸的是,你的代码绝对没有说明,它可能是任何东西。我们真的需要看到更多,特别是实际的OpenGL调用。

编辑由于评论

加载图像数据必须告诉OpenGL缓冲区中数据的布局。基本信息是

(glTexImage的参数)

  • 组件数量
  • 组件的安排
  • 每个组件的大小

(glPixelStore的参数)

  • 对齐(0表示紧密打包,否则对齐为1,2或4字节)
  • 像素和行运行长度(通常为0)

请参阅glTexImageglPixelStore的文档,并为您的图像数据进行适当的设置。

以上是关于纹理在openGL中使用2D纹理映射3D对象的主要内容,如果未能解决你的问题,请参考以下文章

使用 OpenGL 进行纹理映射后的奇怪结果

在OpenGL中计算按1d、2d、3d分组创建的纹理

OpenGL ES之实现“大头小头”和“头部晃动”的效果

如何在 Unity 中从 3D 对象中获取 2D 视图/纹理

opengl 纹理映射

opengl 把纹理映射到立方体的六个面。