我正在尝试实现Sketchy Drawings。我在这个过程的一部分,它要求使用噪声纹理来导出不确定性值,这将为边缘图提供偏移量。
这是我的圆环边缘图的图片:
这是我按照建议使用 Perlin 函数得到的噪声纹理:
我将它们分别保存为edgeTexture
纹理noiseTexture
。
现在我被困在你必须通过从噪声纹理导出的不确定值来偏移边缘贴图的纹理坐标的部分。这张图片来自书中:
offs = turbulence(s, t);
offt = turbulence(1 - s, 1 - t);
我暂时忽略了 2x2 矩阵。这是我当前的片段着色器尝试及其产生的结果:
#version 330
out vec4 vFragColor;
uniform sampler2D edgeTexture;
uniform sampler2D noiseTexture;
smooth in vec2 vTexCoords;
float turbulence(float s, float t)
{
float sum = 0;
float scale = 1;
float s1 = 1;
vec2 coords = vec2(s,t);
for (int i=0; i < 10; i++)
{
vec4 noise = texture(noiseTexture, 0.25 * s1 * coords);
sum += scale * noise.x;
scale = scale / 2;
s1 = s1 * 2;
}
return sum;
}
void main( void )
{
float off_s = turbulence(vTexCoords.s, vTexCoords.t);
float off_t = turbulence(1 - vTexCoords.s, 1 - vTexCoords.t);
vFragColor = texture(edgeTexture, vTexCoords + vec2(off_s, off_t));
}
显然,我的补充是vTexCoords
很遥远的,但我不明白为什么。我尝试了其他几个湍流函数定义,但没有一个接近所需的输出,所以我认为我的整体方法在某个地方存在缺陷。非常感谢这里的任何帮助,如果我不清楚,请发表评论。环面所需的输出看起来就像我想象的一个粗略绘制的圆圈。