Threejs构建mesh

   /**
     * 创建网格模型
     */
    var geometry = new THREE.BufferGeometry(); //声明一个缓冲几何体对象

    //类型数组创建顶点位置position数据
    var vertices = new Float32Array([
      0, 0, 0, //顶点1坐标
      50, 0, 0, //顶点2坐标
      0, 100, 0, //顶点3坐标

      0, 0, 10, //顶点4坐标
      0, 0, 100, //顶点5坐标
      50, 0, 10, //顶点6坐标
    ]);
    // 创建属性缓冲区对象
    var attribue = new THREE.BufferAttribute(vertices, 3); //3个为一组,作为一个顶点的xyz坐标
    // 设置几何体attributes属性的位置position属性
    geometry.attributes.position = attribue;


    //类型数组创建顶点颜色color数据
    var colors = new Float32Array([
      1, 0, 0, //顶点1颜色
      0, 1, 0, //顶点2颜色
      0, 0, 1, //顶点3颜色

      1, 1, 0, //顶点4颜色
      0, 1, 1, //顶点5颜色
      1, 0, 1, //顶点6颜色
    ]);
    // 设置几何体attributes属性的颜色color属性
    geometry.attributes.color = new THREE.BufferAttribute(colors, 3); //3个为一组,表示一个顶点的颜色数据RGB


    //材质对象
    var material = new THREE.PointsMaterial({
      // 使用顶点颜色数据渲染模型,不需要再定义color属性
      // color: 0xff0000,
      vertexColors: THREE.VertexColors, //以顶点颜色为准
      size: 10.0 //点对象像素尺寸
    });
    // 点渲染模式  点模型对象Points
    var points = new THREE.Points(geometry, material); //点模型对象
    scene.add(points); //点对象添加到场景中

线 (使用向量)

        var geometry = new THREE.Geometry(); //声明一个几何体对象Geometry

        var p1 = new THREE.Vector3(50, 0, 0); //顶点1坐标
        var p2 = new THREE.Vector3(0, 70, 0); //顶点2坐标
        var p3 = new THREE.Vector3(80, 70, 0); //顶点3坐标
        //顶点坐标添加到geometry对象
        geometry.vertices.push(p1, p2, p3);

        //材质对象
        var material = new THREE.LineBasicMaterial({
            color: 0xffff00
        });
        //线条模型对象
        var line = new THREE.Line(geometry, material);
        scene.add(line); //线条对象添加到场景中

线(使用数组)

 /**
         * 创建网格模型
         */
        var geometry = new THREE.BufferGeometry(); //声明一个缓冲几何体对象

        //类型数组创建顶点位置position数据
        var vertices = new Float32Array([
            0, 0, 0, //顶点1坐标
            100, 100, 100, //顶点2坐标
        ]);
        // 创建属性缓冲区对象
        var attribue = new THREE.BufferAttribute(vertices, 3); //3个为一组,作为一个顶点的xyz坐标
        // 设置几何体attributes属性的位置position属性
        geometry.attributes.position = attribue;


        //类型数组创建顶点颜色color数据
        var colors = new Float32Array([
            1, 0, 0, //顶点1颜色
            0, 0, 1, //顶点2颜色
        ]);
        // 设置几何体attributes属性的颜色color属性
        geometry.attributes.color = new THREE.BufferAttribute(colors, 3); //3个为一组,表示一个顶点的颜色数据RGB


        //材质对象
        var material = new THREE.LineBasicMaterial({
            // 使用顶点颜色数据渲染模型,不需要再定义color属性
            // color: 0xff0000,
            vertexColors: THREE.VertexColors, //以顶点颜色为准
        });
        // 线条渲染模式  线模型对象Line
        var line = new THREE.Line(geometry, material); //点模型对象
        scene.add(line); //点对象添加到场景中

面(使用向量)

 var geometry = new THREE.Geometry(); //声明一个几何体对象Geometry

    var p1 = new THREE.Vector3(0, 0, 0); //顶点1坐标
    var p2 = new THREE.Vector3(0, 100, 0); //顶点2坐标
    var p3 = new THREE.Vector3(50, 0, 0); //顶点3坐标
    var p4 = new THREE.Vector3(0, 0, 100); //顶点4坐标
    //顶点坐标添加到geometry对象
    geometry.vertices.push(p1, p2, p3,p4);

    // Face3构造函数创建一个三角面
    var face1 = new THREE.Face3(0, 1, 2);
    //三角面每个顶点的法向量
    var n1 = new THREE.Vector3(0, 0, -1); //三角面Face1顶点1的法向量
    var n2 = new THREE.Vector3(0, 0, -1); //三角面2Face2顶点2的法向量
    var n3 = new THREE.Vector3(0, 0, -1); //三角面3Face3顶点3的法向量
    // 设置三角面Face3三个顶点的法向量
    face1.vertexNormals.push(n1,n2,n3);

    // 三角面2
    var face2 = new THREE.Face3(0, 2, 3);
    // 设置三角面法向量
    face2.normal=new THREE.Vector3(0, -1, 0);

    //三角面face1、face2添加到几何体中
    geometry.faces.push(face1,face2);

    //材质对象
    var material = new THREE.MeshLambertMaterial({
      color: 0xffff00,
      side:THREE.DoubleSide//两面可见
    });
    //网格模型对象
    var mesh = new THREE.Mesh(geometry, material);
    scene.add(mesh); //网格模型对象添加到场景中

面(使用数组)

  /**
     * 创建网格模型
     */
    var geometry = new THREE.BufferGeometry(); //声明一个缓冲几何体对象

    //类型数组创建顶点位置position数据
    var vertices = new Float32Array([
      0, 0, 0, //顶点1坐标
      50, 0, 0, //顶点2坐标
      0, 100, 0, //顶点3坐标

      0, 0, 10, //顶点4坐标
      0, 0, 100, //顶点5坐标
      50, 0, 10, //顶点6坐标
    ]);
    // 创建属性缓冲区对象
    var attribue = new THREE.BufferAttribute(vertices, 3); //3个为一组,作为一个顶点的xyz坐标
    // 设置几何体attributes属性的位置position属性
    geometry.attributes.position = attribue;


    //类型数组创建顶点颜色color数据
    var colors = new Float32Array([
      1, 0, 0, //顶点1颜色
      0, 1, 0, //顶点2颜色
      0, 0, 1, //顶点3颜色

      1, 1, 0, //顶点4颜色
      0, 1, 1, //顶点5颜色
      1, 0, 1, //顶点6颜色
    ]);
    // 设置几何体attributes属性的颜色color属性
    geometry.attributes.color = new THREE.BufferAttribute(colors, 3); //3个为一组,表示一个顶点的颜色数据RGB


    //材质对象
    var material = new THREE.MeshBasicMaterial({
      // 使用顶点颜色数据渲染模型,不需要再定义color属性
      // color: 0xff0000,
      // side: THREE.DoubleSide //两面可见
      vertexColors: THREE.VertexColors, //以顶点颜色为准
    });
    // 网格模型  三角面渲染模式
    var mesh = new THREE.Mesh(geometry, material); //网格模型
    scene.add(mesh); //点对象添加到场景中

几何体

//var geometry = new THREE.SphereGeometry(60, 40, 40);
var geometry = new THREE.BoxGeometry(100, 100, 100); //创建一个立方体几何对象Geometry
//基础网格材质对象   不受光照影响  没有棱角感
var material = new THREE.MeshBasicMaterial({
      color: 0x0000ff,
      wireframe: true, //线条模式渲染
  });
// 与光照计算  漫反射   产生棱角感
// var material = new THREE.MeshLambertMaterial({
//   color: 0x00ff00,
// });

// 与光照计算  高光效果(镜面反射)    产生棱角感
// var material = new THREE.MeshPhongMaterial({
//   color: 0xff0000,
//   specular:0x444444,
//   shininess:30,
// });
var mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
mesh.castShadow = true; // 设置产生投影的网格模型
// 设置接收阴影的投影面
planeMesh.receiveShadow = true;
scene.add(mesh); //网格模型添加到场景中

 

 

 

FR:徐海涛(hunk xu)
QQ技术交流群:386476712

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你好,以下是使用three.js构建一个顶点材质的示例代码: ```javascript // 创建场景 var scene = new THREE.Scene(); // 创建相机 var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); camera.position.z = 5; // 创建渲染器 var renderer = new THREE.WebGLRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); // 创建顶点着色器 var vertexShader = ` varying vec2 vUV; void main() { vUV = uv; gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); } `; // 创建片元着色器 var fragmentShader = ` varying vec2 vUV; void main() { gl_FragColor = vec4(vUV.x, vUV.y, 0.0, 1.0); } `; // 创建材质并设置顶点着色器和片元着色器 var material = new THREE.ShaderMaterial({ vertexShader: vertexShader, fragmentShader: fragmentShader, }); // 创建立方体几何体 var geometry = new THREE.BoxGeometry(1, 1, 1); // 创建顶点材质并设置材质 var vertexMaterial = new THREE.MeshBasicMaterial({ color: 0xffffff, wireframe: true, }); var vertexCube = new THREE.Mesh(geometry, vertexMaterial); vertexCube.position.x = -2; // 创建颜色材质并设置材质 var colorMaterial = new THREE.MeshBasicMaterial({ color: 0xff0000, }); var colorCube = new THREE.Mesh(geometry, colorMaterial); colorCube.position.x = 2; // 创建顶点材质的立方体几何体 var vertexGeometry = new THREE.Geometry(); vertexGeometry.vertices.push( new THREE.Vector3(-0.5, -0.5, -0.5), new THREE.Vector3(0.5, -0.5, -0.5), new THREE.Vector3(0.5, 0.5, -0.5) ); var vertexTriangle = new THREE.Mesh(vertexGeometry, material); // 将对象添加到场景中 scene.add(vertexCube); scene.add(colorCube); scene.add(vertexTriangle); // 渲染场景 function render() { requestAnimationFrame(render); vertexCube.rotation.x += 0.01; vertexCube.rotation.y += 0.01; colorCube.rotation.x += 0.01; colorCube.rotation.y += 0.01; vertexTriangle.rotation.x += 0.01; vertexTriangle.rotation.y += 0.01; renderer.render(scene, camera); } render(); ``` 这段代码中,我们创建了一个顶点着色器和一个片元着色器,并使用这两个着色器创建了一个材质。然后,我们创建了一个立方体几何体和两个使用不同材质的立方体。最后,我们创建了一个顶点材质的几何体,并将其添加到场景中。在渲染循环中,我们对所有对象进行了旋转,并使用渲染器将场景渲染到屏幕上。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值