如何在 ThreeJS 中更改着色器颜色
How to change Shader color in ThreeJS
我是 Three Js 的新手,我不知道如何在 html 页面上按下按钮时更改 material 的颜色。
你有什么建议吗?我会在这里附上代码
这是我声明我的 material 的方式:
var color2= new THREE.Color(0xff0000)
var customMaterial = new THREE.ShaderMaterial(
{
uniforms: {
p: { type: "f", value: 2 },
glowColor: { type: "c", value: color2 },
},
vertexShader: $('#vertexShader').text,
fragmentShader: $('#fragmentShader').text,
side: THREE.DoubleSide,
blending: THREE.AdditiveBlending,
transparent: true,
depthWrite: false
});
这是我更新颜色的方法:
function render() {
renderer.render(scene, camera);
document.getElementById("colore").onclick= function(){
console.log("prova caramella");
var customMaterial = new THREE.ShaderMaterial(
{
uniforms: {
p: { type: "f", value: 2 },
glowColor: { type: "c", value: new THREE.Color(0x00ff00) },
},
vertexShader: $('#vertexShader').text,
fragmentShader: $('#fragmentShader').text,
side: THREE.DoubleSide,
blending: THREE.AdditiveBlending,
transparent: true,
depthWrite: false
});
customMaterial.needsUpdate = true
}
最后这就是我 link 我的 3d 模型 material 的方式:
function petali2(){
var loaderpetali = new THREE.ColladaLoader();
loaderpetali.load('petali3.dae', function (collada) {
petali = collada.scene;
petali.traverse( function ( child ) {
if (child instanceof THREE.Mesh) {
console.log(child);
child.material = customMaterial;
}
} );
petali.scale.x = 2;
petali.scale.y = 2;
petali.scale.z = 2;
//flower = dae;
scene.add(petali);
});
}
更新颜色时,这样做就足够了:
customMaterial.uniforms.glowColor.value.set( 0x00ff00 );
无需创建新的 material。
此外,当使用最新版本的 three.js
时,没有必要定义制服的类型。该类型自动派生自已编译的着色器。在应用程序级别,它就足够了。
uniforms: {
p: { value: 2 },
glowColor: { value: new THREE.Color(0x00ff00) },
},
我是 Three Js 的新手,我不知道如何在 html 页面上按下按钮时更改 material 的颜色。 你有什么建议吗?我会在这里附上代码
这是我声明我的 material 的方式:
var color2= new THREE.Color(0xff0000)
var customMaterial = new THREE.ShaderMaterial(
{
uniforms: {
p: { type: "f", value: 2 },
glowColor: { type: "c", value: color2 },
},
vertexShader: $('#vertexShader').text,
fragmentShader: $('#fragmentShader').text,
side: THREE.DoubleSide,
blending: THREE.AdditiveBlending,
transparent: true,
depthWrite: false
});
这是我更新颜色的方法:
function render() {
renderer.render(scene, camera);
document.getElementById("colore").onclick= function(){
console.log("prova caramella");
var customMaterial = new THREE.ShaderMaterial(
{
uniforms: {
p: { type: "f", value: 2 },
glowColor: { type: "c", value: new THREE.Color(0x00ff00) },
},
vertexShader: $('#vertexShader').text,
fragmentShader: $('#fragmentShader').text,
side: THREE.DoubleSide,
blending: THREE.AdditiveBlending,
transparent: true,
depthWrite: false
});
customMaterial.needsUpdate = true
}
最后这就是我 link 我的 3d 模型 material 的方式:
function petali2(){
var loaderpetali = new THREE.ColladaLoader();
loaderpetali.load('petali3.dae', function (collada) {
petali = collada.scene;
petali.traverse( function ( child ) {
if (child instanceof THREE.Mesh) {
console.log(child);
child.material = customMaterial;
}
} );
petali.scale.x = 2;
petali.scale.y = 2;
petali.scale.z = 2;
//flower = dae;
scene.add(petali);
});
}
更新颜色时,这样做就足够了:
customMaterial.uniforms.glowColor.value.set( 0x00ff00 );
无需创建新的 material。
此外,当使用最新版本的 three.js
时,没有必要定义制服的类型。该类型自动派生自已编译的着色器。在应用程序级别,它就足够了。
uniforms: {
p: { value: 2 },
glowColor: { value: new THREE.Color(0x00ff00) },
},