首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Phong ShaderMaterial参数/设置定义

Phong ShaderMaterial参数/设置定义
EN

Stack Overflow用户
提问于 2012-12-05 13:40:53
回答 1查看 2.2K关注 0票数 3

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

在实际的程序中,它是这样的

代码语言:javascript
复制
// 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
} );

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

代码语言:javascript
复制
    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")

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

类似于this,但我只需要基本定义。我已经尝试通过api和示例来查找如何设置它们,但似乎无法使其工作。

EN

回答 1

Stack Overflow用户

发布于 2012-12-06 08:58:09

完全按照你所描述的去做就行了。下面是一个示例:

代码语言:javascript
复制
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};

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13717006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档