Download the Project


HTML Code
To have this work, you must have the linked scripts. Use the GitHub link above for the full project.

Note: This is inefficient code. Better code would use loops and objects.

<!DOCTYPE html>
<html>
    <head>
        <!--<script src="scripts/jquery-3.3.1.min.js"></script>-->
        <meta charset="utf-8">
        <title>Day 007: Three.js test</title>
        <base target="_blank" />
        <style>
			body { margin: 0; }
			canvas { display: block; }
		</style>
    </head>
    <body>
        <script src="scripts/three.js"></script>
        <script>
            // Define scene
            var scene = new THREE.Scene();
            
            // Define camera
            var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
            
            // Define renderer
            var renderer = new THREE.WebGLRenderer();
            renderer.setSize(window.innerWidth, window.innerHeight);
            document.body.appendChild(renderer.domElement);
            
            // Create cube
            //var geometry = new THREE.BoxGeometry();
            var geometry = new THREE.BufferGeometry();
            
            // Set verticies
            
            var verticies = new Float32Array( [
                -1.0, -1.0,  0.5,
                 1.0, -1.0,  1.0,
                 1.0,  1.0,  1.0,
                 
                 1.0,  -0.5,  0.25,
                -1.0,  1.0,  1.0,
                -1.0, -1.0,  1.0,
                
                1.0,  1.0,  -0.25,
                -1.0,  1.0,  -0.25,
                -1.0, -1.0,  -0.0
            ]);
            
            var r, g, b, color;
            color = 'rgba(' + r + ', ' + g + ', ' + b +', 1.0)';
            r = 0.01;
            g = 0.25;
            b = 0.5;
            
            geometry.setAttribute('position', new THREE.BufferAttribute(verticies, 3));
            
            // Create material
            var material = new THREE.MeshBasicMaterial();
            material.color.r = r;
            material.color.g = g;
            material.color.b = b;
            
            // Add material to cube
            var cube = new THREE.Mesh(geometry, material);
            
            // Add to scene
            scene.add(cube);
            
            // Set camera position to make the cube visible
            camera.position.z = 5;
            
            var rReverse = false;
            var gReverse = false;
            var bReverse = false;
            
            function animate() {
                material.color.r = r;
                material.color.g = g;
                material.color.b = b;
                cube.rotation.x += 0.01;
                cube.rotation.y += 0.01;
                
                
                if (rReverse) {
                    if (r > 0.0) {
                        r -= 0.005;
                    }
                    if (r <= 0.0) {
                        rReverse = false;
                    }
                } else {
                    if (r < 1.0) {
                        r += 0.005;
                    }
                    if (r >= 1.0) {
                        rReverse = true;
                    }
                }
                
                if (gReverse) {
                    if (g < 0.0) {
                        g -= 0.005;
                    }
                    if (g <= 0.0) {
                        gReverse = false;
                    }
                } else {
                    if (g > 1.0) {
                        g += 0.005;
                    }
                    if (g >= 1.0) {
                        gReverse = true;
                    }
                }
                
                if (bReverse) {
                    if (b < 0.0) {
                        b -= 0.005;
                    }
                    if (b <= 0.0) {
                        bReverse = false;
                    }
                } else {
                    if (b > 1.0) {
                        b += 0.005;
                    }
                    if (b >= 1.0) {
                        bReverse = true;
                    }
                }
                
                
                requestAnimationFrame(animate);
                renderer.render(scene, camera);
            }
            
            animate();
        </script>
        
        <div id="container"></div>
        
    </body>
</html>

Resources:
threejs.org

Leave a Reply

Your email address will not be published. Required fields are marked *