16-THREE.JS 半球光
- <!DOCTYPE html>
- <html>
- <head>
- <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>
- <script type="text/javascript" src="https://cdn.bootcss.com/dat-gui/0.7.3/dat.gui.js"></script>
- <style>
- body {
- margin: 0;
- overflow: hidden;
- }
- </style>
- </head>
- <body>
- <div id="Stats-output">
- </div>
- <div id="WebGL-output">
- </div>
- <script type="text/javascript">
- // 初始化
- function init() {
- var stats = initStats();
- // 创建一个场景
- var scene = new THREE.Scene();
- scene.fog = new THREE.Fog(0xaaaaaa, 0.010, 200);
- // 创建一个相机
- var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
- // 创建一个渲染器
- var renderer = new THREE.WebGLRenderer();
- renderer.setClearColor(new THREE.Color(0xaaaaff, 1.0));
- renderer.setSize(window.innerWidth, window.innerHeight);
- renderer.shadowMapEnabled = true;
- // 创建草坪
- var textureGrass = THREE.ImageUtils.loadTexture("../assets/textures/ground/grasslight-big.jpg");
- textureGrass.wrapS = THREE.RepeatWrapping; //表示边缘被夹到纹理单元(texels)的外边界
- textureGrass.wrapT = THREE.RepeatWrapping; //表示边缘被夹到纹理单元(texels)的外边界
- textureGrass.repeat.set(4, 4);
- //
- var planeGeometry = new THREE.PlaneGeometry(1000, 200, 20, 20);
- var planeMaterial = new THREE.MeshLambertMaterial({map: textureGrass});
- // //地面材料
- var plane = new THREE.Mesh(planeGeometry, planeMaterial);
- plane.receiveShadow = true;
- // 旋转这个地面
- plane.rotation.x = -0.5 * Math.PI;
- 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: 0xff3333});
- 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, 25, 25);
- var sphereMaterial = new THREE.MeshLambertMaterial({color: 0x7777ff});
- var sphere = new THREE.Mesh(sphereGeometry, sphereMaterial);
- // 球体坐标
- sphere.position.x = 10;
- sphere.position.y = 5;
- sphere.position.z = 10;
- sphere.castShadow = true;
- // 把球体添加到场景中去
- scene.add(sphere);
- // 相机坐标 和 参考点
- camera.position.x = -20;
- camera.position.y = 15;
- camera.position.z = 45;
- // camera.position.x = -120;
- // camera.position.y = 165;
- // camera.position.z = 145;
- camera.lookAt(new THREE.Vector3(10, 0, 0));
- // 添加聚光灯
- var spotLight0 = new THREE.SpotLight(0xcccccc);
- spotLight0.position.set(-40, 60, -10);
- spotLight0.lookAt(plane);
- scene.add(spotLight0);
- var target = new THREE.Object3D();
- target.position = new THREE.Vector3(5, 0, 0);
- //添加半球光
- var hemiLight = new THREE.HemisphereLight(0x0000ff, 0x00ff00, 0.6);
- hemiLight.position.set(0, 500, 0);
- scene.add(hemiLight);
- var pointColor = "#ffffff";
- // var dirLight = new THREE.SpotLight( pointColor);
- var dirLight = new THREE.DirectionalLight(pointColor);
- dirLight.position.set(30, 10, -50);
- dirLight.castShadow = true;
- // dirLight.shadowCameraNear = 0.1;
- // dirLight.shadowCameraFar = 100;
- // dirLight.shadowCameraFov = 50;
- dirLight.target = plane;
- dirLight.shadowCameraNear = 0.1;
- dirLight.shadowCameraFar = 200;
- dirLight.shadowCameraLeft = -50;
- dirLight.shadowCameraRight = 50;
- dirLight.shadowCameraTop = 50;
- dirLight.shadowCameraBottom = -50;
- dirLight.shadowMapWidth = 2048;
- dirLight.shadowMapHeight = 2048;
- scene.add(dirLight);
- //将渲染后的效果放到DOM元素中去
- document.getElementById("WebGL-output").appendChild(renderer.domElement);
- var step = 0;
- var invert = 1;
- var phase = 0;
- var controls = new function () {
- this.rotationSpeed = 0.03;
- this.bouncingSpeed = 0.03;
- this.hemisphere = true;
- this.color = 0x00ff00;
- this.skyColor = 0x0000ff;
- this.intensity = 0.6;
- };
- var gui = new dat.GUI();
- gui.add(controls, 'hemisphere').onChange(function (e) {
- if (!e) {
- hemiLight.intensity = 0;
- } else {
- hemiLight.intensity = controls.intensity;
- }
- });
- gui.addColor(controls, 'color').onChange(function (e) {
- hemiLight.groundColor = new THREE.Color(e);
- });
- gui.addColor(controls, 'skyColor').onChange(function (e) {
- hemiLight.color = new THREE.Color(e);
- });
- gui.add(controls, 'intensity', 0, 5).onChange(function (e) {
- hemiLight.intensity = e;
- });
- render();
- function render() {
- stats.update();
- // 转动正方体
- cube.rotation.x += controls.rotationSpeed;
- cube.rotation.y += controls.rotationSpeed;
- cube.rotation.z += controls.rotationSpeed;
- // 滚动球体
- step += controls.bouncingSpeed;
- sphere.position.x = 20 + ( 10 * (Math.cos(step)));
- sphere.position.y = 2 + ( 10 * Math.abs(Math.sin(step)));
- requestAnimationFrame(render);
- renderer.render(scene, camera);
- }
- 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>
16-THREE.JS 半球光的更多相关文章
- three.js 源码注释(三十九)Light/HemisphereLight.js 半球光、 自然光(天光效果)
/*** * HemisphereLight类 是在场景中创建半球光,就是天光效果,经常用在室外,将各个位置的物体都照亮,室内的光线大多是方向性的, * 无论是窗口还是灯槽,用平面光很方便,室外用平面 ...
- 15-THREE.JS 方向光
<!DOCTYPE html> <html> <head> <title></title> <script src="htt ...
- 《selenium2 python 自动化测试实战》(16)——js操作补充
js修改readonly属性 我们看到这里日期框标签中有readonly属性,如果我们直接send_keys就无法输入内容,这时我们需要先去掉readonly属性: js ='document.get ...
- 16 (H5*) JS第6天 日期、字符串、数组
目录 1:date 2:格式化日期 3:字符串 4:字符串的方法 5:字符串的案例 6:数组的方法 7:包装类型 复习 正文 1:日期:date <script> //创建实例对象 // ...
- three.js光源
在Threejs中,光源用Light表示,它是所有光源的基类.它的构造函数是: THREE.Light ( hex ) 它有一个参数hex,接受一个16进制的颜色值.例如要定义一种红色的光源,我们可以 ...
- three.js一个简单demo学些和讲解
叉口裁剪球体案例 二话不说先上效果图: 全部代码带注释 <!DOCTYPE html> <html lang="en"> <head> < ...
- 1000粉!使用Three.js制作一个专属3D奖牌🥇
背景 破防了 !突然发现 SegmentFault 平台的粉丝数量已经突破 1000 了,它是我的三个博客平台掘金.博客园.SegmentFault中首个粉丝突破 1000 的,于是设计开发这个页面, ...
- Three.js开发指南---使用three.js里的各种光源(第三章)
本章的主要内容 1 three.js有哪些可用的光源 2 什么时候用什么光源. 3 如何调整配置各种光源 4 如何创建镜头炫光 一 光源 光源大概有7种, 其中基础光源有4种 环境光(AmbientL ...
- 使用 Babylon.js 在 HTML 页面加载 3D 对象
五一 Windwos Blogs 推了一篇博客, Babylon.js v3.2 发布了.因为一直有想要在自己博客上加载 3D 对象的冲动,这两天正好看到了,就动手研究研究.本人之前也并没有接触过 W ...
随机推荐
- 我的Android进阶之旅------>Android使用9Patch图片作为不失真背景
做人要大度,海纳百川,做事要圆滑,左右逢源,这让我想到了编程也是如此,代码要扩展,界面也要考虑自适应. 这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用. 1 ...
- Android程序运行时权限与文件系统权限的区别
apk程序是运行在虚拟机上的,对应的是Android独特的权限机制,只有体现到文件系统上时才使用linux的权限设置. (1)Android中的apk必须签名 (2)基于UserID的进程级别的安全机 ...
- git钩子
定义: 钩子:由事件触发的函数 分类: 客户端钩子:由诸如提交和合并这样的操作触发 服务器端钩子:由诸如接收被推送的提交这样的联网操作触发 安装: a.钩子都被存储在 .git 目录下的 hooks ...
- ABAP发邮件函数
步骤: 一.检查输入参数, (1)未指定文件類別代碼,(2)未指定郵件主題, (3)未指定郵件內容, (4)未指定發送人郵件地址, (5)未指定接收人郵件地址, 二.调用发送功能, (1)创建发送请求 ...
- 从SignalTap II中获取“最真实”的仿真测试向量(ZZ)
在实际工作中,经常会遇到这样的情况:在硬件调试中采用SignalTap II反复多次编译并最终捕获到问题的原因时,才会发现,原来这个问题是逻辑问题,是可以在仿真环境下发现并快速解决的.先前没 ...
- asp.net mvc webform和razor的page基类区别
接触过asp.net mvc的都知道,在传统的webform的模式下,page页面的基类是这样声明的: <%@ Page Language="C#" MasterPageFi ...
- KVM虚拟化虚拟机支持虚拟化
一.开启的时候需要关闭所有虚拟机: 首先检查 KVM host(宿主机/母机)上的kvm_intel模块是否打开了嵌套虚拟机功能(默认是开启的): 1.modinfo kvm_intel | grep ...
- maven 项目打包时无法解析读取properties文件
在做项目时遇见一个问题,无法解析properties文件的 内容 异常为 Could not resolve placeholder ......... 在此之前均有做相关的 配置 但是从未出现过如上 ...
- iOS 几种常用的 crash log 崩溃信息调试方法
前言:crash log 对 定位崩溃问题 ,并且不容易复现,尤其是及时对appstore 上正在运营的 app 的迭代改进来说 非常重要. 1 crash两种情况 1.1 测试环境下 追踪bug 1 ...
- P4317 花神的数论题
题目 洛谷 数学方法学不会%>_<% 做法 爆搜二进制下存在\(i\)位\(1\)的情况,然后快速幂乘起来 My complete code #include<bits/stdc++ ...