three.js学习计划(一)

news/2024/7/8 4:59:54 标签: 图形, three-js, 编程, 实例

最近因为课题的原因要学习一下three.js,说实话,以前并没有接触过3D图形编程,直接去看three.js的时候还是有点头皮发麻的,想着3D图形编程一定是难的要死要死的,可是没想到各位大神把底层图形封装的这么好,连我这种js新手加图形学白痴也能很好的阅读编写three.js的实例代码。
既然要学习一样新的东西,最好稍微了解一下它的历史渊源,这样不仅在学习的时候更加稳健,也能让你在跟大牛交流的时候不至于一头雾水。
three.js是什么,即使在three.js的github项目页上页只有短短的几句介绍,three.js是一个JavaScript编写的3D图形库,提供了<canvas>,<svg>,CSS3D和WebGL的渲染器。
three.js是托管在github上的一个开源项目,时至今日(2015-12-15)已经有519名代码贡献者。虽然在three.js的网站上提供了很多的基于three.js开发的实例,然而three.js的文档实在是不友好,只是简单的一个入门例子然后就是API,所以要学习three.js还是要去读官方实例的源代码,并且自己逐字逐句的来敲代码,做注释。
要使用three,js,首先要在你的html页面中引入它,通常我们只是使用不做调试的话直接引用three.min.js即可,引用three.js只需要一个简单的<script> 标签。

<script src="/you/path/to/three.min.js"><script>

在网页中引入three.js后你可以在网页控制台输入THREE.REVISION来查看版本信息,这里推荐chrome浏览器。

THREE.REVISION
"73"

我使用的是73版本的three.js
现在我们可以访问到THREE下的所有方法和变量了。
下面我们先来建立一个HTML标签页

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>My first three.js app</title>
    <script type="text/javascript" src="you/path/to/three.min.js"></script>
</head>
<body id="canvas-frame">
    <script type="text/javascript">
    //  在这里写js代码
    </script>
</body>
</html>

一个典型的three.js应用至少要包含渲染器(renderer)、场景(scene)、和相机(camera)三个组件。接下来就让我们来初始化这些组件。

<script type="text/javascript">
    var scene, renderer, camera;
    init();

    function init(){
        // 初始化一个场景
        scene = new THREE.Scene();

        // 初始化一个渲染器,这里选择了WebGL渲染器,并且开启可抗锯齿效果
        renderer = new THREE.WebGLRenderer({antialias: true});
        // 设置渲染器的款和高,这里由于要canvas占据整个屏幕,所以使用了窗口尺寸
        renderer.setSize(window.innerWidth, window.innerHeight);
        // 下面一行代码将生成一个canvas标签插入到body中
        document.body.appendChild(renderer.domElement);

        /× 
        初始化一个相机,选取的是透视相机
        相机的四个参数分别是:
        视角or视场: 类似于人眼可以看到90-110度的视场,相机也有一个类似的参数设置,关于这个数值的设定也是有很多的博客文章可以去查看
        宽高比:定义了你看到的屏幕的比例
        近端和远端:定义了相机可以看到物体的距离,超过这个距离渲染器就不会对物体进行渲染了
        ×/
        camera = new THREE.PresectiveCamera(75, window.innerWidth / window.innerHeight, 1, 10000);
        // 设置相机位置为z轴偏移量为5
        camera.position.set(0,0,5);
        // 不要忘记把相机添加到场景中去
        scene.add(camera);
        // 代码占位...
    };    
</script>

现在场景有了,相机有了,渲染器也有了,现在要做的就是在场景中添加自己的景色,说白了,就是在场景中放个物体,然后我们就开始盯着它看呀看呀看
那么,是时候将物品放进去了。
我们创建物体的代码依旧是在我们的init函数中进行的,创建一个物体分为三个步骤,首先创建一个几何体,然后选择构建表面的材质,最后将几何体参数和材质参数传递给三维网格系统,three.js会自动帮你生成你想要的形状。一下是代码实例

<script>
    function init(){
    // 接上段代码
    var geometry, material, mseh;
    // 创建一个盒子几何体
    geometry = new THREE.BoxGeometry(1,1,1);
    // 基本材质渲染,设置颜色,启用线框
    material = new THREE.MeshBasicMarterial({color: 0xff0000, wireframe: true});
    // 生成物体
    mesh = new THREE.Mesh(geometry, material);
    // 记得把物体添加到场景中
    scene.add(mesh);
    };
// 代码占位
</script>

现在所有的准备工作都已经经行完毕,接下来要做的就是用渲染器把刚刚做好的东西交给浏览器去渲染。接下来定义一个新的函数

function animate(){
  requestAnimationFrame(animate);
  // 代码占位
  renderer.render(scene, camera);
};

写完这个函数之后,在body标签中加入onload时间,即可在网页中看到结果。

<body id="canvas-frame" onload="animate()">
    <script>
    //我们的代码
     </script>
</body>

现在我们在浏览器中可以看到如下样子

这是一个静止的线条化的立方体,接下来要做的就是让它动起来!!
让一个物体动起来可以采用两种方式,一种是让物体自己运动,还有一种就是我们的眼睛运动,在这里也就是相机运动,或者可以相机跟物体都动-_-

//修改一下animate函数,让立方体动起来
function animate(){
    requestAnimationFrame(animate);
    // 物体旋转
    mesh.rotation.x += 0.1;
    mesh.rotation.y += 0.1;
    // 相机移动
    camera.position.y += 0.01;

    renderer.render(scene, camera);
};

最后在浏览器中我们可以看到立方体一边旋转一边下落的动画效果。


http://www.niftyadmin.cn/n/1830428.html

相关文章

Three.js学习计划(二)

学习three.js很重要的一个环节就是学习怎么在屏幕上建立各种各样的形状&#xff0c;今天就对three.js提供的各种基本形状进行一次小小的总结。 &#xff08;PS&#xff1a;基于three.js v73&#xff09;请实时关注官方文档 1. 立方体&#xff1a;BoxGeometry 构造函数: BoxG…

C++学习笔记 hash_map 散列映射

对于大型容器而言hash_map要比map快5至10倍的元素查找速度。 map对其元素类型要求有一个<,hash_map要求一个和一个散列函数。 map<string,int> m1; //用<比较串 map<string,int Nocase> m2; //用Nocase()比较串 hash_map<string,int> hm1…

SQL TRY CATCH

begin try select 1/0end trybegin catch select error_number() as number, error_line() as line, error_message() as message, error_severity() as severity, error_state() as stateend catch转载于:https://www.cnblogs.com/woshare/p/4307302.html

ubuntu14.04LTS 搭建 python2.7+Qt 5.5+PyQt5开发环境

python有许许多多的GUI开发包&#xff0c;PyQt正式其中之一。那么什么是PyQt呢&#xff0c;PyQt是基于Qt框架开发的一个用于创建GUI程序的工具包。它将python语言和Qt库成功融合在了一起。PyQt有数量庞大的类、函数和方法。它是一个跨平台的工具包&#xff0c;目前PyQt官网提供…

HDU 5013 City Tour

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid5013 题意&#xff1a; 思路&#xff1a; 这里有错&#xff0c;是Hi(x)sigama(Hji)(j属于x) const int N18;int m,n; double p[N],H[N][N];double f[N][1<<N]; double dp[N][1<<N];double a[1<&…

脚本中输出文本颜色设置

为什么80%的码农都做不了架构师&#xff1f;>>> echo显示带颜色&#xff0c;需要使用参数-e 格式如下: echo -e "\033[字背景颜色;文字颜色m字符串\033[0m ; echo -e "\e[字背景颜色;文字颜色m字符串\e[0m ; 例如: echo -e "\033[41;37m TonyZha…

PyQt5和Qt5.5开发(一)

配置完开发环境之后&#xff0c;下面就要开始学习PyQt的开发了。在网上比较多的是PyQt4的文章&#xff0c;PyQt5的资源则是很少&#xff0c;所以只能照着PyQt4的教程来学习&#xff0c;然后对照PyQt5的文档来看5和4有那些不同之处。 本系列博客的文章大部分翻译自国外的PyQt4系…

IOS TabBar 的问题

今天用ios8运行原来的程序&#xff0c;发现第一次进入页面时第一个选项的图片的颜色为白色&#xff0c;&#xff08;选中的图片是橘***的&#xff09;&#xff0c;这个是IOS8和之前的区别&#xff01;而bartintConlor默认是毛玻璃的。转载于:https://blog.51cto.com/4223840/15…