【发布时间】:2012-08-29 18:06:32
【问题描述】:
对不起,我会重写问题希望清楚。
在我的 .cpp 代码中,我创建了一个四边形列表,其中一些有一个标志,在像素着色器中我检查是否设置了此标志,如果未设置标志,则四边形将变为红色例如,如果设置了标志,我想决定每个像素的颜色,所以如果我需要将标记的四边形的一半涂成红色,另一半涂成蓝色,我可以简单地执行以下操作:
if coordinate in quad < something color = red
else colour = blue;
通过这种方式,我可以将四边形的一半涂成蓝色,另一半涂成红色,或者我可以决定将红色放在哪里或蓝色放在哪里。
假设我有一个 50x50 像素的四边形
[碎片]
if(quad.flag == 1)
{
if(Pixel_coordinate.x<25 ) gl_fragColor = vec4(1.0, 0.0, 0.0, 1.0);
else gl_fragColor = vec4(0.0, 1.0, 0.0, 1.0);
}
else
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
在这种情况下,我希望设置了标志的四边形将在每个面上获得两种颜色。 我希望我现在更具体了。
谢谢。
只是添加一些我不能使用任何纹理的东西。
好的,我现在就这样做:
每个四边形有 4 个纹理协调 (0,0), (0,1), (1,1), (1,0);
我使用以下方法启用纹理坐标:
glTexCoordPointer(2, GL_SHORT, sizeof(Vertex), BUFFER_OFFSET(sizeof(float) * 7));
[垂直]
varying vec2 texCoord;
main()
{
texCoord = gl_MultiTexCoord0.xy;
}
[碎片]
varying vec2 texCoord;
main()
{
float x1 = texCoord.s;
float x2 = texCoord.t;
gl_FragColor = vec4(x1, x2, 0.0, 1.0);
}
我总是得到黄色,所以 x1 =1 和 x2 = 1 几乎总是,一些四边形是黄色/绿色。
我希望片段着色器中的纹理坐标发生变化,所以我应该得到一个渐变,我错了吗?
【问题讨论】:
-
要“了解”哪个位置(以及几何的“一半”)?屏幕空间位置?世界空间位置?视图空间位置?哪一个?
-
什么是局部位置,你是指四边形在世界空间中的位置还是什么? “将像素着色一半”是什么意思?这个标志的使用对实际问题有什么意义(意思是你想根据“理解位置”以某种方式动态计算这个标志)?我很难理解你真正想要实现的目标。
标签: glsl