Threejs 官网 - 入门指南(Getting Started)

Threejs 官网 - 入门指南(Getting Started)

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。

入门指南(Getting Started )

chinedufn edited this page on 4 Mar 2013 · 9 revisions

Three.js 场景非常容易设置,只需要几行代码就能完成初始化工作。场景使用几种不同类型的对象来构造:像机(camera)、灯光(light)和蒙皮(mesh)。

Three.js scenes are very easy to setup and only require a few lines of code to initialize. Scenes are constructed using a few different types of objects: cameras, lights, and meshes.

渲染 three.js 场景的第一步就是创建 WebGL 渲染对象。下面的代码创建一个 800x640 像素的 HTML 画布(cavas)对象,把它加入到文档主体中,并初始化 three.js 的场景。

The first step in rendering a three.js scene is creating the WebGL renderer object. The following code creates an HTML canvas object 800x640 pixels, adds it to the document's body, and initializes a three.js scene.

var renderer = new THREE.WebGLRenderer();
renderer.setSize( 800, 640 );
document.body.appendChild( renderer.domElement );

var scene = new THREE.Scene();

第二步定义像机,渲染对象在渲染中将会用到。

The second step is to define a camera which the renderer object will use in rendering.

var camera = new THREE.PerspectiveCamera(
    35,         // Field of view
    800 / 640,  // Aspect ratio
    .1,         // Near
    10000       // Far
);
camera.position.set( -15, 10, 15 );
camera.lookAt( scene.position );

第一个参数决定了视图 field 有多宽。
第二个参数是高宽比,通过视图区域的宽除以高来计算。
第三个和第四个参数指定像机视角中对象(可视区域)的界限点。
如果对象离像机的距离未落在 NEAR 和 FAR 之间的范围内,那么这样的对象就不会被渲染。(译者注:这也是一种减少不必要渲染对 GPU 资源消耗,提高效率的内部机制吧!)。
最后一行代码,设置像机 XYZ 坐标分别为 -15, 10 和 15 。

The first parameter passed determines how wide the field of view is. The second parameter is the aspect ratio which is calculated by dividing the viewing area's width by its height. The third and fourth parameters specify cut-off points for objects in the camera's view. If an object's distance from the camera does not fall in the range between NEAR and FAR then that object is not rendered. The last line sets the camera's XYZ coordinates to -15, 10, and 15 respectively.

三步创建一个 5 个单位宽、高、深的立方体,添加 Lambert 材质,并把它加入到场景中。

Step three creates a cube that is 5 units wide, tall and deep, adds the Lambert material, and adds it to the scene.

// 译者注:扎灯笼骨架
var geometry = new THREE.CubeGeometry( 5, 5, 5 );
// 译者注:绘画糊灯笼的纸,当然过年时,图案画得更喜庆为好
var material = new THREE.MeshLambertMaterial( { color: 0xFF0000 } );
// 译者注:把画好图案的彩纸按灯笼的大小比量好,裁剪下来并糊到灯笼骨架上
var mesh = new THREE.Mesh( geometry, material );
// 译者注:灯笼糊好了,可以挂到大门口让别人看了,我们中国人就是爱展示我们最美好的一面
scene.add( mesh );

设置场景的最后一步,创建一个黄色的光源,并添加到场景中。

For the last step in setting up a scene we create a yellow light source and add it to the scene.

// 译者注:可别忘了这一步,得给灯笼准备根蜡烛
var light = new THREE.PointLight( 0xFFFF00 );
// 译者注:把蜡烛放到灯笼里,比量好位置,别把灯笼自个点着了,那可就白糊了,还容易失火哟
light.position.set( 10, 0, 10 );
// 译者注:按比量好的位置把蜡烛固定在灯笼里,当然了,扎灯笼骨架时,可能你已经考虑到预留插蜡烛的地方了
scene.add( light );

最后渲染场景,该场景只显示通过像机视角能看到的场景部分。

Finally we render the scene which displays our scene through the camera's eye.

// 译者注:火柴呢?打火机呢?赶快点亮吧
renderer.render( scene, camera );

使用最小 HTML 模板的运行示例中的每一样东西放在一下,就像下面的代码这样了:

Everything together in a working example with a minimal HTML template:

<!DOCTYPE html>
<html>
<head>
    <title>Getting Started with Three.js</title>
    <script src="three.min.js"></script>
    <script>
    window.onload = function() {

        var renderer = new THREE.WebGLRenderer();
        renderer.setSize( 800, 600 );
        document.body.appendChild( renderer.domElement );

        var scene = new THREE.Scene();

        var camera = new THREE.PerspectiveCamera(
            35,             // Field of view
            800 / 600,      // Aspect ratio
            0.1,            // Near plane
            10000           // Far plane
        );
        camera.position.set( -15, 10, 10 );
        camera.lookAt( scene.position );

        var geometry = new THREE.CubeGeometry( 5, 5, 5 );
        var material = new THREE.MeshLambertMaterial( { color: 0xFF0000 } );
        var mesh = new THREE.Mesh( geometry, material );
        scene.add( mesh );

        var light = new THREE.PointLight( 0xFFFF00 );
        light.position.set( 10, 0, 10 );
        scene.add( light );

        renderer.render( scene, camera );

    };
    </script>
</head>
<body></body>
</html>

15 行 Javascript 代码初始化并渲染了一个场景。

15 lines of Javascript to initialize and render a scene.

时间: 2024-11-02 23:40:42

Threejs 官网 - 入门指南(Getting Started)的相关文章

Threejs 官网 - 不可见对象(Invisible objects)

Threejs 官网 - 不可见对象(Invisible objects) 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 不可见对象 Invisible objects  gero3 edit

Threejs 官网 - 如何运行本地的东西(How to run things locally)

Threejs 官网 - 如何运行本地的东西(How to run things locally) 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 如何运行本地的东西(How to run th

Threejs 官网 - Three.js 的图形用户界面工具(GUI Tools with Three.js)

Threejs 官网 - Three.js 的图形用户界面工具(GUI Tools with Three.js) 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. Three.js 的图形用户界面

Threejs 官网 - 检测使用 three.js 时的 WebGL 和浏览器兼容性(Detecting WebGL and browser compatibility with three.js)

检测使用 three.js 时的 WebGL 和浏览器兼容性(Detecting WebGL and browser compatibility with three.js) 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章

《KAFKA官方文档》入门指南(一)

1.入门指南 1.1简介 Apache的Kafka是一个分布式流平台(a distributed streaming platform).这到底意味着什么? 我们认为,一个流处理平台应该具有三个关键能力: 它可以让你发布和订阅记录流.在这方面,它类似于一个消息队列或企业消息系统. 它可以让你持久化收到的记录流,从而具有容错能力. 它可以让你处理收到的记录流. Kafka擅长哪些方面? 它被用于两大类应用: 建立实时流数据管道从而能够可靠地在系统或应用程序之间的共享数据 构建实时流应用程序,能够变

《Spring 5 官方文档》1. Spring入门指南(一)

译者注:为了方便理解,本译文里面部分名词翻译如下,如有异议,请在评论区指出. Dependency Injection - 依赖注入 Inversion of Control – 控制反转 Instrumentation – 植入 AOP - 面向切面​​的编程 Milestones – 里程碑 Snapshots – 快照 Artifact - 工件(这个词在文中大部分地方都没有翻译,用过Maven或Gradle的都明白,如果有更好的中文翻译,请写在评论区) 1.Spring入门指南 本参考指

Node &amp; Express 入门指南

本文讲的是Node & Express 入门指南, Node 是一个 JavaScript 环境,使用了与谷歌 Chrome 浏览器相同的 JavaScript 引擎.Node 具有非常强大的功能,无论对 web 服务器还是 web 服务器的平台 API 来说,它都是搭建服务端应用中间层的诱人之选. 非阻塞事件驱动的 I/O 模型给予 Node 非常强大的性能,轻而易举地就能打败阻塞 I/O 和分线程处理多用户并发的线程服务器环境,比如 PHP 和 Ruby on Rails. 我曾经将千万级用

Tmux 入门指南

介绍 tmux是linux中一种管理窗口的程序, 不同于iTerm2, 它提供了一个Session随时存储和恢复的功能(Session概念后面会介绍), detach Session(保持Session后台运行)然后重新attach Session 常用场景, 在公司Terimal中开了多个标签和文件, 下班回家忽然有了灵感想要继续编写, 使用ssh远程链接公司电脑, 然后发现标签页和文件都要重新打开, 如果使用Tmux, 下班了detach当前Session, 回家ssh远程连接后, atta

WebX入门指南

[说明] 本文围绕WebX的Web框架展开,试图将整个开发中使用的软件栈或者说生态系统串联起来.本文中不讲解原理性的东西,只是讲解各种场景下如何使用WebX相关的技术.入门指南中涉及到的实践指南和原理指南,不会展开,在后续博文中,详细阐述. WebX简介 详细的简介说明见WebX官网.首先看一下WebX的官方介绍: Webx是一个框架,它可用来做下面的事情: 创建一个全功能的Web应用     Webx提供了创建一个Web应用所需要的所有必要功能. 创建一个新的Web框架     Webx允许你