【问题标题】:what is surfacePosition varying in glslsandbox.comglslsandbox.com 中的 surfacePosition 变化是什么
【发布时间】:2016-03-03 02:31:33
【问题描述】:

vUv 和surfacePosition 有什么区别?

【问题讨论】:

  • 我刚刚发布了对您的 GLSL 沙盒问题的回答,您可以将这个问题留在这里并将 ShaderToy 问题作为一个新帖子吗?

标签: glsl shader


【解决方案1】:

在 GLSL 沙盒中,varying vec2 surfacePosition 是可滚动、可缩放表面上的位置。在其默认位置,y 坐标范围从-1.01.0x 坐标具有类似的范围,已根据窗口的纵横比进行了缩放。

这在分形渲染器中很有用,允许用户平移和缩放分形。这是一个微不足道的曼德布罗集。点击左上角的“隐藏代码”按钮,然后鼠标左键平移,鼠标右键缩放。

http://glslsandbox.com/e#30483.0

uniform float time;
uniform vec2 mouse;
uniform vec2 resolution;

varying vec2 surfacePosition;

const float max_its = 100.;

float mandelbrot(vec2 z){
    vec2 c = z;
    for(float i=0.;i<max_its;i++){
        if(dot(z,z)>4.) return i;
        z = vec2(z.x*z.x-z.y*z.y,2.*z.x*z.y)+c;
    }
    return max_its;
}


void main( void ) {
    vec2 p = surfacePosition;
    gl_FragColor = vec4(mandelbrot(p)/max_its);
}

可以滥用相同的技术来提供 3D 平移和缩放。例如,这里是 Mandelbulb。它在你的 GPU 上比较重,但隐藏代码,你也可以平移和缩放它。

http://glslsandbox.com/e#1893.0

【讨论】:

  • 谢谢,但未涵盖 vUv 变化。 vUv 与 surfacePosition 有什么区别?
  • 我不是 ShaderToy 专家,但据我所知,vUv 不是 ShaderToy 本身的一部分,而是typical way to port ShaderToy samples to systems like Three.js 的一部分。用户可能希望使用模型的纹理坐标代替屏幕坐标 (gl_FragCoord.xy) 或surfacePosition 坐标。所以vUv代表模型自己的纹理坐标,用来代替屏幕或表面坐标。
猜你喜欢
  • 2011-01-26
  • 2023-03-13
  • 1970-01-01
  • 2017-06-26
  • 1970-01-01
  • 2016-03-23
  • 2016-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多