Leo*_*Leo 5 opengl gradient vertex-array
我想尝试制作一个像下图中右边的三角形:
问题是我想要实现的是来自C的顶点1和2的颜色渐变.
据我所知这是不可能的,因为顶点C必须有自己的颜色,它也会混合成1和2的颜色,就像图片的左三角形一样.如果我将C设置为中间点颜色,则会产生不希望的结果,因为制作三角形越高,其他顶点的颜色就越不明显.
线C1应为黑色,线C2应为白色.
有没有办法在OpenGL中实现这一目标?
有两种方法,但我不知道哪种方式对您的应用程序最有意义.在很高的水平:
将纹理映射到三角形.由于渐变非常平滑,因此不需要非常高的分辨率,您可以让线性过滤为您完成工作.
使用着色器.更多的设置工作,但也更灵活,并在任何规模/分辨率下为您提供"完美"的结果.
更新:如果您要使用着色器,那么想法如下.
将a varying vec2 coords
从顶点着色器传递到片段着色器.将点1的值设置为0,0
,对于点2 1,0
,将点C设置为0,1
.要将这些值放入顶点着色器,请使用attribute
.变化的值将在三角形内插,就像纹理坐标和颜色一样.所以coords
变量映射到你的三角形,如下所示:
y
1 +-----+
|\ |
|#\ |
|##\ |
|###\ |
|####\|
0 +-----+ x
0 1
Run Code Online (Sandbox Code Playgroud)
片段着色器coords
在散列区域内的某处接收值.为了弄清楚多少每次需要相融合,通过计算行的颜色coords
和0,1
,并发现其与相交x
线.由于的坐标系统coords
,这是一个简单的操作:简单地划分coords.x
的coords.y
.叫这个f
.(请注意,这将在C点给出除零,但这是预期的,因为您从未在那里定义颜色.如果需要,可以在着色器中明确检查.)
指示coords
与c
和表示与线.
字符,f
某处0和1之间结束:
y
1 +-----+
|\ |
|.\ |
|#c\ |
|#.#\ |
|##.#\|
0 +--f--+ x
0 1
Run Code Online (Sandbox Code Playgroud)
现在,让我们说你有uniform vec4 colour1
,并uniform vec4 colour2
以点1和2,分别定义颜色.然后将这些混合起来很简单:取一f
小部分colour2
和1-f
一部分colour1
并将它们加在一起.GLSL mix
功能就是这样做的.
归档时间: |
|
查看次数: |
1509 次 |
最近记录: |