01-THREE.JS第一个场景

THREE.JS第一个场景

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="https://cdn.bootcss.com/three.js/r67/three.js"></script>
        <script src="https://cdn.bootcss.com/stats.js/r10/Stats.min.js"></script>
        <style>
            body{
                margin:0;
                overflow:hidden;
            }
        </style>
    </head>
    <body>
        <!--
            作者:
            时间:2018-10-29
            描述:状态
        -->
        <div id="Stats-output"></div>
        <!--
            作者:
            时间:2018-10-29
            描述:显示动画效果
        -->
        <div id="WebGL-output"></div>
        <script>
            function init(){

                 var stats = initStats();

                //创建一个场景
                var scene = new THREE.Scene();

                //创建一个相机
                 var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);

                //创建一个渲染器
                var renderer = new THREE.WebGLRenderer();

                //渲染器的背景颜色#EEEEEE
                renderer.setClearColor(new THREE.Color(0xEEEEEE, 1.0));

                //渲染器的大小
                renderer.setSize(window.innerWidth, window.innerHeight);

                //是否显示阴影
                renderer.shadowMapEnabled = true;

                //创建一个地面几何    宽60   高20   宽分成1份   高分成1份
                var planeGeometry = new THREE.PlaneGeometry(60, 20, 1, 1);

                //地面的材料是光照材料 颜色是#FFFFFF
                var planeMaterial = new THREE.MeshLambertMaterial({color: 0xffffff});

                //合成材料和几何
                var plane = new THREE.Mesh(planeGeometry, planeMaterial);

                //地面允许接收阴影
                plane.receiveShadow = true;

                //地面坐标
                plane.rotation.x = -0.5 * Math.PI;   //地面本来是竖着的  要逆时针旋转90度   -90 * Math.PI / 180;
                plane.position.x = 15;
                plane.position.y = 0;
                plane.position.z = 0;

                // 在场景中添加地面
                scene.add(plane);

                // 创建一个正方体  使用基本材料  允许正方体有阴影
                var cubeGeometry = new THREE.BoxGeometry(4, 4, 4);
                var cubeMaterial = new THREE.MeshLambertMaterial({color: 0xff0000});
                var cube = new THREE.Mesh(cubeGeometry, cubeMaterial);
                cube.castShadow = true;

                // 正方体的坐标
                cube.position.x = -4;
                cube.position.y = 3;
                cube.position.z = 0;

                // 把正方体添加到场景中
                scene.add(cube);

                //球体  基本材料
                var sphereGeometry = new THREE.SphereGeometry(4, 20, 20);
                var sphereMaterial = new THREE.MeshLambertMaterial({color: 0x7777ff});
                var sphere = new THREE.Mesh(sphereGeometry, sphereMaterial);

                // 球体坐标  允许有阴影
                sphere.position.x = 20;
                sphere.position.y = 0;
                sphere.position.z = 2;
                sphere.castShadow = true;

                // 把球体添加到场景中去
                scene.add(sphere);

                // 相机的坐标  相机的镜头朝向场景
                camera.position.x = -30;
                camera.position.y = 40;
                camera.position.z = 30;
                camera.lookAt(scene.position);

                 // 添加自然光    自然光不会产生阴影
                var ambientLight = new THREE.AmbientLight(0x0c0c0c);
                scene.add(ambientLight);

                // 添加点光源  点光源会产生阴影
                var spotLight = new THREE.SpotLight(0xffffff);
                spotLight.position.set(-40, 60, -10);
                spotLight.castShadow = true;   //允许点光源产生阴影
                scene.add(spotLight);

                //将渲染的场景添加到dom元素中去
                   document.getElementById("WebGL-output").appendChild(renderer.domElement);

                    // 调用渲染场景的循环
                var step = 0;
                renderScene();

                function renderScene() {

                    //更新FPS值
                    stats.update();
                    // 旋转正方体
                    cube.rotation.x += 0.02;
                    cube.rotation.y += 0.02;
                    cube.rotation.z += 0.02;

                    // 移动球体
                    step += 0.04;
                    sphere.position.x = 20 + ( 10 * (Math.cos(step)));
                    sphere.position.y = 2 + ( 10 * Math.abs(Math.sin(step)));

                    // render using requestAnimationFrame
                    requestAnimationFrame(renderScene);
                    renderer.render(scene, camera);
                }

                //在一个小图里显示每秒显示的帧数(FPS)
                function initStats(){
                    var stats = new Stats();
                    stats.setMode(0); // 0: fps, 1: ms
                    stats.domElement.style.position = ‘absolute‘;
                    stats.domElement.style.left = ‘0px‘;
                    stats.domElement.style.top = ‘0px‘;
                    document.getElementById("Stats-output").appendChild(stats.domElement);
                    return stats;
                }
            }
            window.onload = init;
        </script>
    </body>
</html>

原文地址:https://www.cnblogs.com/shuaihan/p/9872415.html

时间: 2024-11-02 02:38:27

01-THREE.JS第一个场景的相关文章

JS第一周总结1

JS第一周总结 这周我学习了JS的基础部分,大致分为了: a.基础变量及数据类型 b.特殊数据类型 c.JS基础语句类型 d.BOM操作 e.DOM操作 ###基础变量###     1.首先给变量取名,取名规范有3点:         1.变量首字符必须是字母或者美元符号$.下划线_ 三者之一.         2.变量名字中不能包括特殊符号,比如空格.加减号等符号.         3.变量中不能包括JS中的关键字,比如var之类的. 2.取好名字之后,我们需要将这个变量定义出来,并且赋值给

js第一节-js的属性操作

js第一节-js的属性操作 今天我们第一节的内容主要跟大家聊聊js的属性操作,那么什么是属性呢?属性就是对于一个事物的描述,比如一个元素它的id,它的value值等.每个元素都有其自己本有的属性,也有我们给它定义的属性--自定义属性,总之这些都是描述其元素独有特性的.现在呢,我通过两个实例跟大家讲解一下什么是js的属性操作. 一.第一个实例是:图片的轮播图 效果图: 图1:加载的时候 图2:加载之后 HTML代码和CSS代码: JS代码: 上面用到了var oId = document.getE

07.spritekit征程——创建第一个场景

07.SpriteKit征程--创建第一个场景 Sprite Kit 的内容被放置于窗口当中,即那些可视内容.Sprite Kit 之中的内容由SKView 类进行渲染(注:一般将普通的UIView转换成SKView是这么写的let skView = self.view as SKView ).由SKView 对象渲染的内容称之为场景,也就是Scene,它隶属于SKScene类.场景作为一个root node 又继承于UIResponder类,因此它能够响应用户的输入,当然还有其他丰富的内容使得

node.js适用的场景

概述:NodeJS宣称其目标是"旨在提供一种简单的构建可伸缩网络程序的方法",那么它的出现是为了解决什么问题呢,它有什么优缺点以及它适用于什么场景呢? 本文就个人使用经验对这些问题进行探讨. 一. NodeJS的特点 我们先来看看NodeJS官网上的介绍: Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications.

01.base-v1.js

/* Date: 2014-01-21 */ function login() { return location.href = "https://passport.jd.com/new/login.aspx?ReturnUrl=" + escape(location.href).replace(/\//g, "%2F"), !1 } function regist() { return location.href = "https://reg.jd.co

Three.js 第一篇:绘制一个静态的3D球体

第一篇就画一个球体吧 首先我们知道Three.js其实是一个3D的JS引擎,其中的强大之处就在于这个JS框架并不是依托于JQUERY来写的.那么,我们在写这一篇绘制3D球体的文章的时候,应该注意哪些地方呢?下面我就来一一列举 1.场景. 场景是什么,说得简单一点,场景就是一个canvas ,我们就是要在Canvas上面实现3D效果的画面而已.场景和容器,相机是息息相关的,我们就拿拍戏来说,假如我们需要演一个古装剧的撕逼场景,那么,我们需要的道具其中之一就是一个相机. 2.容器 就是承载球体的DI

01 Node.js简介, 安装&amp;配置

Node.js 简介 Node.js 是什么 Node.js 有着强大而灵活的包管理器(node package manager,npm) 目前, 已经有强大第三方工具模块, 例如数据库连接, 网站开发框架, CSS生成器, 操作系统API, 网络通信 等. Node.js 是什么 ? 是一个让 javascript 运行在服务器端的平台, 以前javascript只能运行在浏览器中,  node.js 可以解析 javascript. CommonJS 试图设计一套Javascript的规范.

12.u-boot2013.01 smdk2410 启动第一阶段分析.txt

u-boot2013.01 smdk2410  -->2440 启动分析 1.u-boot启动第一阶段 start.S (arch\arm\cpu\arm920t) _start: b start_code 1.1 set the cpu to SVC32 mode mrs r0, cpsr bic r0, r0, #0x1f orr r0, r0, #0xd3 msr cpsr, r0 1.2 关闭看门狗 # define pWTCON 0x53000000 ldr r0, =pWTCON m

angular.js第一个项目 简单分页

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum