CSS3渲染器CSS3DRenderer.js和CSS3模型

郭隆邦老师threejs教程学习笔记

通过CSS3渲染器和模型可以把HTML元素像Threejs的网格模型Mesh或精灵模型Sprite一样去渲染。

CSS3技术,对HTML元素进行旋转缩放平移:CSS 3D 转换

Threejs渲染精灵模型Sprite的时候和网格模型的区别:

旋转三维场景的时候,如果通过相机控件OrbitControls旋转测试,Sprite矩形平面始终平行于canvas画布或屏幕,而矩形平面Mesh的姿态角度会跟着旋转,不一定平行于canvas画布。

扩展库CSS3DRenderer.js

threejs扩展库CSS3DRenderer.js提供了三个构造函数CSS3渲染器CSS3DRenderer、CSS3模型对象CSS3DObject、CSS3精灵模型CSS3DSprite

<!-- 引入threejs扩展库CSS3DRenderer.js -->
import { CSS3DRenderer, CSS3DObject, CSS3DSprite } from "three/examples/jsm/renderers/CSS3DRenderer.js";

CSS3渲染器CSS3DRenderer

CSS3渲染器CSS3DRenderer和常用的WebGL渲染器WebGLRenderer一样都是渲染器,只是渲染技术不同,WebGL渲染器WebGLRenderer解析渲染threejs模型对象的时候会调用底层的WebGL API,CSS3渲染器CSS3DRenderer解析渲染模型对象的时候不会调用底层的WebGL API,而是通过CSS3技术渲染对应的模型对象,CSS3DRenderer对应的模型对象本质上是HTML元素。

CSS3渲染器.setSize().render()等方法和属性功能和WebGL渲染器相同。webgl渲染器的部分属性和方法CSS3渲染是不具备的,比如设置背景颜色的方法.setClearColor()

// 创建CSS3渲染器
const CSS3Renderer = new CSS3DRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.getElementById('webgl').appendChild( renderer.domElement );
...
renderer.render( scene, camera );

CSS3对象模型CSS3DObject和CSS3精灵模型CSS3DSprite

CSS3渲染器CSS3DRenderer不能渲染Threejs的网格模型Mesh、精灵模型Sprite、线模型Line等。CSS3渲染器CSS3DRenderer能够渲染的模型对象是CSS3对象模型CSS3DObject、CSS3精灵模型CSS3DSprite

CSS3对象模型CSS3DObject的渲染方式类似threejs平面网格模型,CSS3精灵模型CSS3DSprite渲染方式类似threejs中精灵模型对象Sprite

tagFun(boxMesh,'tan');
tagFun(boxMesh2,'tan2');
tagFun(boxMesh3,'tan3');

function tagFun(mesh,id) {
  // 获得HTML元素创建的UI界面
  const tag = document.getElementById(id);
  // 把div元素包装为CSS3DObject模型
  const obj= new CSS3DObject(tag);
  // 把HTML元素包装为CSS3精灵模型CSS3DSprite
  // CSS3对象模型CSS3DObject插入到场景中
  scene.add(obj)
  obj.position.copy(mesh.position)
  obj.position.y += 80
  obj.position.x += 10
  //缩放CSS3DObject模型对象
  obj.scale.set(0.3, 0.3, 0.3)
}
// 把HTML元素包装为CSS3精灵模型CSS3DSprite
const CSS3DSprite = new CSS3DSprite( div );

与WebGL渲染器组合

可以在threejs代码中同时使用CSS3渲染器CSS3DRenderer和WebGL渲染器WebGLRenderer,通过WebGL渲染器WebGLRenderer渲染threejs的网格模型,然后通过CSS3渲染器CSS3DRenderer渲染HTML元素创建的UI界面作为threejs网格模型对象的标签,比如在物联网3D可视化项目中显示该网格模型的相关数据信息。

const renderer = new THREE.WebGLRenderer();
renderer.setSize(width, height);
renderer.setClearColor(0x222222, 1);
//WebGL渲染器输出的canvas画布绝对定位,以免影响CSS3渲染的HTML元素显示
renderer.domElement.style.position = 'absolute';
document.body.appendChild(renderer.domElement);
// 创建CSS3渲染器
const CSS3Renderer = new THREE.CSS3DRenderer();
CSS3Renderer.setSize(width, height);
document.body.appendChild(CSS3Renderer.domElement);
// 渲染函数
function render() {
  // 渲染threejs场景中的网格模型Mesh等对象
  renderer.render(scene, camera);
   // 渲染`CSS3DSprite`或`CSS3DObject`模型对象包装的HTML元素
  CSS3Renderer.render(scene, camera);
  requestAnimationFrame(render);
}

CSS3DObject表示的模型标签和threejs平面网格模型表示的模型标签效果一样,CSS3DSprite表示的模型标签和threejs精灵模型Sprite渲染效果一样。

通过空间OrbitControls旋转缩放threejs三维场景中的时候,CSS3DSpriteCSS3DObject包装的HTML元素同样会跟随对应的三维场景Scene旋转缩放。

const controls = new OrbitControls(camera,renderer.domElement);

效果图:

  • 30
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Vue中导入Three.jsCSS3DRenderer需要进行以下步骤: 1. 首先,你需要安装Three.js库。可以使用npm或者下载Three.js的压缩文件并在项目中引入。 2. 在需要使用CSS3DRenderer的组件中,首先导入Three.js的依赖项,包括CSS3DRenderer。 import * as THREE from 'three'; import { CSS3DRenderer } from 'three/examples/jsm/renderers/CSS3DRenderer'; 3. 创建一个Vue组件,其中包含一个用于渲染Three.js场景的容器。 <template> <div ref="container"></div> </template> 4. 在Vue中的mounted生命周期钩子函数中初始化Three.js渲染器和场景。 export default { mounted() { const container = this.$refs.container; const renderer = new CSS3DRenderer(); // 创建CSS3DRenderer实例 renderer.setSize(container.clientWidth, container.clientHeight); // 设置渲染器的尺寸 container.appendChild(renderer.domElement); // 将渲染器的DOM元素添加到容器中 const scene = new THREE.Scene(); // 创建场景 // 在这里可以添加其他Three.js场景对象,如相机、光源、物体等 // 渲染函数,每次渲染时调用 const render = () => { renderer.render(scene, camera); // 在这里可以根据场景需要进行其他操作,如更新物体的位置、旋转等 requestAnimationFrame(render); }; render(); // 开始渲染 }, }; 5. 最后,在Vue组件的样式表中添加容器的样式。 <style scoped> .container { width: 100%; height: 100%; } </style> 通过以上步骤,在Vue中成功导入并使用Three.js中的CSS3DRenderer进行渲染。当然,在实际使用中,你需要根据自己的项目需求进行调整和完善。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值