基本上,我想为三角形的每个角提供 3 个纹理,并从一个纹理插值到另一个纹理,就像在角上用 glColor() 插值颜色一样。
编辑:因为这似乎无法通过纹理组合器实现,所以我愿意使用着色器来实现。
这是我现在拥有的片段着色器代码:
vec4 c = gl_Color;
gl_FragColor = texture2D(Texture0, TexCoord0)*c.r+texture2D(Texture1, TexCoord1)*c.g+texture2D(Texture2, TexCoord2)*c.b;
我正在使用 glColor();将颜色 (1,0,0)、(0,1,0)、(0,0,1) 推到每个三角形的角,然后我读取颜色以查看我需要相应地混合多少纹理.
现在的问题是我不能再在我的顶点上使用颜色,所以我问,告诉我的片段着色器如何混合纹理+能够在三角形的每个角上使用 glColor() 的最佳方法是什么应用一些颜色?
Edit2: 我设法通过发送一个 3d texcoord 告诉混合比率让它工作,但这是最好的方法吗?我想听听更多关于此的想法。
最佳答案
如果不使用着色器,我认为这是不可能的。在您的 OpenGl 代码中,无论如何我看不到 OpenGl 可以知道哪个纹理会影响每个角落。这将需要一个顶点属性(颜色或纹理坐标除外),如果没有着色器,这是不可能的。
但是,通过在第二个纹理上使用 alpha 混合(从顶点颜色中选取 alpha 值),也许可以使用两个纹理。但我不确定。
关于c++ - 如何在每个角上绘制一个带有自己纹理的三角形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6986042/