【问题标题】:Phong ShaderMaterial parameters / setting DefinesPhong Shader材质参数/设置定义
【发布时间】:2012-12-06 08:58:09
【问题描述】:

我目前正在使用THREE.ShaderMaterial 自定义基础 phong 材质,并使用三个 js 的大部分基础块和自定义片段着色器块重建该材质。我遇到的问题是在three.js 的许多部分中的#define's 并试图找到设置它们的正确方法。

在实际程序中是这样的

// Clone the uniforms
var uniforms = THREE.UniformsUtils.clone(shader['uniforms']);

// Set uniform values
uniforms["map"].value = texture;
uniforms["diffuse"].value = new THREE.Color( 0xff0000 );
uniforms["envMap"].value = envMapt;
uniforms["reflectivity"].value = 0.7;

// Create material using shader
var material = new THREE.ShaderMaterial( {
  vertexShader: shader['vertexShader'],
  fragmentShader: shader['fragmentShader'],
  uniforms: uniforms,
  lights: true,
  //map: true, // These don't  seem to do anything
  //envMap: true // These don't  seem to do anything
} );

使用这样构建的自定义着色器

    fragmentShader: [

        "#define USE_MAP",
        //"#define USE_ENVMAP",
        "uniform vec3 diffuse;",
        "uniform float opacity;",

.......
        "void main() {",

            THREE.ShaderChunk[ "alphatest_fragment" ],
            THREE.ShaderChunk[ "specularmap_fragment" ],
......

            // NDJ - Using custom frag shader
            //THREE.ShaderChunk[ "lights_phong_fragment" ],
            CustomShaderChunk[ "lights_phong_fragment" ],
......

            THREE.ShaderChunk[ "fog_fragment" ],

        "}"

    ].join("\n")

通过在着色器的开头手动添加所需的#defines,我可以让它做我想做的事。但是,这似乎不是正确的设置方法,而且不是很灵活。

类似于this 的东西,但我只需要基本定义。我已尝试查看 api 和示例以了解如何设置这些,但似乎无法使其正常工作。

【问题讨论】:

    标签: three.js


    【解决方案1】:

    完全按照您的描述进行操作。这是一个示例:

    ph = new THREE.MeshPhongMaterial( { ambient: 0x000000,
                        color: 0x0020ff,
                        specular: 0x2040ff,
                        shininess: 30,
                        map: theMap,
                        side: THREE.DoubleSide } );
    ph.defines = {waldo_waldo_three: '(dx+3)', wonke: 7};
    

    如果您要谨慎,请小心覆盖任何现有的“定义”对象

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-09
      • 2018-07-07
      • 2017-01-01
      • 1970-01-01
      • 2018-01-23
      • 2023-04-01
      • 2020-09-20
      • 2017-06-27
      相关资源
      最近更新 更多