gpt4 book ai didi

three.js - Phong ShaderMaterial 参数/设置定义

转载 作者:行者123 更新时间:2023-12-05 01:24:46 26 4
gpt4 key购买 nike

我目前正在使用 THREE.ShaderMaterial 自定义基础 phong Material ,并使用三个 js 的大部分基础 block 和自定义片段着色器 block 重建 Material 。我遇到的问题是 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 和示例以找到如何设置它们,但似乎无法使其正常工作。

最佳答案

完全按照你描述的去做。这是一个示例:

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};

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

关于three.js - Phong ShaderMaterial 参数/设置定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13717006/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com