2 Stimmen

Three.js Mehrere Texturen und Bilder in einer Szene

Ich verwende THREE.js, um eine sich drehende 3D-Erde im Browser anzuzeigen. Ich möchte auch ein Bild um die sich drehende Erde erscheinen lassen. Ich habe versucht, die integrierte Methode zu verwenden,

var img = new THREE.ImageLoader();
img.load("texture/circle.png");

Aber das Bild erscheint nicht. Es ist nur die sich drehende Kugel.

Ich möchte etwas wie dies

Bildbeschreibung hier eingeben

Hier ist mein Skript-Tag,

    var container, stats;
    var camera, scene, renderer;
    var group;
    var mouseX = 0, mouseY = 0;

    var windowHalfX = window.innerWidth / 2;
    var windowHalfY = window.innerHeight / 2;

    init();
    animate();

    function init() {

    container = document.getElementById( 'container' );

    camera = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 1, 2000 );
    camera.position.z = 650;

    scene = new THREE.Scene();

    group = new THREE.Object3D();
    scene.add( group );

    // Erde

    var loader = new THREE.TextureLoader();
    loader.load( 'textures/land_ocean_ice_cloud_2048.jpg', function ( texture ) {

    var geometry = new THREE.SphereGeometry( 200, 20, 20 );

    var material = new THREE.MeshBasicMaterial( { map: texture, overdraw: true } );
    var mesh = new THREE.Mesh( geometry, material );
    group.add( mesh );

    } );

    // Schatten

    var canvas = document.createElement( 'canvas' );
    canvas.width = 128;
    canvas.height = 128;

    var context = canvas.getContext( '2d' );
    var gradient = context.createRadialGradient(
    canvas.width / 2,
    canvas.height / 2,
    0,
    canvas.width / 2,
    canvas.height / 2,
    canvas.width / 2
    );
    //gradient.addColorStop( 0.1, 'rgba(210,210,210,1)' );
    //gradient.addColorStop( 1, 'rgba(255,255,255,1)' );

    context.fillStyle = gradient;
    context.fillRect( 0, 0, canvas.width, canvas.height );

    var texture = new THREE.Texture( canvas );
    texture.needsUpdate = true;

    var geometry = new THREE.PlaneGeometry( 300, 300, 3, 3 );
    var material = new THREE.MeshBasicMaterial( { map: texture, overdraw: true } );

    var mesh = new THREE.Mesh( geometry, material );
    mesh.position.y = - 250;
    mesh.rotation.x = - Math.PI / 2;
    group.add( mesh );

    renderer = new THREE.CanvasRenderer();
    renderer.setSize( window.innerWidth, window.innerHeight );

    container.appendChild( renderer.domElement );

    stats = new Stats();
    stats.domElement.style.position = 'absolute';
    stats.domElement.style.top = '0px';
    container.appendChild( stats.domElement );

    document.addEventListener( 'mousemove', onDocumentMouseMove, false );

    //

    window.addEventListener( 'resize', onWindowResize, false );

    }

    function onWindowResize() {

    windowHalfX = window.innerWidth / 2;
    windowHalfY = window.innerHeight / 2;

    camera.aspect = window.innerWidth / window.innerHeight;
    camera.updateProjectionMatrix();

    renderer.setSize( window.innerWidth, window.innerHeight );

    }

    function onDocumentMouseMove( event ) {

    mouseX = ( event.clientX - windowHalfX );
    mouseY = ( event.clientY - windowHalfY );

    }

    function animate() {

    requestAnimationFrame( animate );

    render();
    stats.update();

    }

    function render() {

    //camera.position.x += ( mouseX - camera.position.x ) * 0.05;
    //camera.position.y += ( - mouseY - camera.position.y ) * 0.05;
    camera.lookAt( scene.position );

    group.rotation.y -= 0.003;

    renderer.render( scene, camera );

    }

0voto

WestLangley Punkte 100979

Das Flugzeug ist horizontal. Entfernen Sie diese Zeile:

mesh.rotation.x = - Math.PI / 2;

Stellen Sie sicher, dass der Farbverlauf so eingestellt ist, wie Sie es möchten, z.B.,

gradient.addColorStop( 0.9, 'rgba( 210, 210, 210, 1 )' );
gradient.addColorStop( 1, 'rgba( 0, 0, 0, 0 )' );

Außerdem wird CanvasRenderer mit intersecting Objects Artefakte haben.

three.js r.62

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X