C++ 如何在每个角上绘制具有自己纹理的三角形?

C++ 如何在每个角上绘制具有自己纹理的三角形?,c++,opengl,multitexturing,C++,Opengl,Multitexturing,基本上,我想为三角形的每个角点提供3个纹理,并从一个纹理插值到另一个纹理,就像在角点上使用glColor()插值颜色一样 编辑:由于这似乎无法通过纹理组合器实现,因此我愿意使用着色器 这是我现在拥有的片段着色器代码: vec4 c = gl_Color; gl_FragColor = texture2D(Texture0, TexCoord0)*c.r+texture2D(Texture1, TexCoord1)*c.g+texture2D(Texture2, TexCoord2)*c.b;

基本上,我想为三角形的每个角点提供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值),可能可以使用两个纹理。但我不确定。

是的,我想在每个三角形的顶部画3个三角形:首先是实心三角形,然后是两个角颜色相反且alpha为零的三角形。但这将需要3倍多的像素来绘制,所以它会变得非常慢。。。这种方法的另一个问题是,我不能在它们上使用第四种纹理,或者我可以,但是我需要在所有3个三角形上绘制第四种纹理,这会导致渲染速度降低6倍。哈哈,这不是我真正的意思。使用两个纹理和一个三角形,而不是两个三角形,但我从来没有在没有着色器的情况下进行多纹理-不知道这是否可能。只是一个问题:为什么不能使用着色器?你是在嵌入式平台上开发的吗?我想提供非着色器版本,因为这将是游戏图形的主要部分,所以如果没有着色器,游戏看起来仍然可以接受。好的,我理解。就我个人而言,我选择了始终使用着色器,因为它需要大量的开发来支持旧的图形卡或异国情调的平台。我设法为它制作了一个着色器,但存在一些问题。我给每个顶点颜色(1,0,0),(0,1,0),(0,0,1)。然后我会:
gl\u FragColor=tex1*r+tex2*g+tex3*b
,但问题是我现在根本无法将glColor用于顶点。是否有其他方法来模拟glColor的机制,以便它混合顶点之间的值?或者,有没有更好的方法在角点之间混合值以获得每个纹理的强度?