• WebGL和ThreeJs学习5--ThreeJS基本功能控件


     

     

    Threejs

     

    201766

    15:06    

    Stats:                                            

            new Stats();性能监视器,性能测试的方法,引入 Stats.js        http://www.hewebgl.com/article/getarticle/58                                                             

    stats.setMode(1);参数为0的时候,表示显示的是FPS界面,参数为1的时候,表示显示的是MS界面。Statsbeginend 函数本质上是在统计代码执行的时间和帧数,然后用公式fps=帧数/时间,就能够得到FPSMS表示渲染一帧需要的毫秒数,这个数字是越小越好。再次点击又可以回到FPS视图中。                                        

    stats.domElement.style.position = 'absolute';statsdomElement表示绘制的目的地(DOM                                                                        

    stats.domElement.style.left = '0px'                                                                                        

    document.body.appendChild( stats.domElement );                                                                                        

    stats.begin();代码前调用begin,代码执行后调用end(),能够统计出这段代码执行的平均帧数。                                                                        

    stats.end();                                                                                        

    stats.update();                                                                                        

    renderer :

           new THREE.WebGLRenderer();声明渲染器renderer

      new THREE.WebGLDeferredRenderer();处理复杂光的延迟渲染器

      new THREE.CanvasRenderer();

    new THREE.WebGLDeferredRenderer({

                window.innerWidth,

                height: window.innerHeight,

                scale: 1,

                antialias: true,

                tonemapping: THREE.FilmicOperator,

                brightness: 2.5

            });

                                                                            

    renderer.setSize(width, height);设置渲染器的大小为窗口的内宽度,也就是内容区的宽度  .                                                                      

    renderer.setClearColor(0xFFFFFF,1.0);                                                                                       

    renderer.shadowMapEnabled = true;允许阴影射                                                                

    renderer.render( scene, camera, renderTarget, forceClear )renderTarget:渲染的目标,默认是渲染到前面定义的render变量中forceClear:每次绘制之前都将画布的内容给清除,即使自动清除标志autoClearfalse,也会清除。                                                             

    requestAnimationFrame(render);循环渲染  .                                                                      

    camera :           

    new THREE.PerspectiveCamera( fov, aspect, near, far )camera.fov=45,类似于物体和camera的距离,值越小物体越近就越大,aspect实际窗口的纵横比,near不要设置为负值        声明透视相机        http://www.hewebgl.com/article/getarticle/59                                                                

    new THREE.OrthographicCamera( left, right, top, bottom, near, far ),声明正交相机,定义一个视景体                                                                        

    camera.position= new THREE.Vector3(0,0,0);        camera.position.x=0        cameraxyz坐标位置                                                                        

    camera.up = new THREE.Vector3(0,1,0);        camera.up.x = 0;camera的坐标系,y轴向上,即右手坐标系                                                                        

    camera.lookAt({x : 0, y : 0, z : 0 });或者camera.lookAt(scene.position);camera面向的位置                                                                        

    camera.updateProjectionMatrix();                         

    geometry:                                                       

            new THREE.Geometry();        声明几何物体.                                                                        

    new THREE.PlaneGeometry( 500, 300, 1, 1 );平面的四边形        

    new THREE.CircleGeometry(radius,segments,thetastarts,thetalength)平面圆

    new THREE.RingGeometry

    new THREE.ShapeGeometry()平面塑形                

    new THREE.Shape();           learning-threejs-masterchapter-05

                    

    THREE.BoxGeometry = function ( width, height, depth, widthSegments, heightSegments, depthSegments )         widthSegments:宽度分段份数,heightSegments:高度分段份数,depthSegments:长度分段份数                                                                                

    new THREE.SphereGeometry(4, 20, 20);                                                                                

    new THREE.CylinderGeometry(radiusTop, radiusBottom, height, radiusSegments, heightSegments, openEnded, thetaStart, thetaLength)声明圆柱体        

    new THREE.ConvexGeometry().凸面体

    new THREE.IcosahedronGeometry()正20面体

    new THREE.DodecahedronGeometry()

    new THREE.LatheGeometry()扫描体

    new THREE.OctahedronGeometry()正八面体

    new THREE.ParametricGeometry(THREE.ParametricGeometries.mobius3d, 20, 10)

    new THREE.TorusKnotGeometry()环面纽结,可以画万花筒或者花

    new THREE.TetrahedronGeometry()正四面体,锥形

    new THREE.TorusGeometry(3, 1, 10, 10)        圆环        

    new THREE.TubeGeometry(3, 1, 10, 10)        管状几何体

    new THREE.ExtrudeGeometry(3, 1, 10, 10)        拉伸几何体        

    new THREE.ParamtericGeometry(3, 1, 10, 10)        创建几何体        

                                            

    new THREE.CubeGeometry(width, height, depth, segmentsWidth, segmentsHeight, segmentsDepth, materials, sides)

    new THREETextGeometry(3, 1, 10, 10)        文字几何体

              geometry.clone()

              geometry.vertices=vertices;

              geometry.faces=faces;        

              geometry.computeCentroids();

              geometry.mergeVertices();                                                                          

    geometry.vertices[0].uv = new THREE.Vector2(0,0);                                                                                        

    geometry.receiveShadow = true;接受并且显示阴影                                                                        

    geometry.castShadow = true;投射阴影                                                                        

    geometry.vertices.push(new THREE.Vector3(  100, 0, -100 )),在几何物体中加入一个点,几何体里面有一个vertices变量,可以用来存放点。

    geometry.geometry.parameters.height;某物体的参数,高度                                        

    geometry.colors.pushcolor1,color2        

    geometry.geometry.parameters.widthSegments;        

    geometry.geometry.parameters.heightSegments;

    color : 

                                                                            

          new THREE.Color( 0x444444 )                声明颜色变量        

    material :

    new THREE.MeshLambertMaterial( { color:0xFFFFFF} );        兰伯特材质。在没有light的情况下,任何颜色的material都是黑色的。Lambert材质表面会在所有方向上均匀地散射灯光,这就会使颜色看上去比较均匀。Lambert材质会受环境光的影响,呈现环境光的颜色,与材质本身颜色关系不大。物体在环境光影响下,最终表现出来的颜色的向量值,应该是环境光颜色向量和物体本身颜色向量的向量积。在渲染程序中,它是表面各可视属性的结合,这些可视属性是指表面的色彩、纹理、光滑度、透明度、反射率、折射率、发光度等。                                                        

    new THREE.LineBasicMaterial( parameters )Parameters是一个定义材质外观的对象,它包含多个属性来定义材质,这些属性是:Color:线条的颜色,用16进制来表示,默认的颜色是白色。Linewidth:线条的宽度,默认时候1个单位宽度。Linecap:线条两端的外观,默认是圆角端点,当线条较粗的时候才看得出效果,如果线条很细,那么几乎看不出效果。Linejoin:两个线条的连接点处的外观,默认是“round”,表示圆角。VertexColors:定义线条材质是否使用顶点颜色,这是一个boolean值。意思是,线条各部分的颜色会根据顶点的颜色来进行插值。Fog:定义材质的颜色是否受全局雾效的影响。        定义一种线条的材质                http://www.hewebgl.com/article/getarticle/56                

    new THREE.LineDashedMaterial( parameters )                                        

    new THREE.MeshLambertMaterial({map: textureGrass});

    new THREE.MeshLambertMaterial({opacity: 0.6, color: 0x44ff44, transparent: true}),                                                                        new THREE.MeshFaceMaterial(mats);        

     new THREE.MeshPhongMaterial({color: 0xffffff, specular: 0xffffff, shininess: 200});

     

    var material = new THREE.MeshToonMaterial( {
                                    map: imgTexture,
                                    bumpMap: imgTexture,
                                    bumpScale: bumpScale,
                                    color: diffuseColor,
                                    specular: specularColor,
                                    reflectivity: beta,
                                    shininess: specularShininess,
                                    envMap: alphaIndex % 2 === 0 ? null : reflectionCube
                                } );

     

    meshMaterial.opacity

    meshMaterial.visible

    meshMaterial.ambient = new THREE.Color

    meshMaterial.emissive = new THREE.Color

    meshMaterial.specular = new THREE.Color

    meshMaterial.shininess

    meshMaterial.side = THREE.FrontSide;

    meshMaterial.needsUpdate

     meshMaterial.color.setStyle

    meshMaterial.metal = e;

    meshMaterial.wrapAround = e;

    meshMaterial.wrapRGB.x = e;

                                                                                            

    mesh :       

    new THREE.Mesh( geometry,material);该基础材质不会对场景中的光源产生反应                                                                        

    mesh.position(x,y,z)meshxyz坐标位置

    THREE.SceneUtils.createMultiMaterialObject(ground,

                    [new THREE.MeshBasicMaterial({wireframe: true, overdraw: true, color: 000000}),

                        new THREE.MeshBasicMaterial({color: 0x00ff00, transparent: true, opacity: 0.5}

                        )

                    ]);支持mesh使用多种材质

    Mesh.geometry.vertices=

    Mesh.geometry.verticesNeedUpdate=

    Mesh.geometry.computeFaceNormals()        

    Mesh.translateX(number);移动                                                                

     

    light        

    new THREE.Light ( hex )        hex是一个16进制的颜色值 http://www.hewebgl.com/article/getarticle/60                                                                

    new THREE.THREE.SpotLight( hex, intensity, distance, angle, exponent,visible )        distance光源可以照多远,,Angle:聚光灯着色的角度,用弧度作为单位,这个角度是和光源的方向形成的角度。exponent:光源模型中,衰减的一个参数,越大衰减约快。聚光灯                                                                        

    new THREE.AreaLight()        ,区域光                                                                        

    new THREE.DirectionaLight(hex, intensity ),方向光,一组没有衰减的平行的光线,类似太阳光的效果。                                                                        

    new THREE.AmbientLight( hex )        hex是一个16进制的颜色值,环境光        环境光并不在乎物体材质的 color 属性,而是 ambient 属性

    new THREE.PointLight( color, intensity, distance )Color:光的颜色Intensity:光的强度,默认是1.0,就是说是100%强度的灯光,distance:光的距离,从光源所在的位置,经过distance这段距离之后,光的强度将从Intensity衰减为0。 默认情况下,这个值为0.0,表示光源强度不衰减。        点光源                

    New HemisphereLightgroudColor,color,intensity)半球光

    New LensFlaretexture,size,distance,blending,color)镜头炫光                                        

    light.position.set(0, 0,300);光源的xyz坐标                                                                        

    light.castShadow = true;投射阴影        

    light.visible = !e;        移除该光源

    Light.color=;可以改变光源的颜色                                                        

     

    Three.js 中,能形成阴影的光源只有 THREE.DirectionalLight THREE.SpotLight ;而相对地,能表现阴影效果的材质只有 THREE.LambertMaterial THREE.PhongMaterial 因而在设置光源和材质的时候,一定要注意这一点。

     

    Scene:        

    new THREE.Scene();声明一个场景    

    scene.background = new THREE.Color().setHSL( 0.51, 0.6, 0.6 );

     

    scene.background = new THREE.CubeTextureLoader()//天空盒1
                        .setPath( 'textures/cube/Park3Med/' )
                        .load( [ 'px.jpg', 'nx.jpg', 'py.jpg', 'ny.jpg', 'pz.jpg', 'nz.jpg' ] );                                                             

     

    var path = "textures/cube/Park2/";//天空盒2
                    var format = '.jpg';
                    var urls = [
                            path + 'posx' + format, path + 'negx' + format,
                            path + 'posy' + format, path + 'negy' + format,
                            path + 'posz' + format, path + 'negz' + format
                        ];
                    var textureCube = new THREE.CubeTextureLoader().load( urls );
                    textureCube.format = THREE.RGBFormat;
                    scene = new THREE.Scene();
                    scene.background = textureCube;

     

     

    scene.add(mesh);                                                                                        

    scene.add(light);

    scene.remove(lastObject);溢出某个物体

    scene.children.length;场景内物体的个数        

    scene.traversefunction,传递过来的function将在每一个object上面执行一次,也可以使用for循环

    Scene.getChildByName(name)        

    Scene.overrideMaterial=new        THREE.MeshBasicMaterial({map:texture});场景中全部物体使用该材质        

    Scene.fog=new THREE.Fog();添加雾化效果                                                        

     

    TWEEN :       

    new TWEEN.Tween( mesh.position),动画引擎实现动画效果,声明        http://www.hewebgl.com/article/getarticle/58                                                                

    new TWEEN.Tween( mesh.position)  .to( { x: -400 }, 3000 ).repeat( Infinity ).start();TWEEN.Tween的构造函数接受的是要改变属性的对象,这里传入的是mesh的位置。Tween的任何一个函数返回的都是自身,所以可以用串联的方式直接调用各个函数。to函数,接受两个参数,第一个参数是一个集合,里面存放的键值对,键x表示mesh.positionx属性,值-400表示,动画结束的时候需要移动到的位置。第二个参数,是完成动画需要的时间,这里是3000msrepeat( Infinity )表示重复无穷次,也可以接受一个整形数值,例如5次。                                                                         

    TWEEN.update();在渲染函数中去不断的更新Tween,这样才能够让mesh.position.x移动位置                                                                        

     

     

    line :       

    new THREE.Line( geometry, material, THREE.LinePieces );第一个参数是几何体geometry,里面包含了2个顶点和顶点的颜色。第二个参数是线条的材质,或者是线条的属性,表示线条以哪种方式取色。第三个参数是一组点的连接方式                                                                                

     

     

    group:     

    new THREE.Group();group.add(sphere); group.add(cube);

                                            

    texture  :

          THREE.Texture( image, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy )        "Image:这是一个图片类型,基本上它有ImageUtils来加载,如下代码

    var image = THREE.ImageUtils.loadTexture(url);

    Mapping:是一个THREE.UVMapping()类型,它表示的是纹理坐标。

    wrapS:表示x轴的纹理的回环方式,就是当纹理的宽度小于需要贴图的平面的宽度的时候,平面剩下的部分应该以何种方式贴图的问题。

    wrapT:表示y轴的纹理回环方式。 magFilterminFilter表示过滤的方式,这是OpenGL的基本概念,不设置的时候,它会取默认值。

    format:表示加载的图片的格式,这个参数可以取值THREE.RGBAFormatRGBFormat等。THREE.RGBAFormat表示每个像素点要使用四个分量表示,分别是红、绿、蓝、透明来表示。RGBFormat则不使用透明,也就是说纹理不会有透明的效果。

    type:表示存储纹理的内存的每一个字节的格式,是有符号,还是没有符号,是整形,还是浮点型。不过这里默认是无符号型(THREE.UnsignedByteType)。

    anisotropy:各向异性过滤。使用各向异性过滤能够使纹理的效果更好,但是会消耗更多内存、CPUGPU时间。"                                                        

    texture.wrapS = THREE.RepeatWrapping;

            texture.wrapT = THREE.RepeatWrapping;

            texture.repeat.set(4, 4);

    texture.needsUpdate = true;        

    grid:       

     new THREE.GridHelper( 1000, 50 );边长为1000,大网格中有小网格,小网格的边长是50.                                                                        

    grid.setColors( 0x0000ff, 0x808080 );网格线的颜色一头是0x0000ff,另一头是0x808080。线段中间的颜色取这两个颜色的插值颜色。                                                                        

     

    Rotation  :      

               new THREE.Euler();旋转中心在立方体的中心                                                                                

    mesh.rotateX(0.01);                                                                                        

    mesh.rotateY(0.01);                                                                                        

    mesh.rotateZ(0.01);                                                                                        

     

    UglifyJS:                压缩工具        

    Helper: 

     

    坐标轴AxisHelper      :  new THREE.AxisHelper(20);  scene.add(axes);        

    法向量ArrowHelper      

    new THREE.ArrowHelper(

                        face.normal,

                        centroid,

                        2,

                        0x3333FF,

                        0.5,

                        0.5);

                cube.add(arrow);

     

    datGUI:

      new dat.GUI() ;用来添加用户界面

              gui.add(controls, 'rotationSpeed', 0, 0.5);controls是控制的变量,rotationspeed是属性之一,0--0.5是取值变化范围        

            

    var controls = new function () {

                this.rotationSpeed = 0.02;

                this.bouncingSpeed = 0.03;

            };

    var gui = new dat.GUI();

              gui.add(controlsFunction, 'name', 0, 0.5);//取值范围

           gui.add(controls, 'numberOfObjects').listen();监听并显示

    f1 = gui.addFolder('Vertices ' + (i + 1));

                f1.add(controlPoints[i], 'x', -10, 10);

     

    gui.add(controls, 'disableSpotlight').onChange(function (e) {

                spotLight.visible = !e;

            });

     

     

     

    ASCII文本画 

    new THREE.AsciiEffect(renderer);

                         effect.setSize(width,height)

                          $("div").append(effect.domElement)

         effect.render(scene,renderer)

                                                                            

    普通雾化效果Fog    

    new THREE.Fog(color,near,far)            

                 new THREE.FogExp2(color,浓度)            

        

    粒子系统:

    new THREE.SpriteMaterial();

    new THREE.Sprite(material);

    new THREE.SpriteCanvasMaterial()

    new THREE.ParticleBasicMaterial();

    new THREE.Particle(material);

    new THREE.PointCloudMaterial({size: 4, vertexColors: true, color: 0xffffff});

    new THREE.PointCloud(geom, material);

            

    轨道控件

    控制object的方向,能让其随着鼠标的方向转动

    <script type="text/javascript" src="../libs/OrbitControls.js"></script>

    声明:new THREE.OrbitControls(camera);render的时候,orbit.update()即可;

    飞行控件:

    new THREE.FlyControls()

    翻滚控件:

    new THREE.RollControls()

     

    轨迹球控件:

     <script type="text/javascript" src="../libs/TrackballControls.js"></script>

    new THREE.TrackballControls

    路径控件

    new THREE.PathControls()

    文件系统:

    new THREE.FileLoader();        

     

    定义投影仪r85版本里面貌似被淘汰了)

    <script type="text/javascript" src="../libs/Projector.js"></script>

    new THREE.Projector();

     

    在某个position位置向场景中发射一束光线

    new THREE.Raycaster()

     

    时钟控件:

    new THREE.Clock();可以精确的计算出上次调用后经过的时间

            

    骨骼动画        

    new THREE.SkinnedMesh(geometry,mat).bones[];带有蒙皮的网格对象

    THREE.AnimationHandler.addgeometry.animation)注册动画

    newTHREE.Animation(mesh, model.animation);定义动画

    newTHREE.SkeletonHelper(mesh); SkeletonHelper可以用线显示出骨架,帮助我们调试骨架,可有可无 

     

    PosTProcessing

     

    var clearPass = new THREE.ClearPass();
    var clearMaskPass = new THREE.ClearMaskPass();
    var maskPass1 = new THREE.MaskPass( scene1, camera );
    var outputPass = new THREE.ShaderPass( THREE.CopyShader );

     

     

     THREEJS基本功能一览表

    Camera

    OrthographicCamera

    PerspectiveCamera

     

    Core(核心对象)

    BufferGeometry

    Clock(用来记录时间)

    EventDispatcher

    Face3

    Face4

    Geometry

    Object3D

    Projector

    Raycaster(计算鼠标拾取物体时很有用的对象)

     

    Lights(光照)

    Light

    AmbientLight

    AreaLight

    DirectionalLight

    HemisphereLight

    PointLight

    SpotLight

    Loaders(加载器,用来加载特定文件)

     

    Loader

    BinaryLoader

    GeometryLoader

    ImageLoader

    JSONLoader

    LoadingMonitor

    SceneLoader

    TextureLoader

     

    Materials(材质,控制物体的颜色、纹理等)

    Material

    LineBasicMaterial

    LineDashedMaterial

    MeshBasicMaterial

    MeshDepthMaterial

    MeshFaceMaterial

    MeshLambertMaterial

    MeshNormalMaterial

    MeshPhongMaterial

    PointCloudMaterialParticleBasicMaterial

    SpriteCanvasMaterialParticleCanvasMaterial

    ParticleDOMMaterial

    ShaderMaterial

    SpriteMaterial

    MeshStandardMaterial

    MeshPhysicalMaterial

     

     

    Math(和数学相关的对象)

    Box2

    Box3

    Color

    Frustum

    Math

    Matrix3

    Matrix4

    Plane

    Quaternion

    Ray

    Sphere

    Spline

    Triangle

    Vector2

    Vector3

    Vector4

     

    Objects(物体)

    Bone

    Line

    LOD

    Mesh(网格,最常用的物体)

    MorphAnimMesh

    PointCloudParticleSystem

    Ribbon

    SkinnedMesh

    Sprite

     

    Renderers(渲染器,可以渲染到不同对象上)

    CanvasRenderer

    WebGLRenderer(使用 WebGL 渲染,这是本书中最常用的方式)

    WebGLDefferedRenderer

    WebGLRenderTarget

    WebGLRenderTargetCube

    WebGLShaders(着色器,在最后一章作介绍)

     

    Renderers / Renderables

    RenderableFace3

    RenderableFace4

    RenderableLine

    RenderableObject

    RenderableParticle

    RenderableVertex

     

    Scenes(场景)

    Fog

    FogExp2

    Scene

     

    Textures(纹理)

    CompressedTexture

    DataTexture

    Texture

     

    Extras

    FontUtils

    GeometryUtils

    ImageUtils

    SceneUtils

     

    Extras / Animation

    Animation

    AnimationHandler

    AnimationMorphTarget

    KeyFrameAnimation

     

    Extras / Cameras

    CombinedCamera

    CubeCamera

     

    Extras / Core

    Curve

    CurvePath

    Gyroscope

    Path

    Shape

     

    Extras / Geometries(几何形状)

    CircleGeometry

    ConvexGeometry

    CubeGeometry

    CylinderGeometry

    ExtrudeGeometry

    IcosahedronGeometry

    LatheGeometry

    OctahedronGeometry

    ParametricGeometry

    PlaneGeometry

    PolyhedronGeometry

    ShapeGeometry

    SphereGeometry

    TetrahedronGeometry

    TextGeometry

    TorusGeometry

    TorusKnotGeometry

    TubeGeometry

     

    Extras / Helpers

    ArrowHelper

    AxisHelper

    BoxHelper

    CameraHelper

    DirectionalLightHelper

    FaceNormalHelper

    GridHelper

    HemisphereLightHelper

    PointLightHelper

    PolarGridHelper

    RectAreaLightHelper

    SkeletonHelper

    SpotLightHelper

    VertexNormalsHelper

     

    Extras / Objects

    ImmediateRenderObject

    LensFlare

    MorphBlendMesh

     

    Extras / Renderers / Plugins

    DepthPassPlugin

    LensFlarePlugin

    ShadowMapPlugin

    SpritePlugin

     

    Extras / Shaders

    ShaderFlares

    ShaderSprite

  • 相关阅读:
    (项目)在线教育平台(四)
    (项目)在线教育平台(三)
    (项目)在线教育平台(二)
    (项目)在线教育平台(一)
    (面试题)python面试题集锦-附答案
    (python)面向对象
    (python)数据结构---元组
    myEclipse 配置tomcat清除缓存
    Jquery浅克隆与深克隆
    列表上下无缝滚动
  • 原文地址:https://www.cnblogs.com/catherinezyr/p/7047465.html
Copyright © 2020-2023  润新知