THREE.js代码备份——webgl - materials - cube refraction [balls](以上下左右前后6张图片构成立体场景、透明球体效果)

<!DOCTYPE html>
<html lang="en">
<head>
    <title>three.js webgl - materials - cube refraction [balls]</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
    <style>
        body {
            background:#777;
            padding:0;
            margin:0;
            font-weight: bold;
            overflow:hidden;
        }

        #info {
            position: absolute;
            top: 0px; width: 100%;
            color: #ffffff;
            padding: 5px;
            font-family:Monospace;
            font-size:13px;
            text-align:center;
            z-index:1000;
        }

        a {
            color: #ffffff;
        }

        #oldie a { color:#da0 }
    </style>
</head>

<body>
<div id="info"><a href="http://threejs.org" target="_blank">three.js</a> - webgl cube refraction demo. skybox by <a href="http://www.zfight.com/" target="_blank">Jochum Skoglund</a></div>

<script src="../build/three.js"></script>

<script src="js/Detector.js"></script>

<script>

    if ( ! Detector.webgl ) Detector.addGetWebGLMessage();

    var container;

    var camera, scene, renderer;

    var mesh, lightMesh, geometry;
    var spheres = [];

    var directionalLight, pointLight;
    var zoom=0;
    var mouseX = 0, mouseY = 0;

    var windowHalfX = window.innerWidth / 2;
    var windowHalfY = window.innerHeight / 2;

    document.addEventListener( ‘mousemove‘, onDocumentMouseMove, false );
    document.addEventListener( ‘mousewheel‘, onMouseWheel, false);

    init();
    animate();

    function init() {

        container = document.createElement( ‘div‘ );
        document.body.appendChild( container );

        camera = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 1, 100000 );
        camera.position.z = 3200;

        scene = new THREE.Scene();
        scene.background = new THREE.CubeTextureLoader()
                .setPath( ‘textures/cube/Park3Med/‘ )
                .load( [ ‘px.jpg‘, ‘nx.jpg‘, ‘py.jpg‘, ‘ny.jpg‘, ‘pz.jpg‘, ‘nz.jpg‘ ] );

        var geometry = new THREE.SphereBufferGeometry( 60, 32, 16 );

        var textureCube = new THREE.CubeTextureLoader()
                .setPath( ‘textures/cube/Park3Med/‘ )
                .load( [ ‘px.jpg‘, ‘nx.jpg‘, ‘py.jpg‘, ‘ny.jpg‘, ‘pz.jpg‘, ‘nz.jpg‘ ] );
        textureCube.mapping = THREE.CubeRefractionMapping;

        var material = new THREE.MeshBasicMaterial( { color: 0xffffff, envMap: textureCube, refractionRatio: 0.95 } );

        for ( var i = 0; i < 500; i ++ ) {

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

            mesh.position.x = Math.random() * 10000 - 5000;
            mesh.position.y = Math.random() * 10000 - 5000;
            mesh.position.z = Math.random() * 10000 - 5000;

            mesh.scale.x = mesh.scale.y = mesh.scale.z = Math.random() * 3 + 1;

            scene.add( mesh );

            spheres.push( mesh );

        }

        //

        renderer = new THREE.WebGLRenderer();
        renderer.setPixelRatio( window.devicePixelRatio );
        renderer.setSize( window.innerWidth, window.innerHeight );
        container.appendChild( renderer.domElement );

        //

        window.addEventListener( ‘resize‘, onWindowResize, false );

    }

    function onWindowResize() {

        windowHalfX = window.innerWidth / 2,
                windowHalfY = window.innerHeight / 2,

                camera.aspect = window.innerWidth / window.innerHeight;
        camera.updateProjectionMatrix();

        renderer.setSize( window.innerWidth, window.innerHeight );

    }

    function onDocumentMouseMove(event) {

        mouseX = ( event.clientX - windowHalfX ) * 10;
        mouseY = ( event.clientY - windowHalfY ) * 10;

    }

    function onMouseWheel(event){
        if(event.wheelDelta > 0){ //前滚
           zoom-=100;
        }else
        {
            zoom+=100;
        }
    }

    function animate() {

        requestAnimationFrame( animate );

        render();

    }

    function render() {

        var timer = 0.0001 * Date.now();

        for ( var i = 0, il = spheres.length; i < il; i ++ ) {

            var sphere = spheres[ i ];

            //sphere.position.x = 5000 * Math.cos( timer + i );
          //  sphere.position.x =5000*Math.cos( timer + i );
            sphere.position.y -= 500 *0.01;
            if( sphere.position.y<-5000){
                sphere.position.y=5000;
            }

        }

        camera.position.x += ( -mouseX - camera.position.x ) * .05;
        camera.position.y += (  mouseY - camera.position.y ) * .05;
        camera.position.z+=zoom;
        zoom=0.0;
        camera.lookAt( scene.position );
        renderer.render( scene, camera );

    }

</script>

</body>
</html>
时间: 2024-08-06 16:03:28

THREE.js代码备份——webgl - materials - cube refraction [balls](以上下左右前后6张图片构成立体场景、透明球体效果)的相关文章

THREE.js代码备份——webgl - custom attributes [lines](自定义字体显示、控制字图的各个属性)

<!DOCTYPE html> <html lang="en"> <head> <title>three.js webgl - custom attributes [lines]</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, user-scal

THREE.js代码备份——线框cube、按键、鼠标控制

<!DOCTYPE html> <html lang="en"> <head> <title>three.js canvas - geometry - cube</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, user-scalable=no,

THREE.js代码备份——canvas - lines - colors(希尔伯特曲线3D、用HSL设置线颜色)

<!DOCTYPE html> <html lang="en"> <head> <title>three.js canvas - lines - colors</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, user-scalable=no, m

THREE.js代码备份——canvas_ascii_effect(以AscII码显示图形)

<!DOCTYPE html> <html lang="en"> <head> <title>three.js - ASCII Effect</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, user-scalable=no, minimum-sc

THREE.js代码备份——canvas_lines(随机点、画线)

<!DOCTYPE html> <html lang="en"> <head> <title>three.js canvas - lines - random</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, user-scalable=no, m

js代码备份

<SCRIPT>function togoogle(){fh1=document.getElementById("f1");fh1.action="https://www.google.com/search";th1=document.getElementById("kww");th1.name="q";}function todict(){fh1=document.getElementById("f1&

代码备份 | 博客侧边栏公告(支持HTML代码)(支持JS代码)

博客侧边栏公告(支持HTML代码)(支持JS代码) <div id='btnList'> <a class="ivu-btn ivu-btn-primary" href="https://cn.vuejs.org/v2/api/" target="_blank">Vue</a> <a class="ivu-btn ivu-btn-primary" href="https://

JS 代码调试经验总结(菜鸟必读)

前言:不知不觉写了很多,希望你能耐心看完这篇文章 任何一个编程者都少不了要去调试代码,不管你是高手还是菜鸟,调试程序都是一项必不可少的工作.一般来说调试程序是在编写代码之后或测试期修改Bug 时进行的,往往在调试代码期间更加能够体现出编程者的水平高低以及分析问题的准确度.不少初学者在寻找错误原因时,总是不得要领,花费了大量时间却无法解决一些最终证明是相当简单的Bug. 在长期解答 zTree 相关问题时,也的确发现很多的问题其实不算什么问题,仅仅是编程者不会调试造成的,通过自己日常工作观察,这里

js 代码密码规范系列

在微博上看到一个段子 "老子哪天出任ceo迎娶白富美走上人生巅峰之后,一定要雇两个长腿大熊的妹子.一个帮我想变量名字,一个帮我想git commit的message!" 可以看出 命名方方面面的问题困扰着我这样的人.哈哈哈 函数命名.变量命名等 是频繁困扰我的问题. 函数命名:统一使用动词或者动词+名词形式 ---- fnInit() 如果有内部函数则"_"开头   _fnInit(). 对象方法命名使用fn+对象类名+动词+名词形式   fnAnimateDoRu