【发布时间】:2021-12-20 05:41:36
【问题描述】:
我希望使用片段着色器绘制一个简单的鼠标轨迹,在外观上类似于在处理中绘制以下内容(省略清除画布的步骤)。我无法理解实现这一目标所需的设置。
// processing reference using cursor as paintbrush
void setup () {
size(400, 400);
background(255);
fill(0);
}
void draw () {
ellipse(mouseX, mouseY, 20, 20);
}
这是我徒劳的方法,基于此shadertoy example:
- 我在光标位置画了一个简单的形状
void main(void) {
float pct = 0.0;
pct = distance(inData.v_texcoord.xy, vec2(mouse.x, 1.-mouse.y)) * SIZE;
pct = 1.0 - pct - BRIGHTNESS;
vec3 blob = vec3(pct);
fragColor = vec4( blob, 1.0 );
}
- 然后我的困惑开始了。我的想法是,我需要将上面的输出与包含我之前传递的纹理混合。这至少会创建一个实心轨迹,尽管仅在距鼠标位置设定的距离内复制前一个通道。
#shader pass 1
void main(void) {
float pct = 0.0;
pct = distance(inData.v_texcoord.xy, vec2(mouse.x, 1.-mouse.y)) * SIZE;
pct = 1.0 - pct - BRIGHTNESS;
vec3 blob = vec3(pct);
vec3 stack = texture(prevPass, inData.v_texcoord.xy).xyz;
fragColor = vec4( blob*.1 + (stack*2.), 1.0 );
}
#shader pass 2
void main(void) {
fragColor = texture(prevPass,inData.v_texcoord);
}
坦率地说,我对如何在没有数据的情况下进行绘制以及如何在概念层面上在 webgl 中“堆叠”先前的绘制调用有点不知所措,而且我很难找到初学者文档。
如果有人能指出我的代码和思维出现错误的地方,或者指出一些资源,我将不胜感激。
【问题讨论】: