0

Chapter 2 - WebGL Up and Running book の例を実行しています。

静的なテクスチャ マッピングされた立方体を表示したいと考えています。

このコードは機能しません:

var camera = null,
renderer = null,
scene = null,
cube = null,
animating = false;

function onLoad() {
// Grab our container div
var container = document.getElementById("container");
// Create the Three.js renderer, add it to our div
renderer = new THREE.WebGLRenderer({
    antialias: true
});
renderer.setSize(container.offsetWidth, container.offsetHeight);
container.appendChild(renderer.domElement);
// Create a new Three.js scene
scene = new THREE.Scene();
// Put in a camera
camera = new THREE.PerspectiveCamera(45,
    container.offsetWidth / container.offsetHeight, 1, 4000);
camera.position.set(0, 0, 3);
// Create a directional light to show off the object
var light = new THREE.DirectionalLight(0xffffff, 1.5);
light.position.set(0, 0, 1);
scene.add(light);
// Create a shaded, texture-mapped cube and add it to the scene
// First, create the texture map
var mapUrl = "cuttherope.jpg";
var map = THREE.ImageUtils.loadTexture(mapUrl);
// Now, create a Phong material to show shading; pass in the map
var material = new THREE.MeshPhongMaterial({
    map: map
});
// Create the cube geometry
var geometry = new THREE.CubeGeometry(1, 1, 1);
// And put the geometry and material together into a mesh
cube = new THREE.Mesh(geometry, material);
// Turn it toward the scene, or we won't see the cube shape!
cube.rotation.x = Math.PI / 5;
cube.rotation.y = Math.PI / 5;
// Add the cube to our scene
scene.add(cube);
renderer.render(scene, camera);

}

しかし、run関数を追加して requestAnimationFrame を呼び出すと、キューブが表示されます

...
cube.rotation.x = Math.PI / 5;
cube.rotation.y = Math.PI / 5;
// Add the cube to our scene
scene.add(cube);
run();
}

function run() {
renderer.render(scene, camera);
requestAnimationFrame(run);

}

誰かが私に理由を説明してもらえますか? ありがとう!

4

1 に答える 1

3

テクスチャ (マップ) は非同期でロードされるため、最初の例では、 を呼び出したrender()時点では、テクスチャはまだ利用できません。画像がロードされたときに再レンダリングするテクスチャ ロード コールバックが必要です。または、requestAnimationFrame で行ったように、継続的なレンダリング ループが必要です。

于 2013-09-30T06:28:05.690 に答える