three.js学习5_渲染器
THREE.WebGLRenderer
WebGL Render 用WebGL渲染出你精心制作的场景

介绍
在之前的介绍中, 已经介绍过场景, 相机, 光源, 有了这些后, 就可以形成一个可观的三维展示效果, 但是, 若想让它展示在网页上, 就需要渲染器渲染到网页上
那WebGL又是啥, 这里借用百度的一段解释
WebGL(全写Web Graphics Library)是一种3D绘图协议,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTML5 Canvas提供硬件3D加速渲染,这样Web开发人员就可以借助系统显卡来在浏览器里更流畅地展示3D场景和模型了,还能创建复杂的导航和数据视觉化。显然,WebGL技术标准免去了开发网页专用渲染插件的麻烦,可被用于创建具有复杂3D结构的网站页面,甚至可以用来设计3D网页游戏等等
在本文中, 主要描述WebGLRenderer的一些属性方法, 后续再写各大元素整合的博文.
构造函数的使用
| 参数 | 含义 | 默认值 |
|---|---|---|
| canvas | 一个供渲染器绘制其输出的canvas它和下面的domElement属性对应。 如果没有传这个参数,会创建一个新canvas | 无 |
| context | 可用于将渲染器附加到已有的渲染环境(RenderingContext)中 | null |
| precision | 着色器精度. 可以是 "highp", "mediump" 或者 "lowp". 如果设备支持,默认为"highp" . 点击here 查看"应该避免的事" | highp |
| alpha | canvas是否包含alpha (透明度) | false |
| premultipliedAlpha | renderer是否假设颜色有 premultiplied alpha | true |
| antialias | 是否执行抗锯齿(效果更好, 开销更大) | false |
| stencil | 绘图缓存是否有一个至少8位的模板缓存(stencil buffer)) | true |
| preserveDrawingBuffer | 是否保留缓直到手动清除或被覆盖 | false |
| powerPreference | 提示用户代理怎样的配置更适用于当前WebGL环境。 可能是"high-performance", "low-power" 或 "default" | default |
| failIfMajorPerformanceCaveat | 检测到低性能时渲染器创建是否失败。 | false |
| depth | 绘图缓存是否有一个至少6位的深度缓存(depth buffer) | true |
| logarithmicDepthBuffer | 是否使用对数深度缓存。如果要在单个场景中处理巨大的比例差异,就有必要使用 | false |
其中, 大部分是平时用不上的, 很多我也还没具体使用过, 经常使用的有alpha和antialias, alpha可以让3维图透明, antialias可以让3维图变得更加清晰, 同时会让渲染器的压力加大.
属性
| 属性名: 类型 | 含义 | 默认值 |
|---|---|---|
| autoClear : Boolean | 定义渲染器是否在渲染每一帧之前自动清除其输出 | |
| autoClearColor : Boolean | 如果autoClear为true, 定义renderer是否清除颜色缓存 | true |
| autoClearDepth : Boolean | 如果autoClear是true, 定义renderer是否清除深度缓存 | true |
| autoClearStencil : Boolean | 如果autoClear是true, 定义renderer是否清除模板缓存 | true |
| debug.checkShaderErrors : Boolean | 如果checkShaderErrors为true,定义是否检查材质着色器程序 编译和链接过程中的错误。 禁用此检查生产以获得性能增益可能很有用。 强烈建议在开发期间保持启用这些检查。 如果着色器没有编译和链接 - 它将无法工作,并且相关材料将不会呈现 | true |
| capabilities : Object | 一个包含当前渲染环境(RenderingContext)的功能细节的对象。 | |
| clippingPlanes : Array | 用户自定义的剪裁平面,在世界空间中被指定为THREE.Plane对象。 这些平面全局使用。空间中与该平面点积为负的点将被切掉 | [] |
| domElement : DOMElement | 一个canvas,渲染器在其上绘制输出。渲染器的构造函数会自动创建(如果没有传入canvas参数);你需要做的仅仅是像下面这样将它加页面里去: | |
| extensions : Object | extensions.get方法的包装, 用于检查是否支持各种WebGL扩展 | |
| gammaFactor : Float | 2 | |
| outputEncoding : number | 定义渲染器的输出编码。如果渲染目标已经被设置使用。setrendertarget然后渲染目标。纹理。编码将被使用 | THREE. LinearEncoding |
| info : Object | 一个对象,包含有关图形板内存和渲染过程的一系列统计信息。这些信息可用于调试或仅仅满足下好奇心 | |
| localClippingEnabled : Boolean | 定义渲染器是否考虑对象级剪切平面 | false |
| maxMorphTargets : Integer | 一个着色器中允许的最大MorphTargets数,切记标准材质只允许8个MorphTargets。 | 8 |
| maxMorphNormals : Integer | 色器中允许的最大MorphNormal数。 切记标准材质只允许4个MorphNormal。 | 4 |
| physicallyCorrectLights : Boolean | 是否使用物理上正确的光照模式 | false |
| properties : Object | 渲染器内部使用,以跟踪各种子对象属性。 | |
| renderLists : WebGLRenderLists | 在内部用于处理场景渲染对象的排序 | |
| shadowMap : WebGLShadowMap | 如果使用,它包含阴影贴图的引用。 | |
| shadowMap.enabled : Boolean | 如果设置开启,允许在场景中使用阴影贴图 | false |
| shadowMap.autoUpdate : Boolean | 启用场景中的阴影自动更新 | true |
| shadowMap.needsUpdate : Boolean | 当被设为true, 场景中的阴影贴图会在下次render调用时刷新(如果你已经禁用了阴影贴图的自动更新(shadowMap.autoUpdate = false), 那么想要在下一次渲染时更新阴影的话就需要将此值设为true) | false |
| shadowMap.type : Integer | 定义阴影贴图类型 (未过滤, 关闭部分过滤, 关闭部分双线性过滤) | |
| sortObjects : Boolean | 定义渲染器是否应对对象进行排序 | true |
| state : Object | 包含设置WebGLRenderer.context状态的各种属性的函数 | |
| toneMapping : Constant | NoToneMapping | |
| toneMappingExposure : Number | 色调映射的曝光级别 | 1 |
| xr : WebXRManager | 提供对渲染器的WebXR相关接口的访问。 |
capabilities : Object
一个包含当前渲染环境(RenderingContext)的功能细节的对象。
- floatFragmentTextures: 环境是否支持OES_texture_float扩展。 根据WebGLStats, 截至2016年2月,超过95%的支持WebGL的设备支持此功能
- floatVertexTextures: 如果floatFragmentTextures和vertexTextures都是true, 则此值为true
- getMaxAnisotropy(): 返回最大可用各向异性。
- getMaxPrecision(): 返回顶点着色器和片元着色器的最大可用精度。
- isWebGL2: true if the context in use is a WebGL2RenderingContext object.
- logarithmicDepthBuffer: 如果logarithmicDepthBuffer在构造器中被设为true且 环境支持EXT_frag_depth扩展,则此值为true 根据WebGLStats, 截至2016年2月, 约66%的支持WebGL的设备支持此功能
- maxAttributes: gl.MAX_VERTEX_ATTRIBS的值
- maxCubemapSize: gl.MAX_CUBE_MAP_TEXTURE_SIZE 的值,着色器可使用的立方体贴图纹理的最大宽度高度
- maxFragmentUniforms: gl.MAX_FRAGMENT_UNIFORM_VECTORS的值,片元着色器可使用的全局变量(uniforms)数量
- maxTextureSize: gl.MAX_TEXTURE_SIZE的值,着色器可使用纹理的最大宽度高度
- maxTextures: *gl.MAX_TEXTURE_IMAGE_UNITS的值,着色器可使用的纹理数量
- maxVaryings: gl.MAX_VARYING_VECTORS的值,着色器可使用矢量的数量
- maxVertexTextures: gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS的值,顶点着色器可使用的纹理数量。
- maxVertexUniforms: gl.MAX_VERTEX_UNIFORM_VECTORS的值,顶点着色器可使用的全局变量(uniforms)数量
- precision: 渲染器当前使用的着色器的精度
- vertexTextures: 如果 .maxVertexTextures : Integer大于0,此值为true (即可以使用顶点纹理)
info : Object
一个对象,包含有关图形板内存和渲染过程的一系列统计信息。这些信息可用于调试或仅仅满足下好奇心。改对象包含以下字段:
- memory:
- geometries
- textures
- render:
- calls
- triangles
- points
- lines
- frame
- programs
默认情况下,每次调用渲染时这些数据都会重置。 但当时用一个或多个镜像时,最好使用自定义模式重置它们:renderer.info.autoReset = false; renderer.info.reset();
常见代码
renderer = new THREE.WebGLRenderer({
antialias: true,
});
renderer.setPixelRatio( window.devicePixelRatio );
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );
three.js学习5_渲染器的更多相关文章
- 「Django」rest_framework学习系列-渲染器
渲染器:作用于页面,JSONRenderer只是JSON格式,BrowsableAPIRenderer有页面,.AdminRenderer页面以admin形式呈现(需要在请求地址后缀添加?fromat ...
- jQuery插件jqplot的详细配置说明和渲染器
jQuery插件jqplot的详细配置说明和渲染器 (2012-08-23 08:57:42) 转载▼ 标签: jqplot 详细配置 渲染器 it 分类: 技术类 jQuery.jqplot插件的官 ...
- CSharpGL(34)以从零编写一个KleinBottle渲染器为例学习如何使用CSharpGL
CSharpGL(34)以从零编写一个KleinBottle渲染器为例学习如何使用CSharpGL +BIT祝威+悄悄在此留下版了个权的信息说: 开始 本文用step by step的方式,讲述如何使 ...
- 【three.js详解之二】渲染器篇
[three.js详解之二]渲染器篇 本篇文章将详细讲解three.js中渲染器(renderer)的设置方法. three.js文档中渲染器的分支如下: Renderers CanvasRend ...
- three.js引擎基础知识—摄像机、场景及渲染器
一.three.js采用右手坐标系: x轴正方向向右,y轴正方向向上,z轴由屏幕从里向外,如下图右: 二.3D编程三要素:场景.渲染器.摄像机 1.场景:创建的物品和模型都需放入场景中 threejs ...
- three.js 第二篇:场景 相机 渲染器 物体之间的关系
w我用画画来形容他们之间的关系 场景就是纸张 相机就是我们的眼睛 物体就是在我们脑海中构思的那个画面 渲染器就是绘画这个动作 场景(Scene): 初始化:var scene = new THREE. ...
- 【十天自制软渲染器】DAY 01:图形学学习建议与环境搭建
推荐直接阅读博客原文,更新更及时,阅读体验更佳 「十天自制软渲染器」这个标题我承认标题党了.在对图形学一无所知的情况下想十天自制一个软渲染器,就好似一节课没上过却试图一个晚上看完<30 天精通 ...
- Restful API学习Day5 - DRF之限制 分页 解析器和渲染器
参考文档: Django REST framework基础:认证.权限.限制 Django REST framework基础:分页 Django REST framework基础:解析器和渲染器 一. ...
- Three.js学习笔记 – “我和小伙伴都惊呆了”的特效和Three.js初探
什么是Three.js three.js是JavaScript编写的WebGL第三方库.提供了非常多的3D显示功能.Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它创建各种三维场景,包 ...
随机推荐
- PAT-B1009 说反话 - 字符串反转
1009 说反话 (20分) 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串.字符串由若干单词和若干空格组 ...
- 招新裁老,两面派互联网大厂,培训三个月,就拿15K,凭什么?
看到一位朋友在发帖子求问:亲身经历,(如有谎言我名字倒过来写)一个大学同学18年毕业的.在兰州一个二本学的兽医农牧,毕业难找工作,去深圳一个机构培训了三个月吧,然后就去做大数据 算法了,然后又去做ja ...
- 【转】Tomcat搭建文件服务器
http://blog.csdn.net/yin_jw/article/details/43524659 1. 配置在tomcat目录下 直接把文件放在 tomcat6/webapps/ROOT 目录 ...
- 如何使用zabbix监控公网环境的云服务器(从小白到高级技术顾问!!!)
问题:当我们在本地部署了一台Zabbix服务器后,想要对云上的服务器做监控.但是zabbix一个在内网,云服务器一个在公网,网络环境不同该如何解决?能否检测到云服务器数据? 思路:使用NAT技术,将本 ...
- ctf常见源码泄露
前言 在ctf中发现很多源码泄露的题,总结一下,对于网站的搭建要注意删除备份文件,和一些工具的使用如git,svn等等的规范使用,避免备份文件出现在公网 SVN源码泄露 原理 SVN(subversi ...
- linux常用命令及配置文件
linux常用命令 基于centos 以我自己实际使用情况来说,从最常用的开始开始,大致如下: 1. 基本命令 cd ls ll(ls -l 别名 ) cat vi/vim touch echo mk ...
- 新三种求数列中值SQL之效率再比拼
在 https://www.cnblogs.com/xiandedanteng/p/12677688.html 中我列举了三种求中值方案,其中日本人MICK的做法因为不适用于二百万结果集而放弃,取而 ...
- Tomcat7.0.99集群使用Redis共享session方案
以前配置过给予多播的session共享方案,这回再配置一个redis共享session的. 先小小的炫耀一下: 相信大家要做Tomcat+Redis+session配置,遇到的头号麻烦就是编译的tom ...
- SSM框架中添加写日志功能
前提:要导入log4j的jar包 在web.xml中输入: <!--日志加载--> <context-param> <param-name>log4jConfigL ...
- 添加到web.config文件里的用户自定义翻页控件
<pages> <controls> <add tagPrefix="ucl" tagName="Pager_Backstage" ...