c++ - 如何在每个角上绘制一个带有自己纹理的三角形?

标签 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;

我正在使用 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/

相关文章:

user-interface - 如何在具有多个窗口的 Haskell 中使用 OpenGL?

java - 如何单独纹理化(使用不同的纹理文件)3D 模型?

c++ - 使用不同纹理对多个对象进行纹理化

c++ - OpenGL 多重纹理 - glActiveTexture 为 NULL

c++ - 如何有效地画点

OpenGL:关闭多个纹理单元

c++ - 在 C++ 中打开文件 - getline 在第二次迭代时失败

C++ 多维数组生成段错误?

c++ - 为什么我的 for 循环应该找到数组中所有值的乘积,却一直告诉我每个数组值?

c++ - 如何优化以下 C++ 代码片段 - 卷中的零交叉