代码资源(8-21)

以下是通过three.js实现plant(平面)物体的渲染,并实现通过四元数旋转相机。

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>长方体</title>
    <script src="three.js"></script>
    <script src="OrbitControls.js"></script>
    <script type="text/javascript" src="stats.min.js"></script>
    <style>
        #button{

            width:100px;
            
            height: 100px;
            
            background-color: palevioletred;
            
            }
    </style>
</head>

<body>
    <button id ="button" onclick="bu()"  >

    </button>
<canvas id="canvasId" width="640" height="480"></canvas>
    <script>
    
     // 创建场景对象Scene
    var scene = new THREE.Scene();
 
//---------------------------------------------------------------------------------------------------------
    var width = 640; //窗口宽度
    var height = 480; //窗口高度

    var planeGeometry = new THREE.BufferGeometry();
    var vertices = new Float32Array([
    -200, 200, 0, //顶点1坐标
    200,200, 0, //顶点2坐标
    200, -200, 0, //顶点3坐标
    -200,-200, 0, //顶点4坐标
]);
// 创建属性缓冲区对象
var attribue = new THREE.BufferAttribute(vertices, 3); //3个为一组,表示一个顶点的xyz坐标
// 设置几何体attributes属性的位置属性
planeGeometry.attributes.position = attribue;
    // Uint16Array类型数组创建顶点索引数据
var indexes = new Uint16Array([
// 0对应第1个顶点位置数据、第1个顶点法向量数据
// 1对应第2个顶点位置数据、第2个顶点法向量数据
// 索引值3个为一组,表示一个三角形的3个顶点
0, 1, 2,
0, 2, 3,
])

// 索引数据赋值给几何体的index属性
planeGeometry.index = new THREE.BufferAttribute(indexes, 1); //1个为一组
const uvs = new Uint16Array([
0, 0,
1, 0,
1, 1,
0,1,

]);
//设置UV
planeGeometry.setAttribute('uv', new THREE.BufferAttribute(uvs, 2));
    var planeTexture = new THREE.TextureLoader().load('t.jpg');
    // 背景材料
    var planeMaterial = new THREE.MeshBasicMaterial({
        map: planeTexture,vertexColors: THREE.VertexColors, //使用缓存中的颜色
        side: THREE.DoubleSide
    });
    // 背景网格
  
    var plane = new THREE.Mesh(planeGeometry, planeMaterial);
    
    // 将背景添加到场景
    scene.add(plane);
  


    var point = new THREE.PointLight(0xffffff);
    point.position.set(400, 200, 300); //点光源位置
    scene.add(point); //点光源添加到场景中
    //环境光
    var ambient = new THREE.AmbientLight(0x444444);
    scene.add(ambient);



 //透视投影相机设置

 /**透视投影相机对象*/
 var camera = new THREE.PerspectiveCamera(60, width / height, 1, 1000);
 camera.position.set(0, 0, 800); //设置相机位置
 
 camera.useQuaternion = true;
    //-----------------------------------------------------------------------------------------------------------

     //创建渲染器对象
     //renderer = new THREE.WebGLRenderer();
     var renderer = new THREE.WebGLRenderer({canvas:document.getElementById("canvasId")});
    renderer.setSize(width, height);//设置渲染区域尺寸
    renderer.setClearColor(0xEEEEEE, 0.0); //设置背景颜色
   //body元素中插入canvas对象
   
    //执行渲染操作   指定场景、相机作为参数


    function render() {
        renderer.render(scene,camera);//执行渲染操作
      }
      
//var controls = new THREE.OrbitControls(camera,renderer.domElement);//创建控件对象*/

function bu(){
    var t=[100,100,0];
    var vector = new THREE.Vector3(0,0,1);
    var matrix = new THREE.Matrix4().makeRotationAxis(vector, Math.PI/2)
    const m = new THREE.Matrix4();

    m.elements=[0.27021536231040955, 0.9580873847007751, -0.09514313191175461,0,
    0.9568670392036438, -0.2562824487686157, 0.13683857023715973,0,
    0.10671985149383545, -0.1280152052640915, -0.986013650894165,0,
               0,0,0,1];
    var qm = new THREE.Quaternion().setFromRotationMatrix(m);
   
    //camera.position.set(100,100,400)
camera.applyQuaternion(qm); // Apply Quaternion

    camera.quaternion.normalize()
    console.log(camera.quaternion,matrix)
    render();

}
 render();
      var controls = new THREE.OrbitControls(camera,renderer.domElement);//创建控件对象
      controls.addEventListener('change', render);//监听鼠标、键盘事件
    </script>
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值