0

表示されないテクスチャに関するいくつかのスレッドがあります。私はそれらをすべて試しましたが、何も役に立ちませんでした。

私は今これに数時間を費やしました。黒い球体を見るたびに。

Chrome v18 と Windows 7 で作業しています。Firefox も試しましたが、このブラウザは実際には Three.js をサポートしていません。

これはスクリプトの本体です。

<body>

    <script src="../build/Three.js"></script>

    <script src="js/Stats.js"></script>
    <script src="../build/jquery-1.7.2.min.js"></script>

これはスクリプト自体です:

// stap1) camera, set the scene size
    var WIDTH = 400,
        HEIGHT = 300;

    // set some camera attributes
    var VIEW_ANGLE = 45,
        ASPECT = WIDTH / HEIGHT,
        NEAR = 0.1,
        FAR = 10000;

    var camera = new THREE.PerspectiveCamera(  
                VIEW_ANGLE,
          ASPECT,
          NEAR,
          FAR  );
// stap2) scene:                
    var scene = new THREE.Scene();
    // the camera starts at 0,0,0 so pull it back
   scene.add(camera);
     camera.position.z = +300;
    // get the DOM element to attach to
    // - assume we've got jQuery to hand
    var container = $('#container');

    // stap3)create a WebGL renderer:
    var renderer = new THREE.WebGLRenderer();
    // start the renderer
    renderer.setSize(WIDTH, HEIGHT);
    // attach the render-supplied DOM element
    container.append(renderer.domElement);

    // bol maken:
    // create the sphere's material
    // b.v: THREE.MeshBasicMaterial
    var sphereMaterial = new THREE.MeshLambertMaterial(
    {
        map: THREE.ImageUtils.loadTexture("http://dev.root.nl/tree/examples/textures/ash_uvgrid01.jpg")
    });

    // set up the sphere vars
    var radius = 50, segments = 16, rings = 16;
    var sphereGeometry = new THREE.SphereGeometry(radius, segments, rings); 
    // create a new mesh with sphere geometry -
    var sphere = new THREE.Mesh(
       sphereGeometry,
       sphereMaterial
         );

    sphere.position.x=0;
    var s=1;
    sphere.scale.set(s, s, s);  

    // add the sphere to the scene
    scene.add(sphere);
    // create a point light
    var pointLight = new THREE.PointLight( 0xFFFFFF );
    // set its position
    pointLight.position.x = 10;
    pointLight.position.y = 50;
    pointLight.position.z = 130;
    // add to the scene
    scene.add(pointLight);
    // draw!
    renderer.render(scene, camera);
4

1 に答える 1

4

テクスチャとして使用される画像が完全にダウンロードされるまで待つ必要があります。

私はあなたのコードをウェブに載せました: http://jsfiddle.net/4Qg7K/そして、古典的な「レンダリングループ」を追加しました:

requestAnimationFrame(render);

function render(){
  requestAnimationFrame(render);

  sphere.rotation.y += 0.005; //rotation stuff, just for fun

  renderer.render(scene, camera);
};

requestAnimationFrame関数はタイマーのようにrender機能し、ブラウザーが Web ページを更新する準備が整うたびに関数を呼び出します。

ところで、Three.js は Firefox で問題なく動作します。

于 2012-04-18T14:57:42.747 に答える