<html><head> <meta charset="utf-8"> <title>threejs</title> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width,initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"><script src="js/STLLoader.js"></script><script type="text/javascript" src="http://www.myjscode.com/js/jquery.min.js"></script><script type="text/javascript" src="http://www.myjscode.com/demo/threejs/libs/three.js"></script><script type="text/javascript" src="http://www.myjscode.com/demo/threejs/libs/dat.gui.js"></script><style type="text/css">.dg { /** Clear list styles */ /* Auto-place container */ /* Auto-placed GUI's */ /* Line items that don't contain folders. */ /** Folder names */ /** Hides closed items */ /** Controller row */ /** Name-half (left) */ /** Controller-half (right) */ /** Controller placement */ /** Shorter number boxes when slider is present. */ /** Ensure the entire boolean and function row shows a hand */ } .dg ul { list-style: none; margin: 0; padding: 0; width: 100%; clear: both; } .dg.ac { position: fixed; top: 0; left: 0; right: 0; height: 0; z-index: 0; } .dg:not(.ac) .main { /** Exclude mains in ac so that we don't hide close button */ overflow: hidden; } .dg.main { -webkit-transition: opacity 0.1s linear; -o-transition: opacity 0.1s linear; -moz-transition: opacity 0.1s linear; transition: opacity 0.1s linear; } .dg.main.taller-than-window { overflow-y: auto; } .dg.main.taller-than-window .close-button { opacity: 1; /* TODO, these are style notes */ margin-top: -1px; border-top: 1px solid #2c2c2c; } .dg.main ul.closed .close-button { opacity: 1 !important; } .dg.main:hover .close-button, .dg.main .close-button.drag { opacity: 1; } .dg.main .close-button { /*opacity: 0;*/ -webkit-transition: opacity 0.1s linear; -o-transition: opacity 0.1s linear; -moz-transition: opacity 0.1s linear; transition: opacity 0.1s linear; border: 0; position: absolute; line-height: 19px; height: 20px; /* TODO, these are style notes */ cursor: pointer; text-align: center; background-color: #000; } .dg.main .close-button:hover { background-color: #111; } .dg.a { float: right; margin-right: 15px; overflow-x: hidden; } .dg.a.has-save > ul { margin-top: 27px; } .dg.a.has-save > ul.closed { margin-top: 0; } .dg.a .save-row { position: fixed; top: 0; z-index: 1002; } .dg li { -webkit-transition: height 0.1s ease-out; -o-transition: height 0.1s ease-out; -moz-transition: height 0.1s ease-out; transition: height 0.1s ease-out; } .dg li:not(.folder) { cursor: auto; height: 27px; line-height: 27px; overflow: hidden; padding: 0 4px 0 5px; } .dg li.folder { padding: 0; border-left: 4px solid rgba(0, 0, 0, 0); } .dg li.title { cursor: pointer; margin-left: -4px; } .dg .closed li:not(.title), .dg .closed ul li, .dg .closed ul li > * { height: 0; overflow: hidden; border: 0; } .dg .cr { clear: both; padding-left: 3px; height: 27px; } .dg .property-name { cursor: default; float: left; clear: left; width: 40%; overflow: hidden; text-overflow: ellipsis; } .dg .c { float: left; width: 60%; } .dg .c input[type=text] { border: 0; margin-top: 4px; padding: 3px; width: 100%; float: right; } .dg .has-slider input[type=text] { width: 30%; /*display: none;*/ margin-left: 0; } .dg .slider { float: left; width: 66%; margin-left: -5px; margin-right: 0; height: 19px; margin-top: 4px; } .dg .slider-fg { height: 100%; } .dg .c input[type=checkbox] { margin-top: 9px; } .dg .c select { margin-top: 5px; } .dg .cr.function, .dg .cr.function .property-name, .dg .cr.function *, .dg .cr.boolean, .dg .cr.boolean * { cursor: pointer; } .dg .selector { display: none; position: absolute; margin-left: -9px; margin-top: 23px; z-index: 10; } .dg .c:hover .selector, .dg .selector.drag { display: block; } .dg li.save-row { padding: 0; } .dg li.save-row .button { display: inline-block; padding: 0px 6px; } .dg.dialogue { background-color: #222; width: 460px; padding: 15px; font-size: 13px; line-height: 15px; }/* TODO Separate style and structure */#dg-new-constructor { padding: 10px; color: #222; font-family: Monaco, monospace; font-size: 10px; border: 0; resize: none; box-shadow: inset 1px 1px 1px #888; word-wrap: break-word; margin: 12px 0; display: block; width: 440px; overflow-y: scroll; height: 100px; position: relative; }#dg-local-explain { display: none; font-size: 11px; line-height: 17px; border-radius: 3px; background-color: #333; padding: 8px; margin-top: 10px; } #dg-local-explain code { font-size: 10px; }#dat-gui-save-locally { display: none; }/** Main type */.dg { color: #eee; font: 11px 'Lucida Grande', sans-serif; text-shadow: 0 -1px 0 #111; /** Auto place */ /* Controller row, <li> */ /** Controllers */ } .dg.main { /** Scrollbar */ } .dg.main::-webkit-scrollbar { width: 5px; background: #1a1a1a; } .dg.main::-webkit-scrollbar-corner { height: 0; display: none; } .dg.main::-webkit-scrollbar-thumb { border-radius: 5px; background: #676767; } .dg li:not(.folder) { background: #1a1a1a; border-bottom: 1px solid #2c2c2c; } .dg li.save-row { line-height: 25px; background: #dad5cb; border: 0; } .dg li.save-row select { margin-left: 5px; width: 108px; } .dg li.save-row .button { margin-left: 5px; margin-top: 1px; border-radius: 2px; font-size: 9px; line-height: 7px; padding: 4px 4px 5px 4px; background: #c5bdad; color: #fff; text-shadow: 0 1px 0 #b0a58f; box-shadow: 0 -1px 0 #b0a58f; cursor: pointer; } .dg li.save-row .button.gears { background: #c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW I8AClAcgKxQ4T9hoMAEUrxx2QSGN6 egDX /vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw QZblw67vDs8R0YHyQhgObx yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat; height: 7px; width: 8px; } .dg li.save-row .button:hover { background-color: #bab19e; box-shadow: 0 -1px 0 #b0a58f; } .dg li.folder { border-bottom: 0; } .dg li.title { padding-left: 16px; background: black url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI hKgFxoCgAOw==) 6px 10px no-repeat; cursor: pointer; border-bottom: 1px solid rgba(255, 255, 255, 0.2); } .dg .closed li.title { background-image: url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==); } .dg .cr.boolean { border-left: 3px solid #806787; } .dg .cr.function { border-left: 3px solid #e61d5f; } .dg .cr.number { border-left: 3px solid #2fa1d6; } .dg .cr.number input[type=text] { color: #2fa1d6; } .dg .cr.string { border-left: 3px solid #1ed36f; } .dg .cr.string input[type=text] { color: #1ed36f; } .dg .cr.function:hover, .dg .cr.boolean:hover { background: #111; } .dg .c input[type=text] { background: #303030; outline: none; } .dg .c input[type=text]:hover { background: #3c3c3c; } .dg .c input[type=text]:focus { background: #494949; color: #fff; } .dg .c .slider { background: #303030; cursor: ew-resize; } .dg .c .slider-fg { background: #2fa1d6; } .dg .c .slider:hover { background: #3c3c3c; } .dg .c .slider:hover .slider-fg { background: #44abda; }</style> </head><body><div id="WebGL-output"><canvas width="2880" height="1412" style="width: 1440px; height: 706px;"></canvas></div><script>function init() { var scene = new THREE.Scene(); var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000); var renderer = new THREE.WebGLRenderer(); renderer.setClearColor(new THREE.Color(0xEEEEEE, 1.0)); renderer.setSize(window.innerWidth, window.innerHeight); renderer.shadowMapEnabled = true; var planeGeometry = new THREE.PlaneGeometry(60, 20, 1, 1); var planeMaterial = new THREE.MeshLambertMaterial({color: 0xffffff}); 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: 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); document.getElementById("WebGL-output").appendChild(renderer.domElement); var step = 0; var controls = new function () { this.rotationSpeed = 0.02; this.bouncingSpeed = 0.03; }; var gui = new dat.GUI(); gui.add(controls, 'rotationSpeed', 0, 0.5); gui.add(controls, 'bouncingSpeed', 0, 0.5); render(); function render() { 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); }}window.onload = init;</script><div class="dg ac"><div class="dg main a" style="width: 245px;"><div style="width: 6px; margin-left: -3px; height: 56px; cursor: ew-resize; position: absolute;"></div><ul style="height: auto;"><li class="cr number has-slider"><div><span class="property-name">rotationSpeed</span><div class="c"><div><input type="text"></div><div class="slider"><div class="slider-fg" style="width: 4%;"></div></div></div></div></li><li class="cr number has-slider"><div><span class="property-name">bouncingSpeed</span><div class="c"><div><input type="text"></div><div class="slider"><div class="slider-fg" style="width: 6%;"></div></div></div></div></li></ul><div class="close-button" style="width: 245px;">Close Controls</div></div></div></body></html>
下载three练习(入门级示例)用户还喜欢
- 18480 文章数
- 500万+ 热度
作者专栏
编辑推荐
- 淡抹u2引擎,修复内容较多,物有所值
- 界域传说·经典巨作=传世单机(一键安装)
- 丸子版本(175个传世版本大集合)
- GS版本:神话公益服务端+客户端
- 图片放大工具(放大图片不模糊)
- 剪映无限制VIP版
- 传奇世界客户端下载器,史上最全传世客户端
- 传世GS20220920商业引擎注册+登录配置器 解压密码是1
- U2官方排行榜游戏网关 支持元神,支持传家宝
- GS开战传世客户端+服务端
- (淡漠夕阳)u2引擎合区工具
- 传世GS引擎消除“你的游戏客户端版本号过旧,请及时更新”提示
- 传世一机多区双线路配置器--免密码版本
- 传世凤凰登陆器劫持修复软件
- SQLite3 for Navicat
- 传奇世界npc对话框编辑工具
- 传世GS落霞铭文服务器端
- gs_20210409引擎包+注册机(无限制)
- 传奇世界NPC对话封包查看器[支持时长版和极速版]
- 彩虹引擎传世脚本编辑工具1.7版来了,支持函数脚本翻译
评论