【问题标题】:How to get direction towards camera from vertex? (in a vertex shader, glsl)如何从顶点获取朝向相机的方向? (在顶点着色器中,glsl)
【发布时间】:2021-10-22 23:17:31
【问题描述】:

我有这个代码:

vec4 localPosition = vec4( position, 1.);
vec4 worldPosition = modelMatrix * localPosition;
vec3 look = normalize( vec3(cameraPosition) - vec3(worldPosition) );
vec3 transformed = vec3( position ) + look;

但由于某种原因,它只是将顶点 1 单位移向场景中的原点 (0,0,0)。 我需要它来将顶点移向相机(您从中查看场景的位置)。

我似乎无法在任何地方找到有关如何完成此操作的明确信息。

【问题讨论】:

  • 您确定设置了cameraPosition 吗?
  • 你是对的,它没有被设置! o_o

标签: three.js glsl shader vertex-shader


【解决方案1】:

这是一个 three.js 问题。必须设置 isShaderMaterial = true,以便更新 cameraPosition。 o_o

        material.isShaderMaterial = true;       //We need to set this so that the cameraPosition uniform is updated in the shader
        material.onBeforeCompile = function ( shader ) {
            shader.vertexShader = shader.vertexShader.replace(
                '#include <begin_vertex>',
                [
                    'float myOffset = 0.0;',
                    'myOffset = (vColor.r + vColor.g + vColor.b) < 3.0 ? 0.01 : 0.0;',
                    'vec4 localPosition = vec4( position, 1.);',
                    'vec4 worldPosition = modelMatrix * localPosition;',
                    'vec3 look = myOffset * normalize( cameraPosition - vec3(worldPosition) );',
                    'vec3 transformed = vec3( position ) + look;'
                ].join( '\n' )
            );
            
            material.userData.shader = shader;

        };

【讨论】:

    【解决方案2】:

    如果你有一个视图矩阵,将顶点位置转换为视图坐标,然后你可以根据相机轴进行变换。

    【讨论】:

    • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
    猜你喜欢
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    相关资源
    最近更新 更多