mirror of
https://github.com/jaywcjlove/reference.git
synced 2025-06-23 23:41:29 +08:00
Compare commits
8 Commits
7d1ac6d010
...
7c840dd2f5
Author | SHA1 | Date | |
---|---|---|---|
7c840dd2f5 | |||
61046b519b | |||
8af3950731 | |||
3f329c15ec | |||
485d80489b | |||
0eb3ac6165 | |||
150c8713ae | |||
8ea3c71774 |
@ -337,7 +337,7 @@ jobs:
|
||||
<a href="https://github.com/LesterChang0987" title="Steve Hartwell"><img src="https://avatars.githubusercontent.com/u/114913921?v=4" width="42;" alt="Steve Hartwell"/></a>
|
||||
<a href="https://github.com/h7ml" title="h7ml"><img src="https://avatars.githubusercontent.com/u/55233292?v=4" width="42;" alt="h7ml"/></a>
|
||||
<a href="https://github.com/nangongchengfeng" title="南宫乘风"><img src="https://avatars.githubusercontent.com/u/46562911?v=4" width="42;" alt="南宫乘风"/></a>
|
||||
<a href="https://github.com/aixcyi" title="砹小翼"><img src="https://avatars.githubusercontent.com/u/75880483?v=4" width="42;" alt="砹小翼"/></a>
|
||||
<a href="https://github.com/aixcyi" title="阿羽"><img src="https://avatars.githubusercontent.com/u/75880483?v=4" width="42;" alt="阿羽"/></a>
|
||||
<a href="https://github.com/alex-reinfoce" title="Alex"><img src="https://avatars.githubusercontent.com/u/115539090?v=4" width="42;" alt="Alex"/></a>
|
||||
<a href="https://github.com/LufsX" title="LufsX"><img src="https://avatars.githubusercontent.com/u/33221883?v=4" width="42;" alt="LufsX"/></a>
|
||||
<a href="https://github.com/mailbaoer" title="baoer"><img src="https://avatars.githubusercontent.com/u/5282978?v=4" width="42;" alt="baoer"/></a>
|
||||
|
@ -301,7 +301,7 @@ Quick Reference
|
||||
<a href="https://github.com/LesterChang0987" title="Steve Hartwell"><img src="https://avatars.githubusercontent.com/u/114913921?v=4" width="42;" alt="Steve Hartwell"/></a>
|
||||
<a href="https://github.com/h7ml" title="h7ml"><img src="https://avatars.githubusercontent.com/u/55233292?v=4" width="42;" alt="h7ml"/></a>
|
||||
<a href="https://github.com/nangongchengfeng" title="南宫乘风"><img src="https://avatars.githubusercontent.com/u/46562911?v=4" width="42;" alt="南宫乘风"/></a>
|
||||
<a href="https://github.com/aixcyi" title="砹小翼"><img src="https://avatars.githubusercontent.com/u/75880483?v=4" width="42;" alt="砹小翼"/></a>
|
||||
<a href="https://github.com/aixcyi" title="阿羽"><img src="https://avatars.githubusercontent.com/u/75880483?v=4" width="42;" alt="阿羽"/></a>
|
||||
<a href="https://github.com/alex-reinfoce" title="Alex"><img src="https://avatars.githubusercontent.com/u/115539090?v=4" width="42;" alt="Alex"/></a>
|
||||
<a href="https://github.com/LufsX" title="LufsX"><img src="https://avatars.githubusercontent.com/u/33221883?v=4" width="42;" alt="LufsX"/></a>
|
||||
<a href="https://github.com/mailbaoer" title="baoer"><img src="https://avatars.githubusercontent.com/u/5282978?v=4" width="42;" alt="baoer"/></a>
|
||||
@ -567,6 +567,7 @@ Quick Reference
|
||||
[trtuaazz.com](https://reference.trtuaazz.com)<!--rehype:target=_blank-->
|
||||
[anhaoyang.com](http://dev-doc.anhaoyang.com/)<!--rehype:target=_blank-->
|
||||
[xxcxx.lat](https://xxcxx.lat/)<!--rehype:target=_blank-->
|
||||
[fishlee.net](https://cr.fishlee.net/)<!--rehype:target=_blank-->
|
||||
<!--rehype:class=home-card home-links-->
|
||||
|
||||
如果你有资源,可以很方便[部署 web 版](https://github.com/jaywcjlove/reference/issues/102#issue-1451649637),这非常简单,只需要克隆 [gh-pages](https://github.com/jaywcjlove/reference/tree/gh-pages) 分支代码到你的静态服务就可以了,还可以使用 [docker](https://hub.docker.com/r/wcjiang/reference) 快捷部署 web 版。
|
||||
@ -583,6 +584,7 @@ Quick Reference
|
||||
非常感谢那些一直支持我开源工作的朋友们。如果您对我的工作感到满意,可以选择在[这里进行赞助](https://wangchujiang.com/#/sponsor)<!--rehype:target=_blank-->。如果目前经济上不宽裕,也可以通过下载并使用我开发的 [macOS 应用](https://wangchujiang.com/#/app)<!--rehype:target=_blank-->来支持我。以下是我个人开发的 macOS 应用:
|
||||
|
||||
<p style="display: inline-block">
|
||||
<a target="_blank" href="https://wangchujiang.com/key-clicker/" title="KeyClicker for macOS"><img align="center" alt="KeyClicker" height="50" width="50" src="https://github.com/user-attachments/assets/5a19fcb9-cb81-4855-b4ea-31c604d9612a"></a>
|
||||
<a target="_blank" href="https://wangchujiang.com/daybar/" title="DayBar for macOS"><img align="center" alt="DayBar" height="50" width="50" src="https://github.com/user-attachments/assets/b67d4a2e-92e2-4d8c-8c6f-2a1eb3e2fa93"></a>
|
||||
<a target="_blank" href="https://wangchujiang.com/iconed/" title="Iconed for macOS"><img align="center" alt="Iconed" height="50" width="50" src="https://github.com/user-attachments/assets/8a35dc7b-4faf-4e2a-9311-f66d6844a896"></a>
|
||||
<a target="_blank" href="https://wangchujiang.com/rightmenu-master/" title="RightMenu Master for macOS"><img align="center" alt="RightMenu Master" height="50" width="50" src="https://github.com/user-attachments/assets/39a76541-71bf-4de7-a01c-c62f0557dff5"></a>
|
||||
|
246
docs/threejs.md
Normal file
246
docs/threejs.md
Normal file
@ -0,0 +1,246 @@
|
||||
Three.js 备忘清单
|
||||
===
|
||||
|
||||
Three.js 是一个跨浏览器的 JavaScript 库和 API,用于创建和显示动画 3D 计算机图形。以下是一些常用的 Three.js 操作和用法。
|
||||
|
||||
入门
|
||||
---
|
||||
|
||||
### 安装
|
||||
|
||||
```bash
|
||||
# 使用 npm 安装
|
||||
npm install three
|
||||
```
|
||||
|
||||
### 基本场景设置
|
||||
|
||||
```javascript
|
||||
import * as THREE from 'three';
|
||||
|
||||
// 创建场景
|
||||
const scene = new THREE.Scene();
|
||||
|
||||
// 创建相机
|
||||
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
|
||||
camera.position.z = 5;
|
||||
|
||||
// 创建渲染器
|
||||
const renderer = new THREE.WebGLRenderer();
|
||||
renderer.setSize(window.innerWidth, window.innerHeight);
|
||||
document.body.appendChild(renderer.domElement);
|
||||
|
||||
// 渲染循环
|
||||
function animate() {
|
||||
requestAnimationFrame(animate);
|
||||
renderer.render(scene, camera);
|
||||
}
|
||||
|
||||
animate();
|
||||
```
|
||||
|
||||
### 添加几何体
|
||||
|
||||
```javascript
|
||||
// 创建几何体
|
||||
const geometry = new THREE.BoxGeometry();
|
||||
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
|
||||
const cube = new THREE.Mesh(geometry, material);
|
||||
|
||||
// 添加到场景
|
||||
scene.add(cube);
|
||||
```
|
||||
|
||||
### 响应窗口大小调整
|
||||
|
||||
```javascript
|
||||
window.addEventListener('resize', () => {
|
||||
camera.aspect = window.innerWidth / window.innerHeight;
|
||||
camera.updateProjectionMatrix();
|
||||
renderer.setSize(window.innerWidth, window.innerHeight);
|
||||
});
|
||||
```
|
||||
|
||||
几何体与材质
|
||||
---
|
||||
|
||||
### 常用几何体
|
||||
|
||||
```javascript
|
||||
const box = new THREE.BoxGeometry(1, 1, 1);
|
||||
const sphere = new THREE.SphereGeometry(1, 32, 32);
|
||||
const plane = new THREE.PlaneGeometry(5, 5);
|
||||
const cone = new THREE.ConeGeometry(1, 2, 32);
|
||||
const cylinder = new THREE.CylinderGeometry(1, 1, 2, 32);
|
||||
```
|
||||
|
||||
### 常用材质
|
||||
|
||||
```javascript
|
||||
const basicMaterial = new THREE.MeshBasicMaterial({ color: 0xff0000 });
|
||||
const lambertMaterial = new THREE.MeshLambertMaterial({ color: 0xff0000 });
|
||||
const phongMaterial = new THREE.MeshPhongMaterial({ color: 0xff0000, shininess: 100 });
|
||||
const standardMaterial = new THREE.MeshStandardMaterial({ color: 0xff0000 });
|
||||
const physicalMaterial = new THREE.MeshPhysicalMaterial({ color: 0xff0000, roughness: 0.5 });
|
||||
```
|
||||
|
||||
灯光
|
||||
---
|
||||
|
||||
### 常用灯光
|
||||
|
||||
```javascript
|
||||
const ambientLight = new THREE.AmbientLight(0x404040); // 环境光
|
||||
scene.add(ambientLight);
|
||||
|
||||
const pointLight = new THREE.PointLight(0xffffff); // 点光源
|
||||
pointLight.position.set(5, 5, 5);
|
||||
scene.add(pointLight);
|
||||
|
||||
const directionalLight = new THREE.DirectionalLight(0xffffff); // 平行光
|
||||
directionalLight.position.set(0, 1, 0);
|
||||
scene.add(directionalLight);
|
||||
|
||||
const spotLight = new THREE.SpotLight(0xffffff); // 聚光灯
|
||||
spotLight.position.set(5, 5, 5);
|
||||
scene.add(spotLight);
|
||||
```
|
||||
|
||||
纹理
|
||||
---
|
||||
|
||||
### 加载纹理
|
||||
|
||||
```javascript
|
||||
const textureLoader = new THREE.TextureLoader();
|
||||
const texture = textureLoader.load('path/to/texture.jpg');
|
||||
|
||||
const material = new THREE.MeshBasicMaterial({ map: texture });
|
||||
const geometry = new THREE.BoxGeometry();
|
||||
const cube = new THREE.Mesh(geometry, material);
|
||||
|
||||
scene.add(cube);
|
||||
```
|
||||
|
||||
动画
|
||||
---
|
||||
|
||||
### 使用 Tween.js
|
||||
|
||||
```javascript
|
||||
import TWEEN from '@tweenjs/tween.js';
|
||||
|
||||
function animate() {
|
||||
requestAnimationFrame(animate);
|
||||
TWEEN.update();
|
||||
renderer.render(scene, camera);
|
||||
}
|
||||
|
||||
const coords = { x: 0, y: 0 }; // 初始坐标
|
||||
const tween = new TWEEN.Tween(coords)
|
||||
.to({ x: 100, y: 100 }, 1000) // 目标坐标和持续时间
|
||||
.easing(TWEEN.Easing.Quadratic.Out) // 缓动函数
|
||||
.onUpdate(() => {
|
||||
cube.position.set(coords.x, coords.y, 0);
|
||||
})
|
||||
.start();
|
||||
|
||||
animate();
|
||||
```
|
||||
|
||||
高级操作
|
||||
---
|
||||
|
||||
### 加载模型
|
||||
|
||||
```javascript
|
||||
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
|
||||
|
||||
const loader = new GLTFLoader();
|
||||
loader.load('path/to/model.glb', (gltf) => {
|
||||
scene.add(gltf.scene);
|
||||
});
|
||||
```
|
||||
|
||||
### 使用 OrbitControls
|
||||
|
||||
```javascript
|
||||
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
|
||||
|
||||
const controls = new OrbitControls(camera, renderer.domElement);
|
||||
|
||||
function animate() {
|
||||
requestAnimationFrame(animate);
|
||||
controls.update();
|
||||
renderer.render(scene, camera);
|
||||
}
|
||||
|
||||
animate();
|
||||
```
|
||||
|
||||
### 使用 Raycaster
|
||||
|
||||
```javascript
|
||||
const raycaster = new THREE.Raycaster();
|
||||
const mouse = new THREE.Vector2();
|
||||
|
||||
function onMouseMove(event) {
|
||||
mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
|
||||
mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
|
||||
|
||||
raycaster.setFromCamera(mouse, camera);
|
||||
const intersects = raycaster.intersectObjects(scene.children);
|
||||
|
||||
if (intersects.length > 0) {
|
||||
intersects[0].object.material.color.set(0xff0000);
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener('mousemove', onMouseMove);
|
||||
```
|
||||
|
||||
性能优化
|
||||
---
|
||||
|
||||
### 使用抗锯齿
|
||||
|
||||
```javascript
|
||||
const renderer = new THREE.WebGLRenderer({ antialias: true });
|
||||
```
|
||||
|
||||
### 降低阴影质量
|
||||
|
||||
```javascript
|
||||
renderer.shadowMap.enabled = true;
|
||||
renderer.shadowMap.type = THREE.PCFSoftShadowMap;
|
||||
```
|
||||
|
||||
### 使用实例化几何体
|
||||
|
||||
```javascript
|
||||
const geometry = new THREE.InstancedBufferGeometry();
|
||||
const material = new THREE.MeshBasicMaterial();
|
||||
const mesh = new THREE.InstancedMesh(geometry, material, count);
|
||||
|
||||
scene.add(mesh);
|
||||
```
|
||||
|
||||
工具
|
||||
---
|
||||
|
||||
### Three.js 编辑器
|
||||
|
||||
Three.js 编辑器是一个在线工具,可以用来创建和编辑 Three.js 场景。
|
||||
|
||||
- [Three.js 编辑器](https://threejs.org/editor/)
|
||||
|
||||
### 三维模型和纹理资源
|
||||
|
||||
- [Sketchfab](https://sketchfab.com/)
|
||||
- [Poly Haven](https://polyhaven.com/)
|
||||
|
||||
另见
|
||||
---
|
||||
|
||||
- [Three.js 官方文档](https://threejs.org/docs/)
|
||||
- [Three.js 示例](https://threejs.org/examples/)
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@wcj/reference",
|
||||
"version": "1.45.0",
|
||||
"version": "1.46.0",
|
||||
"description": "为开发人员分享快速参考备忘单(主要是方便自己)。",
|
||||
"author": "jaywcjlove",
|
||||
"license": "MIT",
|
||||
|
Reference in New Issue
Block a user