Warum funktioniert das Umgebungslicht in diesem Beispiel nicht?


Nulik

Im folgenden Beispiel funktioniert das Umgebungslicht nicht (alles ist schwarz). Warum passiert das? Und wie behebe ich das? Wenn ich Punktlicht einsetze, funktioniert es, also muss etwas mit dem Umgebungslicht nicht stimmen, aber ich habe die Dokumente befolgt ... =: O.

<html>
    <head>
        <title>My first three.js app</title>
        <style>
            body { margin: 0; }
            canvas { width: 100%; height: 100% }
        </style>
    </head>
    <body>
        <script src="js/three.js"></script>
        <script>
            var scene = new THREE.Scene();
            var camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 1000 );

            var renderer = new THREE.WebGLRenderer();
            renderer.setSize( window.innerWidth, window.innerHeight );
            document.body.appendChild( renderer.domElement );

            var geometry = new THREE.BoxGeometry( 1, 1, 1 );

            material = new THREE.MeshStandardMaterial( {
                color: 0x0c79bf,
                    roughness: 0.71,
                    metalness: 1,
                    normalScale: new THREE.Vector2( 1, - 1 ), // why does the normal map require negation in this case?
                    side: THREE.DoubleSide
                } );


            var cube = new THREE.Mesh( geometry, material );
            scene.add( cube );

            var alight = new THREE.AmbientLight( 0x404040);
            scene.add( alight );

            camera.position.z = 5;

            var animate = function () {
                requestAnimationFrame( animate );

                cube.rotation.x += 0.01;                
                cube.rotation.y += 0.01;

                renderer.render(scene, camera);
            };

            animate();
        </script>
    </body>
</html>
WestLangley

Umgebungslicht in three.js ist ein einfaches Modell für indirektes Licht, das vom Material diffus reflektiert wird.

In Ihrem Beispiel haben Sie die Materialeigenschaft metalnessauf 1 gesetzt. Das heißt, Sie modellieren ein reines Metall. Reine Metalle reflektieren Licht nicht diffus - sie reflektieren Licht nur spiegelnd.

Bei der Verwendung MeshStandardMaterialsollten Sie immer eine Umgebungskarte ( material.envMap) angeben, damit Ihre metallischen Materialien etwas zu reflektieren haben.

three.js r.89

Verwandte Artikel


Warum funktioniert Convert.ToDateTime () in diesem Beispiel nicht?

Wafer Ich habe versucht, sowohl System.DateTime.Now.ToString () als auch Convert.ToDateTime zu verwenden, und bin auf ein seltsames Verhalten gestoßen. Ich habe das Problem auf Convert.ToDateTime eingegrenzt. Aus irgendeinem Grund ist ein mit System.DateTime.N

Warum wird SFINAE in diesem Beispiel nicht angewendet?

Fedino Ich habe erwartet, dass das folgende minimale Beispiel durch Anwendung von SFINAE kompiliert wird: #include <iostream> #include <string> #include <type_traits> struct FallBack{}; struct S { int bar() { return 42; } }; template <typename A, typena

Warum funktioniert $ data reference in diesem Beispiel nicht?

jcdietrich Ich habe die Option $ data auf true gesetzt und versuche, endDate mithilfe eines $ data-Ausdrucks auf mindestens den Wert von startDate zu beschränken. Dieses Beispiel sollte die Validierung nicht bestehen, ist dies jedoch nicht. :( var Ajv = requir

Warum funktioniert das Inkrement in diesem Fall nicht?

kirbysdreamland55 Diese bestimmte Schleife füllt ein Array, das Stück für Stück für eine Binärzahl steht. Ich versuche mit dem ternären Operator zu überprüfen, ob die vom Benutzer eingegebene Nummer entweder '0' oder '1' ist. while (i < 8) { printf("Bit %d

Warum funktioniert useRef in diesem Beispiel nicht?

Yigal Hier ist mein React Hooks Code: function Simple(){ var [st,set_st]=React.useState(0) var el=React.useRef(null) if (st<1) set_st(st+1)//to force an extra render for a grand total of 2 console.log('el.current',el.current,'st',st)

Warum wird in diesem Beispiel das Überlauf-Flag nicht gesetzt?

user3322166 mov al, -1 add al, 130 Ich versuche, eine Frage aus dem Lehrbuch für meine x86-Assembly-Klasse zu beantworten. In einem der Beispiele wird erläutert, warum Sie mit dem Over-Flag feststellen können, ob in diesem Fall der Endwert von al in e

Warum funktioniert Stripe in diesem Beispiel nicht?

Jens Van den Eede Ich versuche, eine Website zu erstellen, und suche nach Zahlungsgateways. Stripe war das erste, auf das ich gestoßen bin, und ich versuche es. Bevor ich meine Frage dazu stelle, würde ich gerne wissen, ob es gut ist oder gibt es bessere Alter

Warum ist das sep='.' funktioniert in diesem Code nicht?

k2468 Ich versuche, den vom Benutzer eingegebenen vollständigen Namen in seine Initialen zu übertragen und dann die Initialen auf dem Bildschirm auszugeben. Wir müssen Schleifen und Listen verwenden. Ich habe im Internet gesucht und kann keine spezifische Antw

Warum funktioniert das Codepen-Beispiel mit alpinejs nicht mehr?

Petro Gromovo Ich wollte eine alpinejs-Frage mit einem Codepen-Beispiel posten, aber beim Öffnen meines alten Codepen stellte ich fest, dass es nicht funktionierte. Ich habe den Verweis auf die Version 2.1 durch die Verzweigungsleitung 3.x ersetzt: <script s

Warum funktioniert das Akkordeon in diesem Fall nicht?

Sadiqur Rahman Ich habe versucht, ein Akkordeon mit HTML, CSS und JavaScript zu erstellen. HTML und CSS funktionieren gut, aber die Javascript-Implementierung funktioniert nicht. Kann mir jemand helfen? Dateien sind hier: https://drive.google.com/drive/folders