javascript - 关于webgl框架Three.js
巴扎黑
巴扎黑 2017-04-11 09:50:58
[JavaScript讨论组]

按照书上的例子,把内容封装到函数中,看不到效果,麻烦大神看看那有问题。

<!DOCTYPE html>
 
<html>
 
    <head>
 
        <meta charset="UTF-8">
 
        <title>the first webgl</title>
 
        <script src="js/three.js"></script>
        <script src="js/RequestAnimationFrame.js"></script>
        <style>
        #container{
            width: 95%;
            height: 80%;
            position: absolute;
        }
        body{
            background-color: lightblue;
        }
        </style>
 
        <script>
            
        var container = document.getElementById('container');
        var renderer;
        function initThree(){
            width = container.clientWidth;
            height = container.clinetHeight;
            renderer = new THREE.WebGLRenderer( {antialias: true} );
            renderer.setSize(width, height);
            container.appendChild(renderer.domElement);
        }
        var camera;
        function initCamera(){
            camera = new THREE.PerspectiveCamera(45, width / height, 1, 4000);
            camera.position.x = 600;
 
                camera.position.y = 0;
 
                camera.position.z = 600;
 
                camera.up.x = 0;
 
                camera.up.y = 1;
 
                camera.up.z = 0;
 
                camera.lookAt({
 
                    x : 0,
 
                    y : 0,
 
                    z : 0
 
                });
        }
        var scene;
        function initScene(){
            scene = new THREE.Scene();
        }
        var light;
        function initLight(){
            light = new THREE.DirectionalLight(0xffffff, 1.5);
            light.position.set(0, 0, 1);
            scene.add(light);
        }
        var cube;
        function initObject(){
            var geometry = new THREE.CubeGeometry(1, 1, 1);
            var material = new THREE.MeshBasicMaterial({color: 0x00ff00});
            var mesh = new THREE.Mesh(geometry, material);
            scene.add(mesh);
        }
        function threeStart(){
            initThree();
            initCamera();
            initScene();
            initLight();
            initObject();
            run();
        }
        function run(){
            requestAnimationFrame(run);
            cube.rotation.x += 0.1;
            cube.rotation.y += 0.1;
            renderer.render(scene, camera);
        }

        </script>
    </head>
 

 
    <body onload="threeStart();">
 
        <p id="container"></p>
 
    </body>
 
</html> 
巴扎黑
巴扎黑

全部回复(3)
PHPz

把container的高宽设成绝对像素试试,感觉你这样写高度是0

ringa_lee

请问是什么书呀?

PHPz

指出几点问题:

1、结构还没加载进来,获取不到container,控制台报错,没看么。。

var container = document.getElementById('container');

2、cube没有赋值啊,你把THREE.Mesh给mesh了,cube啥也没有啊,run函数里cube.rotation 转啥。。这里控制台也报错
3、height = container.clinetHeight; 你确定没写错么? 这里是undefined
4、cube大小为1,camera.position.z为600,你看到的物体会特别小,因为摄像机离物体太远了,想变大就拉近摄像机,物体改大,cube为10,camera.position.z=100,改成这个大小。

预览效果:

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号