1、html的UI交互界面与Canvas画布叠加

需求:把threejs Cavnas画布和HTML元素叠加布局,在canvas上添加按钮,通过按钮点击修改canvas场景。

// canvas画布绝对定位
renderer.domElement.style.position = 'absolute';
renderer.domElement.style.top = '0px';
renderer.domElement.style.left = '0px';
renderer.domElement.style.zIndex = -1;//让场景在最底层
<div style="color: #ff0000;z-index:2;position: absolute;">红色</div>

2、Three.js背景颜色和透明度

renderer.setClearColor(0xb9d3ff, 0.4); //设置背景颜色和透明度
renderer.setClearAlpha(0.0);//完全透明 // 在构造函数参数中设置alpha属性的值
var renderer = new THREE.WebGLRenderer({
alpha: true,//默认是false
});

3、Three.js的canvas保存为图片

const renderer = new THREE.WebGLRenderer({
//是否保留缓直到手动清除或被覆盖,想把canvas画布上内容下载到本地,需要设置为true
preserveDrawingBuffer:true,
});
// 鼠标单击id为download的HTML元素,threejs渲染结果以图片形式下载到本地
document.getElementById('download').addEventListener('click',function(){
// 创建一个超链接元素,用来下载保存数据的文件
const link = document.createElement('a');
// 通过超链接herf属性,设置要保存到文件中的数据
link.href = renderer.domElement.toDataURL("image/png");
link.download = 'threejs.png'; //下载文件名
link.click(); //js代码触发超链接元素a的鼠标点击事件,开始下载文件到本地
}) //以不同的格式获取像素信息
canvas.toDataURL("image/png");
canvas.toDataURL("image/jpeg");
canvas.toDataURL("image/bmp");

4、深度冲突(模型闪烁)

问题现象:两个Mesh重合,电脑GPU分不清谁在前谁在后,这种现象,可以称为深度冲突Z-fighting

解决方法1:适当偏移,解决深度冲突,偏移尺寸相对模型尺寸比较小,视觉上两个平面近似还是重合效果。

解决方法2:logarithmicDepthBuffer=true,设置对数深度缓冲区,能缓解深度冲突,但是不能根除冲突。

// WebGL渲染器设置
const renderer = new THREE.WebGLRenderer({
// 设置对数深度缓冲区,优化深度冲突问题
logarithmicDepthBuffer: true
});

5、模型加载进度条

loader.load("../工厂.glb", function (gltf) {
model.add(gltf.scene);
// 加载完成,隐藏进度条
// document.getElementById("container").style.visibility ='hidden';
document.getElementById("container").style.display = 'none';
}, function (xhr) {
const percent = xhr.loaded / xhr.total;
console.log('加载进度' + percent);
})

文章中部分素材选取自Threejs中文网:http://www.webgl3d.cn/

three.js教程8-渲染器WebGLRenderer和前端UI界面的更多相关文章

  1. three.js学习5_渲染器

    THREE.WebGLRenderer WebGL Render 用WebGL渲染出你精心制作的场景 介绍 在之前的介绍中, 已经介绍过场景, 相机, 光源, 有了这些后, 就可以形成一个可观的三维展 ...

  2. 【three.js详解之二】渲染器篇

    [three.js详解之二]渲染器篇   本篇文章将详细讲解three.js中渲染器(renderer)的设置方法. three.js文档中渲染器的分支如下: Renderers CanvasRend ...

  3. jQuery插件jqplot的详细配置说明和渲染器

    jQuery插件jqplot的详细配置说明和渲染器 (2012-08-23 08:57:42) 转载▼ 标签: jqplot 详细配置 渲染器 it 分类: 技术类 jQuery.jqplot插件的官 ...

  4. three.js引擎基础知识—摄像机、场景及渲染器

    一.three.js采用右手坐标系: x轴正方向向右,y轴正方向向上,z轴由屏幕从里向外,如下图右: 二.3D编程三要素:场景.渲染器.摄像机 1.场景:创建的物品和模型都需放入场景中 threejs ...

  5. three.js 第二篇:场景 相机 渲染器 物体之间的关系

    w我用画画来形容他们之间的关系 场景就是纸张 相机就是我们的眼睛 物体就是在我们脑海中构思的那个画面 渲染器就是绘画这个动作 场景(Scene): 初始化:var scene = new THREE. ...

  6. 渲染器的实现(1)--《vue.js设计与实现》

    function renderer(domString, container) { container.innerHTML = domString } let count = ref(1) rende ...

  7. pixi.js教程中文版--基础篇

    前言 Pixi.js使用WebGL,是一个超快的HTML5 2D渲染引擎.作为一个Javascript的2D渲染器,Pixi.js的目标是提供一个快速的.轻量级而且是兼任所有设备的2D库.提供无缝 C ...

  8. Javascript模块化工具require.js教程

    转自:http://www.w3cschool.cc/w3cnote/requirejs-tutorial-1.html, http://www.w3cschool.cc/w3cnote/requir ...

  9. Node.js教程系列~目录

    Node.js这个东西在近几年火起来了,而且会一直火下去,无论在infoq还是在cnblogs,csdn上,都可以到处看到它的样子,它主推的应该就是异步式I/O 吧,是的,设计的很完美,很吸引人,虽然 ...

  10. js模块化/js模块加载器/js模块打包器

    之前对这几个概念一直记得很模糊,也无法用自己的语言表达出来,今天看了大神的文章,尝试根据自己的理解总结一下,算是一篇读后感. 大神的文章:http://www.css88.com/archives/7 ...

随机推荐

  1. set集合的TreeSet类

    TreeSet 类 TreeSet类是Set接口的一个实现类,主要作用是用于对对象的排序以及确定存入对象的唯一性. 它的底层是红黑树,用来确保元素的排序和唯一性的,基于map对象,TreeSet是对T ...

  2. PWA 实践/应用(Google Workbox)

    桌面端 PWA 应用: 移动端添加到桌面: 1 什么是 PWA PWA(Progressive Web App - 渐进式网页应用)是一种理念,由 Google Chrome 在 2015 年提出.P ...

  3. Python 元组完全指南2

    更新元组 更改元组的值 元组是不可更改的,但有一种变通方法.您可以将元组转换为列表,更改列表,然后将列表转换回元组. 示例: x = ("apple", "banana& ...

  4. C# DevExpress下GridControl控件的增删查改

    DevExpress的GridControl控件可以从任何数据源绑定数据并进行增删查改等操作,和VS自带的dataGridView控件对比,GridControl控件可以实现更多自定义的功能,界面UI ...

  5. std::thread 二:互斥量(lock_guard())

    *:使用 lock_guard 后,就不可以使用 lock() 和 unlock() *:lock_guard 和智能指针一样,会自动解锁   #include <iostream> #i ...

  6. Qt数据结构-QString一:常用方法

    一.拼接字符串 拼接字符串有两种方法: +=  .  append QString s; s = "hello"; s = s + " "; s += &quo ...

  7. 基于 Scriptable 从零开始美化iOS桌面(一)

    今天我为大家带来新的作品,iOS17桌面组件神器(Scriptable)原创脚本,精美作品分享!喜欢的话就点关注吧!更多脚本正在路上... * script : ONE-Progress.js * v ...

  8. WGAN

    wgan之前, 原始GAN出现了什么问题? https://www.cnblogs.com/Allen-rg/p/10305125.html 判别器越好,生成器梯度消失越严重 一句话概括:最小化第二种 ...

  9. button submit你以为你阻止了默认事件?

    前言 先解决掉一个误区: 很多人写button的时候,就这样写: <button><botton> 你认为就是默认的submit的时候,这时候就可能出问题了. 当然之所以你没有 ...

  10. docker 应用篇————docker 的文件系统[十]

    前言 简单介绍一下docker的文件系统. 正文 docker 容器启动就是一个文件系统的启动. 在docker中,每一层镜像都具备一些文件. 比如说,有一个centos的镜像. 里面就是一个微小版的 ...