Three.js 灯光移动有点莫名其妙 - ByeBye

一段还凤看懂的代码

分析过程不断更新中。。。

<html>
        <head>
                <title> Interaction </title>
                <style>
                        canvas { width:100%; height:100%; background-color: black }
                        body { background-color: white };
                </style>
        </head>
        <body>
                <h1 align= "center" style="color:blue"> Interaction </h1>
                <div style="width:1000px;">
                        <div style="float:left;display:inline-block; width:250px; margin-left:10px; padding:20px;">
                                <h3> Light </h3>
                                <table border="1">
                                        <tr>
                                                <td> Color </td>
                                                <td> <input type="text" id="light-color" value="0xffffff"> </input> </td>
                                        </tr>
                                        <tr>
                                                <td> Type </td>
                                                <td>
                                                        <select id="light-type">
                                                                <option value="point"> Point Light </option>
                                                                <option value="spot"> Spot Light </option>
                                                                <option value="ambient"> Ambient Light </option>
                                                                <option value="area"> Area Light </option>
                                                                <option value="directional"> Directional Light </option>
                                                        <select>
                                                </td>
                                        </tr>
                                        <tr>
                                                <td> x position </td>
                                                <td>
                                                        <input type="number" value="0" id="light-position-x"> </input>
                                                </td>
                                        </tr>
                                        <tr>
                                                <td> y position </td>
                                                <td>
                                                        <input type="number" value="0" id="light-position-y"> </input>
                                                </td>
                                        </tr>
                                        <tr>
                                                <td> z position </td>
                                                <td>
                                                        <input type="number" value="20" id="light-position-y"> </input>
                                                </td>
                                        </tr>
                                </table>
                                <button onClick="changeLightParameters()" style="width:130px;"> Apply </button>
                        </div>
                        <div style="float:left;display:inline-block; width:250px; margin-left:10px; padding:20px;">
                                <h3> Material </h3>
                                <table border="1">
                                        <tr>
                                                <td> Diffuse </td>
                                                <td> <input type="text" id="material-diffuse" value="0xffffff"> </input> </td>
                                        </tr>
                                        <tr>
                                                <td> Ambient </td>
                                        <td> <input type="text" id="material-ambient" value="0xffffff"> </input> </td>
                                        </tr>
                                        <tr>
                                                <td> Emissive </td>
                                                <td> <input type="text" id="material-emissive" value="0xffffff"> </input> </td>
                                        </tr>
                                        <tr>
                                                <td> Specular </td>
                                                <td> <input type="text" id="material-specular" value="0xffffff"> </input> </td>
                                        </tr>
                                        <tr>
                                                <td> Shininess </td>
                                                <td> <input type="number" id="material-shininess" value="1"> </input> </td>
                                        </tr>
                                        <tr>
                                                <td> Type </td>
                                                <td>
                                                        <select id="material-type">
                                                                <option value="lambert"> Lambert </option>
                                                                <option value="normal"> Normal </option>
                                                                <option value="phong"> Phong </option>
                                                        </select>
                                                </td>
                                        </tr>
                                </table>
                                <button onClick="changeMaterialParameters()" style="width:130px;"> Apply </button>
                        </div>
                        <div style="float:left;display:inline-block; width:250px; margin-left:10px; padding:20px;">
                                <h3> Object </h3>
                                <table border="1">
                                        <tr>
                                                <td> Type </td>
                                                <td>
                                                        <select id="object-type">
                                                                <option value= "sphere"> Sphere </option>
                                                                <option value= "cube"> Cube </option>
                                                                <option value= "cylinder"> Cylinder </option>
                                                        </select>
                                                </td>
                                        </tr>
                                </table>
                                <button onClick= "changeObjectParameters()" style="width:130px;"> Apply </button>
                        </div>
                </div>
                <script src="/Users/ramy/Documents/HTML/mrdoob-three.js-58e4622/build/three.min.js"></script>
                <script>

                        // Funzioni per leggere i parametri:

                        function getLightParameters() {
                                var lightParameters={};
                                lightParameters.color= parseInt(document.getElementById("light-color").value,16);
                                lightParameters.position= new THREE.Vector3(
                                        document.getElementById("light-position-x").value,
                                        document.getElementById("light-position-y").value,
                                        document.getElementById("light-position-z").value );
                                if(isNaN(lightParameters.color)) {
                                        return null;
                                }
                                lightParameters.type= document.getElementById("light-type").value;
                                return lightParameters;
                        }

                        function getObjectParameters() {
                                var objectParameters={};
                                objectParameters.type= document.getElementById("object-type").value;
                                return objectParameters;
                        }

                        function getMaterialParameters() {
                                var materialParameters={};
                                materialParameters.diffuse= parseInt(document.getElementById("material-diffuse").value , 16);
                                materialParameters.ambient= parseInt(document.getElementById("material-ambient").value , 16);
                                materialParameters.emissive= parseInt(document.getElementById("material-emissive").value , 16);
                                materialParameters.specular= parseInt(document.getElementById("material-specular").value , 16);
                                materialParameters.shininess= document.getElementById("material-shininess");
                                if(isNaN(materialParameters.diffuse) || isNaN(materialParameters.ambient) || isNaN(materialParameters.emissive) || isNaN(materialParameters.specular) ) {
                                        return null;
                                }
                                materialParameters.type= document.getElementById("material-type").value;
                                return materialParameters;
                        }

                        // Cambiare la scena:

                        function changeLightParameters() {
                                var lightParameters= getLightParameters();
                                if(lightParameters== null) {
                                        alert("Invalid values");
                                        return;
                                }
                                if(light.name!= lightParameters.type) {
                                        scene.remove(light);
                                        if(lightParameters.type== "spot") {
                                                light= new THREE.SpotLight(lightParameters.color);
                                        }
                                        else if(lightParameters.type== "point") {
                                                light= new THREE.PointLight(lightParameters.color);
                                        }
                                        else if(lightParameters.type== "ambient") {
                                                light= new THREE.AmbientLight(lightParameters.color);
                                        }
                                        else if(lightParameters.type== "area") {
                                                light= new THREE.AreaLight(lightParameters.color);
                                        }
                                        else if(lightParameters.type== "directional") {
                                                light= new THREE.DirectionalLight(lightParameters.color);
                                        }
                                        light.position.set(lightParameters.position.x, lightParameters.position.y, lightParameters.position.z);
                                        light.name= lightParameters.name;
                                        scene.add(light);
                                }
                                else {
                                        light.position= lightParameters.position;
                                        light.color= new THREE.Color(lightParameters.color);
                                }
                        }

                        function changeObjectParameters() {
                                var objectParameters= getObjectParameters();
                                if(objectParameters== null) {
                                        alert("Invalid values");
                                        return;
                                }
                                if(object.name != objectParameters.type) {
                                        scene.remove(object);
                                        if(objectParameters.type== "sphere") {
                                                geometry= new THREE.SphereGeometry(2,15,15);
                                        }
                                        else if(objectParameters.type== "cube") {
                                                geometry= new THREE.CubeGeometry(2,2,2);
                                        }
                                        else if(objectParameters.type== "cylinder") {
                                                geometry= new THREE.CylinderGeometry(1,1,2.5);
                                        }
                                        object= new THREE.Mesh(geometry,material);
                                        object.name= objectParameters.type;
                                        scene.add(object);
                                }
                        }

                        function changeMaterialParameters() {
                                var materialParameters= getMaterialParameters();
                                if(materialParameters== null) {
                                        alert("Invalid values");
                                        return;
                                }
                                if(materialParameters.type!= material.name) {
                                        scene.remove(object);
                                        if(materialParameters.type== "lambert") {
                                                material= new THREE.MeshLambertMaterial({
                                                        color:materialParameters.diffuse,
                                                        ambient:materialParameters.ambient,
                                                        emissive:materialParameters.emissive });
                                        }
                                        else if(materialParameters.type== "normal") {
                                                material= new THREE.MeshNormalMaterial();
                                        }
                                        else if(materialParameters.type== "phong") {
                                                material= new THREE.MeshPhongMaterial({
                                                        color:materialParameters.diffuse,
                                                        ambient:materialParameters.ambient,
                                                        emissive:materialParameters.emissive,
                                                        specular:materialParameters.specular,
                                                        shininess:materialParameters.shininess });
                                        }
                                        material.name= materialParameters.type;
                                        object= new THREE.Mesh(geometry,material);
                                        scene.add(object);
                                }
                                else {
                                        material.color= new THREE.Color(materialParameters.diffuse);
                                        material.ambient= new THREE.Color(materialParameters.ambient);
                                        material.emissive= new THREE.Color(materialParameters.emissive);
                                        material.specular= new THREE.Color(materialParameters.specular);
                                        material.shininess= new THREE.Color(materialParameters.shininess);
                                        material.needsUpdate= true;
                                }
                        }

                        // Creazione scena, camera e renderer:
                        var scene= new THREE.Scene();
                        var camera= new THREE.PerspectiveCamera(75,window.innerWidth/window.innerHeight,0.1,1000);
                        var renderer= new THREE.WebGLRenderer();
                        renderer.setSize(window.innerWidth,window.innerHeight);
                        document.body.appendChild(renderer.domElement);
                        camera.position.z=5;

                        // Creazione geometria, materiale e oggetto:
                        var geometry= new THREE.SphereGeometry(1,15,15);
                        var material= new THREE.MeshLambertMaterial({color:0xffffff, ambient:0xffffff, emissive:0xffffff});
                        var object= new THREE.Mesh(geometry,material);
                        material.name= "lambert";
                        object.name= "sphere";
                        scene.add(object);

                        // Creazione luci:
                        var light= new THREE.PointLight(0xffffff);
                        light.position.set(0,0,20);
                        light.name= "point";
                        scene.add(light);

                        // Creazione della  funzione di rendering:
                        var render= function() {
                                requestAnimationFrame(render);
                                renderer.render(scene,camera);
                        }
                        render();
                </script>
        </body>
</html>
时间: 2024-11-08 18:25:47

Three.js 灯光移动有点莫名其妙 - ByeBye的相关文章

JS超强幻灯片效果代码

根据网友<VBscript超强幻灯片效果代码>改写而来:). 因为我发现将VBS用在网页中时, 如果再调用JS代码会出现莫名其妙的错误,但是网页中全用JS代码后就不出现错误了,所以把网友的VBS改成了JS. slide.js源代码:   //超强幻灯片效果  var temp_arr1 = navigator.appVersion.split(";")  var temp_arr2 = temp_arr1[1].split(" ")  var CanPl

程序-VS调试时出现莫名其妙的JS错误

问题描述 VS调试时出现莫名其妙的JS错误 写了一个界面 没有自己写JS 但是调试的时候一直弹出JS错误 并且还是只读类型的,点继续程序可以运行.请问这是为什么? 解决方案 有没有设置你调试的页面为起始页.

HTML5 画布上的 Three.js 环境灯光(HTML5 Canvas Three.js Ambient Lighting)

HTML5 画布上的 Three.js 环境灯光(HTML5 Canvas Three.js Ambient Lighting) 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. HTML5 画布

探讨JS表现与数据分离

首先,当时我简历是抄的,里面有一句"对表现与数据分离有一定理解",然后面试官就针对这点开问了 PS:尼玛,那是抄的,我哪里知道他是干神马的...... 为了帮助我展开思维,面试官出了一道题: 他有一个国家列表,现在要将国家列表放到A中,然后B可以由A选择,也可以有总列表选择 但是B中添加后,若是A中没有要动态为A增加这项. 问题出来了,我现在一看就知道面试官想问什么了......当时其实没有理解到啦...... 现在来看,说这道题与表现与数据分离有关是没有问题的,却不一定让人很好的产生

IE浏览器中一个值得关注的JS问题

js|浏览器|问题 刚才在调试js,在mozilla中一切正常,但是在ie中却报告有configuration变量没有找到.以下是代码: var Environment = new (function Environment$ctor() { this.processCommandLine = function Env$procCmdLine(q) { var cmd = configuration {}; // <---- 就是这一行报告错误 // 其他代码省略 } }; 我先后把这一行改成如

关于js数组去重的问题小结

 在项目开发过程中经常会遇到数组中包含很多重复的内容,即脏数据去脏的操作,本文着重讲解了数组去重的几种方法.需要的朋友可以过来参考下,希望对大家有所帮助 1.根据js对象中key不重复的原则,构思出数组去重的方法,按照最常规的思维如下:   代码如下: function distinctArray(arr){ var obj={},temp=[]; for(var i=0;i<arr.length;i++){ if(!obj[arr[i]]){ temp.push(arr[i]); obj[ar

ie6下关于html编码问题导致js出错css不被应用的解决方法

页面定义是编码utf-8时如果在js文件中放置中文之类的多字节文字且保存编码使用系统默认,如gbk非utf-8时,就会在ie中出现莫名其妙的错误提示 在测试中发现.页面定义是编码utf-8时, 如果在js文件中放置中文之类的多字节文字,且保存编码使用系统默认,如gbk,非utf-8时,就会在ie中出现莫名其妙的错误提示,js,如没有结束的注释; 在css中就会导致此css文件相当没加载一样的效果. 如果在html中包含(php?apache)导致html内容有混杂编码utf-8+gbk编码的内容

HTML5+JS,微信平台开发

   [项目概要]     最近进入了一个新的项目,手机移动端的开发.微信平台,现在是家喻户晓.而自己没想到,这么快,就可以亲身接触到这样一个微信平台开发项目中.如何使得我们写HTML页面去适应各种手机,这就是在这个项目中,需要我们去做处理的一方面.    [项目基础]     HTML,大家都有很长一段时间的接触了,前台页面,一直是比较薄弱和不重视的地方.如果在面试时,让自己手写一段HTML代码,恐怕是难以下笔.而这一次,加入到项目组中,是让我们先从前台页面开始,HTML5+JS,实现手机移动

js仿百度有啊通栏展示效果实现代码_javascript技巧

效果图如下: 页面代码: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta h