# threejs-study
**Repository Path**: luxcurl/threejs-study
## Basic Information
- **Project Name**: threejs-study
- **Description**: 学习threejs
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-03-22
- **Last Updated**: 2022-09-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# threejs 学习
## 启动项目
```shell
# 1 , 注意选择vue-ts
npm create vite@latest
# 2
npm i three
npm i --save-dev @types/three
```
## 资源
官方文档[https://threejs.org/docs/index.html]
## three与vue对接
```ts
import {WebGLRenderer} from 'three'
export class TEngine{
private dom:HTMLElement
private renderer:WebGLRenderer
constructor(dom:HTMLElement){
this.dom = dom
this.renderer = new WebGLRenderer()
dom.append(this.renderer.domElement)
// ,设为true允许改变canvas画面
this.renderer.setSize(dom.offsetWidth,dom.offsetHeight,true)
}
}
```
app.vue
```vue
```
## 渲染一个立方体
## 渲染一个有颜色的立方体
## 增加场景辅助
## 让场景动起来
## 添加性能监视器
## 添加轨道控制器
## 添加抗锯齿处理
```ts
this.renderer = new WebGLRenderer({
antialias: true
})
```
## 丰富场景物体,进行项目模块切分
## 添加点光源,让物体更真实
## 添加光源辅助,可视化光源调适
## 让物体产生阴影
## 感受一下pbr材质
## 加载外部贴图
## 添加物体变换控制器
## 物体拾取与射线生成器
## 解决物体变换的bug
当用物体变换控器控制物体后,再次点击变换控制器操作会失效。
原因是mouseDown,mouseUp,click的区别(执行先后顺序)。
我们是监听的click事件来拾取物体。当操作变换控制器松手时会触发click,把变换控制器本身给选择到了,变换的就不是原来的物体。
## 避免选择到变换控制器
## 不要选择到辅助轴
有个虚拟方法,可以将其指控,射线就不会选择到了
```ts
axesHelper.raycast = ()=>{}
// fasle。是否只选择第一层物体
const intersection = raycaster.intersectObjects(this.scene.children,false)
```
## 改变变换控制器模式
监听键盘事件,改变它的模式。
## 增加物体自定义事件
dispatch自定义派发事件
```ts
wall.addEventListener('mouseenter', () => {
(wall.material as MeshStandardMaterial).color = new Color('red')
})
wall.addEventListener('mouseleave', () => {
(wall.material as MeshStandardMaterial).color = new Color('white')
})
// =============
cacheObject.dispatchEvent({
type: 'mouseleave'
})
```