// threejs shadermaterial 示例代码
// 引入 Three.js 库
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);
// 定义顶点着色器
const vertexShader = `
void main() {
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}
`;
// 定义片元着色器
const fragmentShader = `
void main() {
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); // 红色
}
`;
// 创建 ShaderMaterial
const material = new THREE.ShaderMaterial({
vertexShader: vertexShader,
fragmentShader: fragmentShader
});
// 创建一个几何体
const geometry = new THREE.BoxGeometry();
// 创建网格并添加到场景中
const mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
// 渲染循环
function animate() {
requestAnimationFrame(animate);
mesh.rotation.x += 0.01;
mesh.rotation.y += 0.01;
renderer.render(scene, camera);
}
animate();
import 语句引入 Three.js 库。THREE.Scene)、一个透视相机 (THREE.PerspectiveCamera) 和一个 WebGL 渲染器 (THREE.WebGLRenderer)。vertexShader):负责将顶点位置从模型空间转换到裁剪空间。fragmentShader):负责为每个像素指定颜色,这里设置为红色。THREE.ShaderMaterial。THREE.BoxGeometry) 并将其与 ShaderMaterial 组合成一个网格 (THREE.Mesh)。requestAnimationFrame 实现动画效果,不断更新网格的位置并重新渲染场景。Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站