Javascript JS库dat.gui不工作

Javascript JS库dat.gui不工作,javascript,dat.gui,Javascript,Dat.gui,我已尝试使dat.gui()库正常工作。运行javascript时,我看到以下消息: Uncaught TypeError: this.onResize is not a function at Object.GUI (GUI.js:429) at loadScene (main.js:21) at main.js:163 我不熟悉这个库,因为我只导入了它,所以我不知道我可能做错了什么。我尝试过使用缩小版,但返回相同的错误 这是我正在使用的JS代码: function

我已尝试使dat.gui()库正常工作。运行javascript时,我看到以下消息:

Uncaught TypeError: this.onResize is not a function
    at Object.GUI (GUI.js:429)
    at loadScene (main.js:21)
    at main.js:163
我不熟悉这个库,因为我只导入了它,所以我不知道我可能做错了什么。我尝试过使用缩小版,但返回相同的错误

这是我正在使用的JS代码:

function update(renderer, scene, camera)
{
//Make the renderer render the scene and the camera
renderer.render(
    scene,
    camera
);

//Calls itself each time the function is called upon using recursion
requestAnimationFrame(function()
{
    update(renderer, scene, camera);
})
}

function loadScene()
{
console.log("LOG: Program start");

//Create dat.gui instance
 var gui = dat.GUI();

//Create scene
var scene = new THREE.Scene();
//Create a fog effect in the scene
//scene.fog = createFog(0xffffff, 0.2);


//Create camera
var camera = new THREE.PerspectiveCamera(
    //Perspective
    45,
    //Ratio
    window.innerWidth/window.innerHeight,
    //Near clipping distance
    1,
    //Far clipping distance
    1000
);

//Set the camera position x,y,z
setCameraPosition(camera, 1, 2, 7);

//Create a box with width, depth and height
var box = createBox(1, 1, 1);
box.position.y = box.geometry.parameters.height/2;

//Create a square plane
var plane = createPlane(4);
plane.name = "plane-1";
rotateObject(plane, -90, 0, 0);

//Create a (point) light source
var pointLight = createLightSource(1, 1, 2, 2, gui);

//Create a sphere
 var sphere = createSphere(0.05);

scene.add(plane);
scene.add(box);
scene.add(pointLight);
pointLight.add(sphere);

//Create renderer
var renderer = new THREE.WebGLRenderer();
//Set renderer size
renderer.setSize(window.innerWidth*0.9, window.innerHeight*0.9);
renderer.setClearColor('gray');
//Get element by ID
document.getElementById('scene').appendChild(renderer.domElement);

//Update the renderer, scene and camera
update(renderer, scene, camera);

return scene;
}

function createFog(color, density)
{
return new THREE.FogExp2(color, density);
}

function createPlane(size)
{
var object = new THREE.PlaneGeometry(size, size);
var material = new THREE.MeshPhongMaterial
({
    color: 'gray',
    side: THREE.DoubleSide
});

var mesh = new THREE.Mesh(object, material);

console.log("LOG: Plane created");
return mesh;
}

function createBox(w, d, h)
{
    var object = new THREE.BoxGeometry(w, d, h);
var material = new THREE.MeshPhongMaterial
({
    color: 'gray'
});

var mesh = new THREE.Mesh(object, material);

console.log("LOG: Box created");
return mesh;
//scene.add(mesh);
}

function createSphere(radius)
{
var object = new THREE.SphereGeometry(radius, 24, 24);
var material = new THREE.MeshBasicMaterial
({
    color: 'white'
});

var mesh = new THREE.Mesh(object, material);

console.log("LOG: Box created");
return mesh;
//scene.add(mesh);
}

function createLightSource(intensity, x, y, z, gui)
{
var light = new THREE.PointLight('white', intensity)
light.position.x = x;
light.position.y = y;
light.position.z = z;

gui.add(light, 'intensity', 0, 10);

return light;
}

function setCameraPosition(camera, x, y, z)
{
//Set camera position
camera.position.x = x;
camera.position.y = y;
camera.position.z = z;

camera.lookAt(new THREE.Vector3(0, 0, 0));

console.log("LOG: Camera position set");
}

function rotateObject(object,degreeX=0, degreeY=0, degreeZ=0)
{
degreeX = (degreeX * Math.PI)/180;
degreeY = (degreeY * Math.PI)/180;
degreeZ = (degreeZ * Math.PI)/180;

object.rotateX(degreeX);
object.rotateY(degreeY);
object.rotateZ(degreeZ);
}

var scene = loadScene();

这是您希望遵循的设计模式:


功能更新(渲染器、场景、摄影机){
//使渲染器渲染场景和摄影机
渲染器。渲染(场景、摄影机);
//每次使用递归调用函数时调用自身
requestAnimationFrame(函数(){
更新(渲染器、场景、摄影机);
});
}
函数loadScene(){
log(“日志:程序启动”);
//创建dat.gui实例
var gui=new dat.gui();
//为gui的属性创建对象
变量guiProperties={};
//创建场景
var scene=new THREE.scene();
//在场景中创建雾效果
//scene.fog=createFog(0xffffff,0.2);
//创建摄影机
var摄像机=新的三视角摄像机(
//透视图
45,
//比例
window.innerWidth/window.innerHeight,
//近剪裁距离
1.
//远削波距离
1000
);
//设置相机位置x、y、z
设置摄像机位置(摄像机,1,2,7);
//创建具有宽度、深度和高度的长方体
var-box=createBox(1,1,1);
box.position.y=box.geometry.parameters.height/2;
//创建一个正方形平面
变量平面=创建平面(4);
plane.name=“plane-1”;
旋转对象(平面,-90,0,0);
//创建(点)光源
var pointLight=createLightSource(1,1,2,2,gui,gui属性);
//创建一个球体
var-sphere=createSphere(0.05);
场景。添加(平面);
场景。添加(框);
场景。添加(点光源);
点光源。添加(球体);
//创建渲染器
var renderer=new THREE.WebGLRenderer();
//设置渲染器大小
renderer.setSize(window.innerWidth*0.9,window.innerHeight*0.9);
渲染器。setClearColor(“灰色”);
//按ID获取元素
document.getElementById(“场景”).appendChild(renderer.doElement);
//更新渲染器、场景和摄影机
更新(渲染器、场景、摄影机);
返回场景;
}
函数createFog(颜色、密度){
返回新的3.FogExp2(颜色、密度);
}
函数createPlane(大小){
var对象=新的三个平面几何体(大小、大小);
var材质=新的3.0网格材质({
颜色:“灰色”,
侧面:三个。双面
});
var mesh=新的三个网格(对象、材质);
console.log(“日志:创建的平面”);
回流网;
}
函数createBox(w、d、h){
var对象=新的三箱几何体(w、d、h);
var材质=新的3.0网格材质({
颜色:“灰色”
});
var mesh=新的三个网格(对象、材质);
console.log(“log:Box已创建”);
回流网;
//场景。添加(网格);
}
函数createSphere(半径){
var对象=新的三个。球度法(半径,24,24);
var材料=新的三网格基本材料({
颜色:“白色”
});
var mesh=新的三个网格(对象、材质);
console.log(“log:Box已创建”);
回流网;
//场景。添加(网格);
}
函数createLightSource(强度、x、y、z、gui、gui属性){
var灯光=新的三点灯光(“白色”,强度);
灯光位置x=x;
灯光位置y=y;
灯光位置z=z;
属性[“强度”]=强度;
add(guiProperties,“intensity”,0,10).onChange(函数(值){light.intensity=value;})
返回灯;
}
功能设置摄像机位置(摄像机,x,y,z){
//设置摄像机位置
摄像机位置x=x;
camera.position.y=y;
camera.position.z=z;
摄影机。注视(新的三个向量3(0,0,0));
控制台日志(“日志:摄像机位置设置”);
}
函数旋转对象(对象,degreeX=0,degreeY=0,degreeZ=0){
degreeX=degreeX*Math.PI/180;
degreeY=degreeY*Math.PI/180;
degreeZ=degreeZ*Math.PI/180;
对象。旋转度(度);
对象。旋转(度);
对象旋转(degreeZ);
}
var scene=loadScene();

我也有同样的问题。dat.GUI必须用new关键字实例化


var gui=dat.gui();
应该是

var gui=new dat.gui();

这为我解决了问题

<html>
    <head>
        <meta charset=utf-8>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r83/three.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/dat-gui/0.7.2/dat.gui.js"></script>     
    </head>
    <body>
    <div id="scene"></div>

    <script>

        function update(renderer, scene, camera) {
          //Make the renderer render the scene and the camera
          renderer.render(scene, camera);

          //Calls itself each time the function is called upon using recursion
          requestAnimationFrame(function() {
            update(renderer, scene, camera);
          });
        }

        function loadScene() {
          console.log("LOG: Program start");

          //Create dat.gui instance
          var gui = new dat.GUI();

          //Create object for gui's properties
          var guiProperties = {};

          //Create scene
          var scene = new THREE.Scene();
          //Create a fog effect in the scene
          //scene.fog = createFog(0xffffff, 0.2);

          //Create camera
          var camera = new THREE.PerspectiveCamera(
            //Perspective
            45,
            //Ratio
            window.innerWidth / window.innerHeight,
            //Near clipping distance
            1,
            //Far clipping distance
            1000
          );

          //Set the camera position x,y,z
          setCameraPosition(camera, 1, 2, 7);

          //Create a box with width, depth and height
          var box = createBox(1, 1, 1);
          box.position.y = box.geometry.parameters.height / 2;

          //Create a square plane
          var plane = createPlane(4);
          plane.name = "plane-1";
          rotateObject(plane, -90, 0, 0);

          //Create a (point) light source
          var pointLight = createLightSource(1, 1, 2, 2, gui,guiProperties);

          //Create a sphere
          var sphere = createSphere(0.05);

          scene.add(plane);
          scene.add(box);
          scene.add(pointLight);
          pointLight.add(sphere);

          //Create renderer
          var renderer = new THREE.WebGLRenderer();
          //Set renderer size
          renderer.setSize(window.innerWidth * 0.9, window.innerHeight * 0.9);
          renderer.setClearColor("gray");
          //Get element by ID
          document.getElementById("scene").appendChild(renderer.domElement);

          //Update the renderer, scene and camera
          update(renderer, scene, camera);

          return scene;
        }

        function createFog(color, density) {
          return new THREE.FogExp2(color, density);
        }

        function createPlane(size) {
          var object = new THREE.PlaneGeometry(size, size);
          var material = new THREE.MeshPhongMaterial({
            color: "gray",
            side: THREE.DoubleSide
          });

          var mesh = new THREE.Mesh(object, material);

          console.log("LOG: Plane created");
          return mesh;
        }

        function createBox(w, d, h) {
          var object = new THREE.BoxGeometry(w, d, h);
          var material = new THREE.MeshPhongMaterial({
            color: "gray"
          });

          var mesh = new THREE.Mesh(object, material);

          console.log("LOG: Box created");
          return mesh;
          //scene.add(mesh);
        }

        function createSphere(radius) {
          var object = new THREE.SphereGeometry(radius, 24, 24);
          var material = new THREE.MeshBasicMaterial({
            color: "white"
          });

          var mesh = new THREE.Mesh(object, material);

          console.log("LOG: Box created");
          return mesh;
          //scene.add(mesh);
        }

        function createLightSource(intensity, x, y, z, gui,guiProperties) {
          var light = new THREE.PointLight("white", intensity);
          light.position.x = x;
          light.position.y = y;
          light.position.z = z;

          guiProperties["intensity"] = intensity;

          gui.add(guiProperties, "intensity", 0, 10).onChange(function (value){light.intensity = value;  } )

          return light;
        }

        function setCameraPosition(camera, x, y, z) {
          //Set camera position
          camera.position.x = x;
          camera.position.y = y;
          camera.position.z = z;

          camera.lookAt(new THREE.Vector3(0, 0, 0));

          console.log("LOG: Camera position set");
        }

        function rotateObject(object, degreeX = 0, degreeY = 0, degreeZ = 0) {
          degreeX = degreeX * Math.PI / 180;
          degreeY = degreeY * Math.PI / 180;
          degreeZ = degreeZ * Math.PI / 180;

          object.rotateX(degreeX);
          object.rotateY(degreeY);
          object.rotateZ(degreeZ);
        }

        var scene = loadScene();



        </script>
    </body>
</html>