如果我要在3D对象的表面上放置纹理,例如立方体,我可以使用该立方体的顶点来描述此纹理的位置。
但是如果我想在同一平面上放置多个单独的图像呢?或者假设它只是一个图像,但我不希望它出现在顶点所在的表面边缘,而是出现在一个小的表面中间。我希望在运行时动态选择和放置实际图像,否则我可以将它们作为单个纹理离线压缩。
我有一个方法,但我想就是否有更好的方法,或者这是否完全可以接受寻求建议
我的想法是创建多个单独的2D四边形(深度为0),每个都有一个与它们相关联的纹理并放置在它们上面(它们当然可以是具有不同纹理坐标的纹理图集)。
然后,我对这些四边形进行变换,使它们看起来位于3D对象的表面上,例如立方体。当然,我必须维护一个矩阵层次结构,这样每当转换立方体时这些四边形都会被适当地转换,这样它们就会被附加到立方体上。
虽然这不一定很难,但我不熟悉纹理,并想知道这是否是这种情况的正常做法。
答案 0 :(得分:1)
答案 1 :(得分:0)
但是如果我想在同一平面上放置多个单独的图像呢?
使用多个纹理,可能每个纹理都有自己的textuer坐标集。您的OpenGL实现将为您提供许多文本单元。它们中的每一个都可以提供不同的纹理。
glActiveTexture(GL_TEXTURE_0 + i);
glBindTexture(…);
glUniform1i(texturesampler[i], i); // texturesampler[i] contains the sampler uniform location of the bound program.
或者假设它只是一个图像,但我不希望它出现在顶点所在的表面边缘,而是出现在表面的中间位置。
这就是GL_CLAMP ......纹理包装模式的用途。
glTexParameteri(GL_TEXTURE_WRAP_{S,T,R}, GL_CLAMP[_TO_{EDGE,BORDER}]);
使用那些指定顶点的纹理坐标在[0,1]间隔之外,但不重复图像只显示一次,只重复边缘像素。如果使边缘像素透明,就好像那里没有图像一样。