用webgl画个太阳系(线框图)

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Three框架</title>
        <script src="three.min.js"></script>
        <style type="text/css">
           body {
                color: #808080;
                font-family:Monospace;
                font-size:13px;
                text-align:center;

                background-color: #000;
                margin: 0px;
                overflow: hidden;
            }

            #info {
                position: absolute;
                top: 0px; width: 100%;
                padding: 5px;
                z-index: 100;
            }

            a {

                color: #0080ff;
            }

            b { color: lightgreen }

            #stats { position: absolute; top:0; left: 0 }
            #stats #fps { background: transparent !important }
            #stats #fps #fpsText { color: #777 !important }
            #stats #fps #fpsGraph { display: none }

        </style>
        <script>
            var T = THREE;
            var SCREEN_WIDTH = window.innerWidth;
            var SCREEN_HEIGHT = window.innerHeight;
            var container;
            var renderer;
            var scene;
            var camera;
            var light;
            var cube;

            var _earth = 1;

            //1300000
            var sun = {
                r : _earth * 2
            }

            //0.056
            var shui = {
                r: _earth * 0.1,
                s: 87
            }

            //0.86
            var jin = {
                r: _earth * 0.2,
                s: 224
            }
            var earth = {
                r: _earth * 1,
                s: 365
            }

            //0.15
            var huo = {
                r: _earth * 1,
                s: 678
            }

            //1330
            var mu = {
                r: _earth * 1.5,
                s: 365 * 11
            }

            //745
            var tu = {
                r: _earth * 1.1,
                s: 365 * 29
            }
            //65
            var tian = {
                r: _earth * 0.65,
                s: 365 * 84
            }
            //60
            var hai = {
                r: _earth * 0.6,
                s: 365 * 164
            }

            var pArr = [sun,shui,jin,earth,huo,mu,tu,tian,hai];
            function initThree() {
               container = document.getElementById(‘canvas-frame‘);
               renderer = new T.WebGLRenderer({antialias: true});
               renderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
               renderer.autoClear = false;
               container.appendChild(renderer.domElement);
            }

            function initCamera() {
                camera = new T.PerspectiveCamera(50, SCREEN_WIDTH/SCREEN_HEIGHT,1,1000000000);
                camera.position.z = sun.r * 30;
                camera.position.y = sun.r * 5;
                cameraRig = new THREE.Object3D();
                cameraRig.add(camera)
                scene.add(cameraRig);
            }

            function initScene() {
               scene = new T.Scene();
            }

            function initLight() {

            }

            // A begin
            var meshArr = [];
            function initObject() {
                var geometry = new T.Geometry();
                for(var i =0;i<1000;i++){
                    var vertex = new T.Vector3();
                    vertex.x = T.Math.randFloatSpread(2000);
                    vertex.y = T.Math.randFloatSpread(2000);
                    vertex.z = T.Math.randFloatSpread(2000);
                    geometry.vertices.push(vertex);
                }
                var particles = new THREE.PointCloud( geometry, new THREE.PointCloudMaterial( { color: 0x888888 } ) );
                scene.add( particles );

                var l=0;
                for(var i=0;i<pArr.length;i++){
                    var color ;
                    var p;
                    if(i == 0){
                        color = 0xFF0000;
                    }else{
                        color = 0xFFFFFF;
                    }

                    p = new T.Mesh(new T.SphereGeometry(pArr[i].r,16,8), new THREE.MeshBasicMaterial( { color: color, wireframe: true } ));

                    if(i != 0){
                        p.position.x = l + pArr[i].r;
                    }
                    pArr[i].l = l+= pArr[i].r * 2;
                    scene.add(p);
                    meshArr.push(p);
                }

            }
        // A end

            function threeStart() {
                initThree();
                initScene();
                initCamera();
                initLight();
                initObject();
                renderer.clear();
                renderer.render(scene, camera);

                animate();
            }

            function render(){
                renderer.clear();
                var now = Date.now() ;
                for(var i =0;i<meshArr.length;i++){
                    if(i == 0){
                    meshArr[i].position.x = 0;
                    meshArr[i].position.y = 0;
                    meshArr[i].position.z = 0;
                     continue;
                    }
                    var r = now /pArr[i].s;
                    console.log(r);
                    meshArr[i].position.x = Math.cos(r) * pArr[i].l;
                    meshArr[i].position.y = Math.sin(r) * pArr[i].l;
                    meshArr[i].position.z = Math.sin( r ) * pArr[i].l;
                }

                camera.position.x = sun.r * 2;
                camera.position.y = - sun.r;
                camera.position.z = sun.r * 20;
                cameraRig.lookAt(meshArr[0].position);
                renderer.render( scene, camera );
            }

            function animate() {

                requestAnimationFrame( animate );

                render();
            }

        </script>
    </head>

    <body >
        <div id="canvas-frame"></div>
    </body>
</html>

用webgl画个太阳系(线框图),布布扣,bubuko.com

时间: 2024-12-13 02:48:54

用webgl画个太阳系(线框图)的相关文章

【设计】线框图、原型和视觉稿的区别

在平时我们会遇到线框图.原型.视觉稿等.高保真.低保真.PRD.UI.贴图等不同的概念,那么他们究竟有哪些细节方面的差异呢? 本文做一些简单的分析和说明,如下: ================================================== 本文介绍了线框图 (Wireframe).原型 (Prototype) 和视觉稿 (Mockup) 它们三者之间严谨的功能区别. 对于很多搞信息技术的朋友们(非设计师)在交付设计时,就混淆了这几个词汇,认为它们都代表同一样东西:表达自己

十个完全免费的网页原型(线框图)工具

网页的线框图是非常直观.但是也没什么技术上难点的东西.只需要你大概描出页面上需要的一些元素,比如头部.导航.页脚等等,最多再就是一些交互.内容区域什么的.但这对于任何网络应用的开发都是非常重要的.当然有很多种方法可以做这件事情,最简单的就是拿起纸和笔,但是在这篇文章中,我们要介绍的是一些非常高效好用的在线原型工具,并且他们完全免费. Lumzy 快速原型工具 使用Lumzy你可以为你的应用创建原型图,还能添加一些交互事件.有了它,你可以创建弹出框,交互的页面导航,添加外部链接等等.他对于团队协作

全面总结:MATLAB如何画出漂亮的图

在绘图命令中应该如何确定横坐标和纵坐标的标度尺寸(自己定范围) 如何在一个坐标中绘制多条曲线,并用不同的颜色区别. 希望得到答案,谢谢!!!!!!!!!!! help plot help axis axis ('xlabel','ylabel') a1=plot(); hlod on a2=plot(); legend([a1 a2],'图1名',‘图2名') hold off 还可以更多 x1=-pi:pi/12:pi; x2=-pi:pi/12:pi; y1=sin(x1); y2=cos(

achartengine画出动态折线图

achartengine画出动态折线图的效果最近有个项目需要用到实时曲线图,我也上网搜索了一下,最后还是选择使用achartengine这个现成的东西,毕竟自己再canvas一下实在是太麻烦,而且项目时间上也不允许,虽然这个画图引擎比较简单,不过勉强够用了. 下一步问题就来了,我仓促上手,只会画静态图,就是事先定义好几个坐标,然后activity载入的时候折线就已经画好了,可是我的项目要求我每隔一秒种都要把新搜集到的数据添加到图表中去,类似于windows中那个任务管理器里的性能统计图,网上搜来

出色的移动线框图设计工具

最近在看安卓用户界面设计方面的书,想了解一些设计线框图工具.以前没用过,这几天试试,好不好用试过才知道 1. Framer------现代原型制造工具 2. Indigo Studio------快速交互的原型制造 3. Mockingbird------快速线框图设计 4. Simulify------可分享的交互式线框图,实体模型,以及原型 5. Solidify------创作可点击的原型 6. Lovely Charts------制图App应用,提供桌面和移动两个应用版本 7. For

如何用Visio画数据库实体关系图

在百度经验中浏览:http://jingyan.baidu.com/article/e4511cf3374a862b855eaf58.html 在设计数据库表结构时,通常都是先画数据库实体关系图,这样在讨论设计的是否合理时,可以很容易看懂数据表之间的关系. 打开Microsoft Office Visio 2007,左侧的模板类别中选择"软件和数据库",双击右侧的"数据库模型图". 调整显示比例 添加实体:鼠标指针移动到实体上,按下鼠标左键不要松开,移动鼠标到右侧的

【辅助工具】20款优秀的移动产品原型和线框图设计工具(二)

接前一篇:[辅助工具]20款优秀的移动产品原型和线框图设计工具(一):http://www.cnblogs.com/haochuang/p/3997140.html 11.WireframeSketcher WireframeSketcher是一款强大的.灵活的线框图和原型快速创作工具,适用于桌面app和移动app开发者.WireframeSketcher可以作为单独的app,也可作为一个Eclipse 插件. WireframeSketcher 还是一款简单的带有手绘风格的创作工具,这样你就不

在EA中将画出的ER图转换成SQL脚本

在进行数据库设计的时候,想着正好安装着EA软件呢,看能不能用EA画ER模型.结果发现不仅能画,而且还能进行整套数据库设计(生成SQL脚本). 下面以机房收费系统用户--学生为例.学生可以查看余额,可以查看上机记录,可以查看上机状态,可以查看充值记录,可以修改密码.步骤如下: (1)建立ER图之前,首先在EA中应选择使用哪种数据库.如图所示: (2)画学生用户的ER模型图,如图所示: (3)转换成数据模型图,选中所有的实体和属性名,右击,点击转换出现如图: (4)选择ERD to Data Mod

为快速设计绞尽脑汁?5款快速线框图工具为你雪中送炭

说起线框图工具,你脑海中浮现的是什么呢?老字号Axure RP?还是设计新宠Mockplus?如今,形形色色的线框图工具可以说是唾手可得,当然,这是一件好事,但是另一方面呢,过多的选择也的确容易造成设计师的选择困难.尤其是现在的行业形势,快速的产品迭代和开发节奏,越来越少的时间成本,快速设计的需求与日俱增.一些过于精细的设计工具其实并不适应当今的设计趋势.这里,我精选出了5款专注于快速设计的线框图工具,能帮助你实现真正意义上的快速设计. 1. Wireframe CC 一款最轻量的框线图工具,线