第三章设置物体光照

<template>
    <div>
        <canvas id="c"></canvas>
    </div>
</template>

<script setup>
import * as THREE from 'three';
import {onMounted} from "vue";

onMounted(()=>{
    main()
})
let cube,renderer,scene, camera
const main = () => {
  let canvas = document.querySelector('#c')
    // Three.js需要使用这个canvas标签来绘制,所以我们要先获取它然后传给three.js。
     renderer = new THREE.WebGLRenderer({antialias:true,canvas})
    let fov = 75
    let aspect = 2
    let near = 0.1
    let far = 5
    // 视锥体得范围为near0.1和far0.5
     camera = new THREE.PerspectiveCamera( fov, aspect, near, far );
    // z = 2。它朝向Z轴负方向,z的值范围应在near和far之间
    camera.position.z = 2;
    // 然后我们创建一个场景(Scene)。场景(Scene)是three.js的基本的组成部分。需要three.js绘制的东西都需要加入到scene中
     scene = new THREE.Scene()

    // 设置光照
//     平行光有一个位置和目标点。默认值都为(0, 0, 0)。我们这里 将灯光的位置设为(-1, 2, 4),让它位于摄像机前面稍微左上方一点的地方。目标点还是(0, 0, 0),让它朝向坐标原点方向。
//
    const color = 0xFFFFFF;
    const intensity = 5;
    const light = new THREE.DirectionalLight( color, intensity );
    light.position.set( - 1, 2, 4 );//三个参数分别代表xyz
    scene.add( light );

    // 然后创建一个包含盒子信息的立方几何体(BoxGeometry)。几乎所有希望在three.js中显示的物体都需要一个包含了组成三维物体的顶点信息的几何体。
    let boxWidth = 1
    let boxHeight = 1
    let boxDepth = 1
    const geometry = new THREE.BoxGeometry(boxWidth, boxHeight, boxDepth);
    // 然后创建一个基本的材质并设置它的颜色. 颜色的值可以用css方式和十六进制来表示。
    // 我们还需要改变下立方体的材质。MeshBasicMaterial材质不会受到灯光的影响。我们将他改成会受灯光影响的MeshPhongMaterial材质
    // let material = new THREE.MeshBasicMaterial({color: 0x44aa88})
    let material = new THREE.MeshPhongMaterial({color: 0x44aa88})
    // 再创建一个网格(Mesh)对象,它包含了:

    // 几何体(Geometry)(物体的形状)
    // 材质(Material)(如何绘制物体,光滑还是平整,什么颜色,什么贴图等等)
    // 对象在场景中相对于他父对象的位置、朝向、和缩放。下面的代码中父对象即为场景对象。
     cube = new THREE.Mesh(geometry, material);
    // 最后我们将网格添加到场景中。
    scene.add(cube)

    requestAnimationFrame(render)
}

const render=(time)=> {
    time *= 0.001;  // 将时间单位变为秒
    cube.rotation.x = time;
    cube.rotation.y = time;
    // 之后将场景和摄像机传递给渲染器来渲染出整个场景。
    renderer.render(scene, camera);

    requestAnimationFrame(render);
}

</script>

<style lang="scss" scoped>

</style>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值