学习WebGL_013_材质

作者: DSLMing
时间: 2019.10.31

参考:
FunWithWebGL2 023 - Viva La Fungi

材质

材质这个概念是虚构出来的,WebGL 中并没有这个概念。这里提出来是为了将部分WebGL的参数抽象出来成为一个集合。

class Material {
  constructor() {
    // 对光照的反应
    this.shader = null;
    this.uniforms = [];
    // 剔除
    this.useCulling = CULLING_STATE;
    // 融合
    this.useBlending = BLENDING_STATE;
    this.useModelMatrix = true;
    this.useNormalMatrix = false;
    this.drawMode = gl.TRIANGLES;
	}
}

1)对光照的反应
ambient(环境光)、diffuse(漫反射光)、specular(镜面高光), 该部分由shader代码负责。

2)背面剔除
一个封闭不透明的几何体一定是由很多三角形拼接而成, 背向我们的三角形,一般来说都是看不见的,为了提高运行效率可以不进行绘制,这就是背面剔除技术。
在这里插入图片描述

WebGL中,设定一个三角形三个点的连接顺序:

// 逆时针顶点顺序为正面
gl.frontFace(gl.CCW);
// 顺时针顶点顺序为正面
gl.frontFace(gl.CW);
// 开启背面剔除
gl.enable(gl.CULL_FACE);
// 剔除背面
gl.cullFace(gl.BACK);

3)融合
把某一像素位置上原来的颜色和将要画上去的颜色,通过某种方式混在一起,从而实现特殊的效果。目标颜色可以表达为:

// 源颜色: (Rs, Gs, Bs, As)
// 目标颜色: (Rd, Gd, Bd, Ad)
// 源因子: (Sr, Sg, Sb, Sa)
// 目标因子 :(Dr, Dg, Db, Da)
R = RsSr+RdDr
G = GsSg+GdDg
B = BsSb+BdDb
A = AsSa+AdDa
目标颜色=(R,G,B,A)

混合值:

名字
ZERO0, 0, 0, 0
ONE1, 1, 1, 1
SRC_COLORsR, sG, sB, sA
DST_COLORdR, dG, dB, dA
ONE_MINUS_SRC_COLOR1-sR, 1-sG, 1-sB, 1-sA
ONE_MINUS_DST_COLOR1-dR, 1-dG, 1-dB, 1-dA
SRC_ALPHAsA, sA, sA, sA
DST_ALPHAdA, dA, dA, dA
ONE_MINUS_SRC_ALPHA1-sA, 1-sA, 1-sA, 1-sA
ONE_MINUS_DST_ALPHA1-dA, 1-dA, 1-dA, 1-dA
// 启用混合
glEnable(GL_BLEND);
// 关闭混合
glDisable(GL_BLEND);
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)

4)深度检测
深度检测不属于材质部分。但是和混合和背面剔除都是关于WebGL的设置,这里就顺带提一下。该功能启用了之后,OpenGL在绘制的时候就会检查,当前像素前面是否有别的像素,如果别的像素挡道了它,那它就不会绘制,也就是说,OpenGL就只绘制最前面的一层。

// 深度检测开启
gl.enable(gl.DEPTH_TEST);
// 深度评价函数
gl.depthFunc(gl.LEQUAL)
参考

OPENGL——背面剔除
WebGL学习笔记(四):绘图
glBlendFunc颜色混合

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: WebGL 示例 zip 是一个压缩文件,其中包含了一些用于展示 WebGL 技术的示例代码和资源。WebGL 是一种基于 JavaScript 的图形渲染技术,可以在网页上实现高性能的 3D 图形渲染。WebGL 示例 zip 提供了一些实际的代码样例,可以帮助开发者更好地理解和使用 WebGL 技术。 WebGL 示例 zip 中通常包含了一些 HTML 文件、JavaScript 文件和一些资源文件,如纹理图片、着色器代码等。这些示例代码能够展示出一些常见的 WebGL 功能和效果,如加载和渲染 3D 模型,实现光照效果,创建交互式的 WebGL 应用等。 使用 WebGL 示例 zip 可以方便地浏览和学习各种 WebGL 技术的实现方法和应用场景。可以通过解压缩示例代码,打开其中的 HTML 文件来查看示例效果。在每个示例中,可以看到对应的 JavaScript 代码,了解实现该效果的具体方法和代码结构。 通过参考和学习这些示例代码,开发者可以更好地理解 WebGL 技术的原理和应用,有助于快速上手和开发自己的 WebGL 应用。同时,WebGL 示例 zip 中的代码和资源也可以作为自己项目中的参考和借鉴,加快项目的开发进展。 总之,WebGL 示例 zip 提供了一种便捷的方式,帮助开发者学习和应用 WebGL 技术。以其丰富的示例代码和资源为基础,可以加速开发者对 WebGL 的理解和实践。 ### 回答2: WebGL 是一种用于在Web浏览器中呈现3D图形的JavaScript API。WebGL 示例 Zip 是一种以压缩包形式提供的WebGL示例合集。这些示例通常包含一些基本的3D图形渲染技术和效果的实现,旨在帮助开发者更好地了解和学习WebGL的使用。 WebGL示例Zip通常包含一个或多个HTML文件、JavaScript文件和图像文件。通过解压缩这个压缩包,开发者可以在本地环境中运行这些示例,并通过查看和修改源代码,学习如何使用WebGL API来创建各种3D场景和效果。 WebGL示例Zip可供初学者和有经验的开发者使用。对于初学者来说,这些示例提供了一个直观的教学工具,可以通过运行和改变示例代码来学习不同的WebGL技术和概念。对于有经验的开发者来说,这些示例可以作为参考和灵感的源泉,帮助他们实现自己的创意和项目。 WebGL示例Zip通常涵盖了一系列主题,例如基本3D物体渲染、光照和阴影、纹理贴图、相机和视角控制等。通过研究这些示例,开发者可以学习如何使用WebGL API中的不同函数和方法来实现这些效果。通过调整和修改示例代码,开发者还可以尝试自己的创意和实现独特的3D效果。 总而言之,WebGL示例Zip是一个有用的资源,可以帮助开发者学习和掌握WebGL的基础知识和技术。通过实践和改变示例代码,开发者可以逐渐探索和理解WebGL在Web图形编程中的应用。 ### 回答3: WebGL示例ZIP是一种压缩文件,其中包含了用于展示WebGL技术的示例代码和相关资源。WebGL是一种基于JavaScript的功能强大的图形库,它可以在网页浏览器中实现3D图形渲染。 当您下载WebGL示例ZIP文件后,您可以将其解压缩到您的计算机上。解压后,您将会看到一些文件和文件夹。通常,这些文件包括HTML文件、JavaScript文件和资源文件(如图像文件、模型文件等)。 在这些示例代码中,您将会发现一些用于创建和渲染3D图形的JavaScript函数和方法。这些示例代码通常包含一些基本的3D图形操作,如创建立方体、球体、平面等等。您还可以在这些示例代码中找到一些用于调整和控制3D图形效果的参数,如旋转、缩放和光照等。 通过运行这些示例代码,您可以在网页浏览器中实时查看并交互这些3D图形。您可以通过键盘和鼠标操作来旋转、平移和缩放这些图形,或者改变其外观和材质。 WebGL示例ZIP提供了一个学习和实验WebGL技术的良好起点。您可以通过查看和分析这些示例代码,了解WebGL编程的基本原理和技巧。同时,您也可以使用这些示例代码作为基础,自己创建和组合各种复杂的3D图形效果。 总之,WebGL示例ZIP是一个方便的资源包,它提供了丰富的示例代码和资源,帮助您更好地学习和掌握WebGL技术。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值