将 shadertoy 纹理转换为表现不同的 webgl

Posted

技术标签:

【中文标题】将 shadertoy 纹理转换为表现不同的 webgl【英文标题】:Translate shadertoy texture to webgl not behaving the same 【发布时间】:2021-12-31 01:52:17 【问题描述】:

我能够翻译代码并运行它,但它的行为与原始分叉不同。

https://www.shadertoy.com/view/llS3zc --orignal

https://editor.p5js.org/jorgeavav/sketches/i9cd4lE7H - 翻译

代码如下:

uniform vec2 resolution;
uniform float time;
uniform float mouse;
uniform sampler2D texture;
uniform sampler2D texture2;



void main() 

    vec2 uv = gl_FragCoord.xy / resolution.xy;
    vec4 texCol = vec4(texture2D(texture, uv+time/10.0));
    mat3 tfm;
    tfm[0] = vec3(texCol.z,0.0,0);
    tfm[1] = vec3(0.0,texCol.y,0);
    tfm[2] = vec3(0,0,1.0);    
    vec2 muv = (vec3(uv,1.0)*tfm).xy - 0.1*time;
    texCol = vec4(texture2D(texture2, muv));
    gl_FragColor = texCol;

【问题讨论】:

把你遇到的错误放在你的问题中可能是个好主意。我猜它的“texture3d”和“gl.texture”是问题所在。它们可能都应该是“texture2d” 您好,谢谢,正在运行,但行为不一样。我会更新我的问题并放置链接。 我编辑了,你有空可以看看吗? 【参考方案1】:

你有两个问题:

    您的纹理比着色器玩具大很多,要么使用更小的纹理,要么按比例缩小 uv 坐标(uv*=0.1 产生类似的比例)。 您的纹理没有环绕,并且它们的尺寸不是 2 的幂(这是启用环绕 [在 WebGL1 中] 所必需的),您需要调整纹理大小并使用 textureWrap(REPEAT) 应用环绕或在着色器中环绕,例如例如,使用fract 将查找坐标包装在您的texture2D 调用中。

【讨论】:

嘿!谢谢去吧。就在第二部分,我更喜欢在 webgl 端做,但不知道如何包装查找,你能给我一个提示吗?谢谢。 我如何获得二的幂的纹理? 谢谢!到达那里我认为我能够做你所回应的事情,但仍然工作不同我更新了 p5.js 链接

以上是关于将 shadertoy 纹理转换为表现不同的 webgl的主要内容,如果未能解决你的问题,请参考以下文章

如何使用纹理将 fbx 转换为 usdz

Awesomium 与 OpenGL 纹理转换

如何将 OpenGL 纹理转换为 CUDA 纹理?

将 kivy 纹理转换为 opencv 图像

Android 上的 OpenGL - 将位图转换为纹理,并保存纹理

将 JOGL 纹理转换为 BufferedImage