three.js CSS2DRenderer、CSS2DObject渲染HTML标签
CSS2DRenderer 和 CSS2DObject 是 Three.js 中用于将 2D HTML元素渲染到3D场景中的工具。以下是如何使用这两个工具来渲染 HTML 标签的简单示例:
import * as THREE from 'three';
import { CSS2DRenderer, CSS2DObject } from 'three/examples/jsm/renderers/CSS2DRenderer.js';
// 设置场景、摄像机和渲染器
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// 创建CSS2DRenderer
const cssRenderer = new CSS2DRenderer();
cssRenderer.setSize(window.innerWidth, window.innerHeight);
cssRenderer.domElement.style.position = 'absolute';
cssRenderer.domElement.style.top = 0;
document.body.appendChild(cssRenderer.domElement);
// 创建一个2D对象
const label = document.createElement('div');
label.style.color = 'white';
label.style.background = 'red';
label.style.padding = '2px 6px';
label.style.borderRadius = '4px';
label.textContent = 'Hello, CSS2DObject!';
const labelObject = new CSS2DObject(label);
labelObject.position.set(0, 0, 0); // 设置在3D场景中的位置
scene.add(labelObject);
// 渲染循环
function animate() {
requestAnimationFrame(animate);
renderer.render(scene, camera);
cssRenderer.render(scene, camera);
}
animate();
在这个例子中,我们首先创建了一个新的 div
HTML元素,并给它添加了一些样式。然后我们使用这个 div
元素作为参数创建了一个 CSS2DObject
。最后,我们将这个 CSS2DObject
添加到了我们的3D场景中。在渲染循环中,我们调用 cssRenderer.render
方法来确保2D元素与3D场景同步更新。
评论已关闭