四边形的顶点着色

作者:桑榆
QQ:934440653
有问题,评论留言,或qq联系

案例效果

四边形的只给顶点着色,渐变效果是计算机自己的插值运算产生的效果。
在这里插入图片描述
在这里插入图片描述
vertices,数组中的四个顶点,数组下标索引与案例效果图的标注一致。
四边形由两个三角面组成,分别为索引0,1,2和索引2,3,4。
下图为四边形其中一个面,face[0]的a,b,c索引对应着vertices的下标。
在这里插入图片描述
vertexColors,未给顶点赋上颜色是,数组为空。
给两个三角面的顶点分别赋顶点颜色。

 var color1 = new THREE.Color(0x0090F);
            var color2 = new THREE.Color(0x000F0);
            var color3 = new THREE.Color(0x20F0FF);

            for(var i = 0 ; i < geometry.faces.length ; i++){  
                    var face  = geometry.faces[i]; //拿到四边形的两个面
                    face.vertexColors[0] = color1; //每个面由三个点组成,给三个点附上顶点颜色
                    face.vertexColors[1] = color2;
                    face.vertexColors[2] = color3;
            }

给材质的着色方式

1.属性

a. vertexColors:THREE.NoColors, 没有颜色
b. vertexColors:THREE.FaceColors, 面着色
c. vertexColors:THREE.VertexColors, 顶点着色的方式

2.

//创建四边形
        var geometry;
        function initObject(){
            geometry = new THREE.PlaneGeometry(100,100);
            var material = new THREE.MeshBasicMaterial({vertexColors:THREE.VertexColors,}); //vertexColors 试用顶点着色

            var color1 = new THREE.Color(0x0090F);
            var color2 = new THREE.Color(0x000F0);
            var color3 = new THREE.Color(0x20F0FF);

            for(var i = 0 ; i < geometry.faces.length ; i++){  
                    var face  = geometry.faces[i]; //拿到四边形的两个面
                    face.vertexColors[0] = color1; //每个面由三个点组成,给三个点附上顶点颜色
                    face.vertexColors[1] = color2;
                    face.vertexColors[2] = color3;
            }

            var object = new THREE.Mesh(geometry,material);
            object.position.set(0,0,0);
            scene.add(object);
        }

3.完整代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>四边形的顶点着色</title>
    <script src="../buildJs//build/three105.js"></script>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        body,html{
            width: 100%;
            height: 100%;
        }
        #webGL{
            width: 100%;
            height: 100%;
        }
    </style>
</head>
<body>
    <div id="webGL"></div>

    <script>
        var scene,camera,renderer;
        var ambientLight,directionalLight;
        var domWidth, domHeight;

        //创建场景
        function initScene(){
            scene = new THREE.Scene();
            scene.background = new THREE.Color(0xcfcfcf);
        }

        //创建相机
        function initCamera(){
            camera = new THREE.PerspectiveCamera(45 ,domWidth / domHeight ,1,1000);
            camera.position.set(0,0,500);
            camera.lookAt(new THREE.Vector3(0,0,0));
            scene.add(camera);
        }

        //创建灯光
        function initLight(){
            ambientLight = new THREE.AmbientLight(0x404040 );
            scene.add(ambientLight);

            directionalLight = new THREE.DirectionalLight(0xffffff,0.8);
            directionalLight.position.set(-200,300,200);
            directionalLight.target.position.set(0, 60, 0)
            directionalLight.target.updateMatrixWorld();
            scene.add(directionalLight);
        }

        //创建渲染器
        function initRender(){
            console.log("dom::",document.getElementById('webGL'))
            domWidth = document.getElementById('webGL').clientWidth;
            domHeight = document.getElementById('webGL').clientHeight;

            renderer = new THREE.WebGLRenderer({
                antialias:true
            });

            renderer.setSize(domWidth,domHeight); 
            renderer.setPixelRatio(window.devicePixelRatio); //设置canvas的像素比为当前设备的屏幕像素比,避免高分屏下模糊

            document.getElementById('webGL').appendChild(renderer.domElement);

            renderer.setClearColor(0xFFFFFF,1.0);
        }

        //循环渲染
        function animate(){  
            renderer.render(scene, camera);
            requestAnimationFrame(animate);
        }

        //监听屏幕变化
        window.addEventListener('resize', onWindowResize, false);
        function onWindowResize() {
            camera.aspect = window.innerWidth / window.innerHeight;
            camera.updateProjectionMatrix();
            renderer.setSize(window.innerWidth, window.innerHeight);
        }

        //创建四边形
        var geometry;
        function initObject(){
            geometry = new THREE.PlaneGeometry(100,100);
            var material = new THREE.MeshBasicMaterial({vertexColors:THREE.VertexColors,}); //vertexColors 试用顶点着色

            var color1 = new THREE.Color(0x0090F);
            var color2 = new THREE.Color(0x000F0);
            var color3 = new THREE.Color(0x20F0FF);

            for(var i = 0 ; i < geometry.faces.length ; i++){  
                    var face  = geometry.faces[i]; //拿到四边形的两个面
                    face.vertexColors[0] = color1; //每个面由三个点组成,给三个点附上顶点颜色
                    face.vertexColors[1] = color2;
                    face.vertexColors[2] = color3;
            }

            var object = new THREE.Mesh(geometry,material);
            object.position.set(0,0,0);
            scene.add(object);
        }


        initRender();
        initScene();
        initCamera();
        initLight();
        initObject();
        animate();

    </script>
    
</body>
</html>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值