2017-07-10 20 views
2

私はただbabylon.jsに入っていますが、材料の色をどのように変更するかはわかりません。babylon.jsの材料の色を変更する

私のコードは、現在、次のとおりです。

/* eslint-disable */ 
import * as BABYLON from 'babylonjs'; 


// Get the canvas element from our HTML above 
const canvas = document.getElementById("root"); 

// Load the BABYLON 3D engine 
const engine = new BABYLON.Engine(canvas, true); 
let fn; 
let mainColor = new BABYLON.Color3(1.0, 0.2, 0.7); 

setTimeout(() => { 
    mainColor = new BABYLON.Color3(0.3, 0.2, 0.2); 
    fn(); 
}, 2000); 

// This begins the creation of a function that we will 'call' just after it's built 
function createScene() { 

    // Now create a basic Babylon Scene object 
    const scene = new BABYLON.Scene(engine); 

    // Change the scene background color to green. 
    scene.clearColor = new BABYLON.Color4(0.5, 0.8, 0.6, 0.8); 

    // This creates and positions a free camera 
    const camera = new BABYLON.ArcRotateCamera("ArcRotateCamera", 1, 0.8, 30, new BABYLON.Vector3(0, 0, 0), scene); 

    // This targets the camera to scene origin 
    camera.setTarget(BABYLON.Vector3.Zero()); 

    // This attaches the camera to the canvas 
    camera.attachControl(canvas, false); 

    // This creates a light, aiming 0,1,0 - to the sky. 
    const light = new BABYLON.HemisphericLight("light1", new BABYLON.Vector3(1, 1, 1), scene); 

    // Dim the light a small amount 
    light.intensity = .5; 

    // Let's try our built-in 'sphere' shape. Params: name, subdivisions, size, scene 
    const sphere = BABYLON.Mesh.CreateSphere("sphere1", 16, 2, scene); 

    const materialSphere1 = new BABYLON.StandardMaterial("texture1", scene); 
    materialSphere1.alpha = 1; 
    materialSphere1.diffuseColor = mainColor; 

    sphere.material = materialSphere1; 
    sphere.position.y = 1; 
    // Move the sphere upward 1/2 its height 

    // Let's try our built-in 'ground' shape. Params: name, width, depth, subdivisions, scene 
    const ground = BABYLON.Mesh.CreateGround("ground1", 6, 6, 2, scene); 
    fn =() => { 
     materialSphere1.diffuseColor = mainColor; 
    } 
    // Leave this function 
    return scene; 

    }; // End of createScene function 
    const scene = createScene(); 
    engine.runRenderLoop(function() { 
    scene.render(); 
    }); 
    window.addEventListener("resize", function() { 
    engine.resize(); 
    }); 

それは私にはaweful見えます。あなたは私がcreateSceneの中にfnを定義しているのを見ることができますが、私はそれを変更することができますが、もっと良い方法があるはずです。私はcreateScene()の外の関数を作成しようとしましたが、それは色をフェッチし、materialSphere1.diffuseColorのためにそれを使用しますが、それはうまくいきませんでした。だから私の質問です:babylon.jsの材料の色を変更する他の(より良い)方法はありますか

答えて

1

材料をコールバックの外に宣言してみませんか? scene.materialsを使用して資料を参照することもできます

関連する問題