Home > Web Front-end > JS Tutorial > body text

How to create a scene in Three.js

零下一度
Release: 2017-06-25 09:21:16
Original
1867 people have browsed it

The previous chapter describes adding objects to the scene. In this article, I plan to describe each function point in detail, on the one hand, to deepen my understanding. On the other hand, I hope to be able to

help those in need.

1. When learning WEBGL, you should first understand the steps required to create a WebGL program. Just like making braised pork with pickled vegetables, what steps are needed.

  • Initialize WebGL drawing context

  • Initialize shader program

  • Establish model and data cache

  • Complete drawing and animation

This is a process-oriented programming. However, three.js is different. It is an object-oriented programming. Mainly construct three objects: scene (scene) camera (camera) renderer (renderer).

What do these three things mean? It doesn't sound like I know what it is at all. To give a small example: take movies as an example. The scene is like the entire layout space, and the camera is like the

shooting period. The renderer is equivalent to converting the filmed movie into film, which is the computer screen.

Scenes and spaces contain 3D and data models, while renderer contains shaders and WebGL drawing contexts.

2. THREE.JS creates scene, camera, renderer

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Demo1(three入门第一篇)</title></head><body></body><script type="text/javascript" src="js/three.js?1.1.11"></script><script type="text/javascript">var width = window.innerWidth, height = window.innerHeight;var scene = new THREE.Scene(); //创建一个场景var camera = new THREE.PerspectiveCamera(75,width/height,1,5000); //创建相机/*three.js创建相机的方式有很多种,其中最长用的是PerspectiveCamera();
        远景相机,相当于人眼观察模式
        肯定有人会有疑问,这几个参数是什么意思呢?
        第一个 75 是 视角
        width / height 相机拍摄面的长宽比,别问为什么这么写,我也没搞清楚。反正设置为窗口
        的width/height图形就不会被压变形。
        下面两个是近裁剪面。和远裁剪面。     */var renderer = new THREE.WebGLRenderer();  //s上一篇用的是CSS3DRenderer//WebGLrenderer其实是用CANVAS渲染。    renderer.setSize(width,height);
    document.getElementsByTagName('body')[0].appendChild(renderer.domElement);</script></html>
Copy after login

The movie, scene, and film are all ready, so how can we display the actors? That is, how to add objects to the scene as mentioned in the above article?

3. Add actors (3D cube).

 //演员进场var geometry = new THREE.BoxGeometry(1,1,1);//BoxGeometry(); 3D盒子模型。包含了立方体所有顶点和填充面的对象。var material = new THREE.MeshBasicMaterial({color:'red'});//有个几何模型,我们需要材料为其上色。我们采用的时候 网孔基础材料MeshBasicMaterial();var mesh = new THREE.Mesh(geometry,material);//需要一个网孔,来承载几何模型和材料scene.add(mesh);  //把这个网孔放置到场景中去。camera.position.z = 5; //调节相机的位置。renderer.render(scene,camera); //把画面转换成相机,并播放
Copy after login

This way the actor is in the frame.

4. How to make this actor move?

    //懂动起来。function loop(){
        requestAnimationFrame(loop);
        mesh.rotation.x += 0.1;  //X选择mesh.rotation.y += 0.1;  //Y旋转renderer.render(scene,camera); //把画面转换成相机,并播放    }
    loop();//解释下requestAnimationFrame这个api/* requestAnimationFrame这个函数,它用来替代 setInterval, 这个新接口具备多个优点,
     比如浏览器Tab切换后停止渲染以节约资源、
     和屏幕刷新同步避免无效刷新、在不支持该接口的浏览器中能安全回退为setInterval。
     简直就是动画神奇     */
Copy after login

The actor entered the scene and had an impressive effect. The first short story is almost finished.

5. The entire code (originally wanted to be hosted on GitHup). Found it too slow.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Demo1(three入门第一篇)</title>
</head>
<body>

</body>
<script type="text/javascript" src="js/three.js?1.1.11"></script>
<script type="text/javascript">var width = window.innerWidth, height = window.innerHeight;var scene = new THREE.Scene(); //创建一个场景var camera = new THREE.PerspectiveCamera(75,width/height,1,5000); //创建相机/*three.js创建相机的方式有很多种,其中最长用的是PerspectiveCamera();
        远景相机,相当于人眼观察模式
        肯定有人会有疑问,这几个参数是什么意思呢?
        第一个 75 是 视角
        width / height 相机拍摄面的长宽比,别问为什么这么写,我也没搞清楚。反正设置为窗口
        的width/height图形就不会被压缩。
        下面两个是近裁剪面。和远裁剪面。     */var renderer = new THREE.WebGLRenderer();  //s上一篇用的是CSS3DRenderer//WebGLrenderer其实是用CANVAS渲染。    renderer.setSize(width,height);
    document.getElementsByTagName('body')[0].appendChild(renderer.domElement);//演员进场var geometry = new THREE.BoxGeometry(1,1,1);//BoxGeometry(); 3D盒子模型。包含了立方体所有顶点和填充面的对象。var material = new THREE.MeshBasicMaterial({color:'red'});//有个几何模型,我们需要材料为其上色。我们采用的时候 网孔基础材料MeshBasicMaterial();var mesh = new THREE.Mesh(geometry,material);//需要一个网孔,来承载几何模型和材料scene.add(mesh);  //把这个网孔放置到场景中去。camera.position.z = 5; //调节相机的位置。//懂动起来。function loop(){
        requestAnimationFrame(loop);
        mesh.rotation.x += 0.1;  //X选择mesh.rotation.y += 0.1;  //Y旋转renderer.render(scene,camera); //把画面转换成相机,并播放    }
    loop();//解释下requestAnimationFrame这个api/* requestAnimationFrame这个函数,它用来替代 setInterval, 这个新接口具备多个优点,
     比如浏览器Tab切换后停止渲染以节约资源、
     和屏幕刷新同步避免无效刷新、在不支持该接口的浏览器中能安全回退为setInterval。
     简直就是动画神奇     */</script>
</html>
Copy after login

6. Three.js plays an important role in WebGL, but there are really few Chinese APIs. It just accumulates slowly one by one.

The above is the detailed content of How to create a scene in Three.js. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template