【问题标题】:How to draw a triangle with own texture on each corner?如何在每个角上绘制一个具有自己纹理的三角形?
【发布时间】:2011-08-08 17:27:34
【问题描述】:

基本上,我想为三角形的每个角赋予 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 来告诉它混合比例,但这是最好的方法吗?我想听听更多关于这方面的想法。

【问题讨论】:

    标签: c++ opengl multitexturing


    【解决方案1】:

    如果不使用着色器,我认为这是不可能的。在您的 OpenGL 代码中,无论如何我都看不到 OpenGL 可以知道要影响每个角落的纹理。这将需要一个顶点属性(除了颜色或纹理坐标),如果没有着色器,这是不可能的。

    但是,通过在第二个纹理上使用 alpha 混合(从顶点颜色中选取 alpha 值),也许可以使用两个纹理。但我不确定。

    【讨论】:

    • 是的,我想过在每个三角形的顶部绘制 3 个三角形:第一个是实心的,然后是其余两个具有相反角颜色且 alpha 为零的三角形。但这将需要 3 倍以上的像素来绘制,所以它会变得非常慢......这种方法的问题是我不能在它们上使用第四个纹理,或者我可以,但是我需要在 ALL 上绘制它三个三角形中的一个,这导致渲染速度总共慢了 6 倍。哈哈。
    • 我不是这个意思。使用两个纹理和一个三角形,而不是两个三角形,但我从来没有在没有着色器的情况下完成多重纹理 - 不知道它是否可能。只是一个问题:为什么不能使用着色器?您是在嵌入式平台上开发吗?
    • 我想提供非着色器版本,因为这将是游戏图形的主要部分,所以如果着色器不可用,游戏看起来仍然可以忍受。
    • 好的,我明白了。就个人而言,我选择始终使用着色器,因为它需要大量开发才能支持旧显卡或异国平台。
    • 我设法为它制作了一个着色器,但是有一些问题。我给每个顶点颜色(1,0,0),(0,1,0),(0,0,1)。然后我做:gl_FragColor = tex1*r+tex2*g+tex3*b,但问题是我现在根本不能使用 glColor 作为我的顶点。是否有其他方法可以模仿 glColor 的机制,以便混合顶点之间的值?或者也许有更好的方法来混合角落之间的值以获得每个纹理的强度?
    猜你喜欢
    • 1970-01-01
    • 2017-06-06
    • 2017-09-09
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多