Skip to content

vunderkind/learning-threejs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Nothing especially dramatic. Just trying my hands at the Three JS library.

I plan to get started with this before checking out WebGL. I have a little bit of experience with 3d, so I understand how shaders, renders, cameras, scenes (and lighting) work enough not to get too lost.

I suspect the real complexity would be understanding axes from a purely math perspective without the visual axes that come with 3d apps.

While writing the code, I also added in-line comments mostly so I can do what I'm about to do: use the code in the readme as a sort of how-to:

//1. Creating scene var scene = new THREE.Scene();

    //2. Create Perspective camera (which takes four variables namely: field of view (FOV), aspect ratio, near and fair planes)
    var camera = new THREE.PerspectiveCamera(
        75,
        window.innerWidth/window.innerHeight,
        10,
        1000
    )
    camera.position.set(-10,10,300); //zooms in and out. the smaller, the closer

    //3. Set up your render (could be a WebGL render, a CSS2D render, or an SVG renderer). WebGL is the most advanced.
    var renderer = new THREE.WebGLRenderer({antialias: true});
    renderer.setClearColor('#ffffff'); //background color of renderer
    renderer.setSize(window.innerWidth, window.innerHeight);

    //4. Append the renderer to the window DOM element
    document.body.appendChild(renderer.domElement);

    //On the display, now what you see is a black screen. It isn't responsive, but takes the shape of the viewport at the time of refreshing. Let's fix that: 

    window.addEventListener('resize', ()=>{
        renderer.setSize(window.innerWidth, window.innerHeight);
        //Also, adjust the aspect ratio with the resize
        camera.aspect = window.innerWidth/window.innerHeight;
        camera.updateProjectionMatrix(); //dunno what this means!
    })

    // 5. Notice the blackness? Remove it by doing this:

    
    //and now we have the scene and the camera rendered!

    //Note: when working with a 3d element, there are two things to consider: the physical shape/form, and the material. A glass cup (physical shape) has a glossy material for example. You define these two things in three JS. 

    var geometry = new THREE.BoxGeometry(1,1,1);
    var material = new THREE.MeshLambertMaterial({color: 0xFFCC00});
    // var mesh = new THREE.Mesh(geometry, material) //combine geometry + material into one mesh

   

    //To move items around in space, move the mesh
    
    

    

    //Now, you see an ugly sphere. Let there be light!
    var light = new THREE.AmbientLight(0xFFFEE0, 3, 100);
    light.position.set(10,0,25);
    scene.add(light);

    

    var spotlight = new THREE.PointLight( 0xFFFEE0, 100, 60 );
    spotlight.position.set( 5, 50, 2 );
    scene.add( spotlight );

    var loader = new THREE.GLTFLoader();

    //Add/import object

    const mainOBJ = './object/scene.gltf';


    loader.load( mainOBJ, function ( gltf ) {
        scene.add( gltf.scene );
        car = gltf.scene.children[0];
        animate();

    });
    // scene.add('./scene.gltf'); //add mesh to the scene

    function animate(){
        requestAnimationFrame(animate);
        car.rotation.z+=0.015;
        // car.scale.z+=0.1;
        // car.rotation.y+=0.01;
    }

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

    }
    
    render();
    //render scene (should be usually at the bottom of everything)

About

My first attempt to learn Three JS

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages