返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript WebGL 图片透明处理的方式
  • 920
分享到

JavaScript WebGL 图片透明处理的方式

2024-04-02 19:04:59 920人浏览 薄情痞子
摘要

目录 引子关于透明 α 混合参考资料 引子 javascript webGL 使用图片疑惑点中提到两张图片叠加,默认情况下,即使有透明的区域

 引子

javascript webGL 使用图片疑惑点中提到两张图片叠加,默认情况下,即使有透明的区域也不会透过看到。现在就来看这个透明的处理。

关于透明

说到透明,在颜色编码中由 Alpha 通道负责,透明度存储方式有:

  • Premultiplied Alpha :表示颜色信息在存储的时候会将透明信息与 RGB 相乘,比如 RGB 是 (1, 1, 1),透明度为 0.5 ,那么存储时为:(0.5, 0.5, 0.5, 0.5) 。
  • Non-premultiplied Alpha : 表示 RGB 与透明信息分别单独存储,不会相乘,比如 RGB 是 (1, 1, 1),透明度为 0.5 ,那么存储时为:(1, 1, 1, 0.5)

WEBGL 纹理预处理使用 pixelStorei 方法指定颜色透明处理方式,如果想要使用 Premultiplied Alpha 方式:

gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);

WebGL 透明处理方式之一是使用 α 混合。

 α 混合

α 混合是使用 α 值(RGBA 中的 A)混合两个以上物体颜色的过程。在这个场景下,绘制了多个纹理且有重叠的地方,假设先绘制纹理 C ,然后再绘制纹理 D ,那么纹理 D 就是源颜色(source color), 纹理 C 就是目标颜色(destination color)。

想要使用该功能,首先要开启:

gl.enable(gl.BLEND);

然后指定混合的方式有:

  • blendEquation
  • blendEquationSeparate
  • blendFunc
  • blendFuncSeparate

blendEquation

void blendEquation(enum mode)

mode 取值有:

  • FUNC_ADD : 源颜色分量与目标颜色分量相加。
  • FUNC_SUBTRACT : 源颜色分量减去目标颜色分量。
  • FUNC_REVERSE_SUBTRACT : 目标颜色分量减去源颜色分量。

这个方法只指定了混合的方式,如果要看到最终的效果,需要跟 blendFuncblendFuncSeparate 方法配合一起使用。看看这篇文章最下面的伪代码逻辑会加深理解。

这是示例。

blendEquationSeparate

void blendEquationSeparate(enum modeRGB, enum modeAlpha)

这个方法的两个参数取值与 blendEquation 方法参数取值一样,区别是把颜色分成了 RGB 和 A 单独的两部分。

blendFunc

void blendFunc(enum sfactor, enum dfactor);
  • sfactor : 常量,源颜色在混合颜色中的权重因子,比 dfactor 多一个值 SRC_ALPHA_SATURATE
  • dfactor : 常量,目标颜色在混合颜色中的权重因子。

混合颜色的计算方法是:

混合后颜色 = 源颜色 * sfactor + 目标颜色 * dfactor

这里计算针对的是每个颜色分量,下面设定 S 代码源颜色,D 代表目标颜色,各个分量用小写 rgba 表示,下面看看权重因子部分常量取值:

常量R 分量G 分量B 分量A 分量
ZERO0000
ONE1111
SRC_COLORS.rS.gS.bS.a
ONE_MINUS_SRC_COLOR(1-S.r)(1-S.g)(1-S.b)(1-S.a)
DST_COLORD.rD.gD.bD.a
ONE_MINUS_DST_COLOR(1-D.r)(1-D.g)(1-D.b)(1-D.a)
SRC_ALPHAS.aS.aS.aS.a
ONE_MINUS_SRC_ALPHA(1-S.a)(1-S.a)(1-S.a)(1-S.a)
DST_ALPHAD.aD.aD.aD.a
ONE_MINUS_DST_ALPHA(1-D.a)(1-D.a)(1-D.a)(1-D.a)

还有可以配合方法 blendColor(red, green, blue, alpha) 的常量取值:

常量R 分量G 分量B 分量A 分量
CONSTANT_COLORredgreenbluealpha
ONE_MINUS_CONSTANT_COLOR(1-red)(1-green)(1-blue)(1-alpha)
CONSTANT_ALPHAalphaalphaalphaalpha
ONE_MINUS_CONSTANT_ALPHA(1-alpha)(1-alpha)(1-alpha)(1-alpha)

如果不使用 blendColor 指定分量,也是可以使用这些常量,因为有默认值:

gl.getParameter(gl.BLEND_COLOR) // 默认对应分量都是 0

关于第一个参数多的取值 SRC_ALPHA_SATURATE

常量R 分量G 分量B 分量A 分量
SRC_ALPHA_SATURATEmin(S.a, 1-D.a)min(S.a, 1-D.a)min(S.a, 1-D.a)1

下面这些是示例:

  • 没有使用 blendColor 方法的示例。
  • 配合使用 blendColor 方法的示例。

blendFuncSeparate

void blendFuncSeparate(enum srcRGB, enum dstRGB, enum srcAlpha, enum dstAlpha)

这个方法参数取值与 blendFunc 方法参数取值一样,区别是把颜色分成了 RGB 和 A 单独的两部分。

Back to top

参考资料

WebGL绘制详解之七:Blend

Texture Maps

Texture Mapping Using Images

WebGL and Alpha

Transparency (and Alpha Blending)

WEBGL, BLENDING, AND WHY YOU'RE PROBABLY DOING IT WRONG

到此这篇关于JavaScript WebGL 图片透明处理的文章就介绍到这了,更多相关js图片透明处理内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JavaScript WebGL 图片透明处理的方式

本文链接: https://lsjlt.com/news/162682.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JavaScript WebGL 图片透明处理的方式
    目录 引子关于透明 α 混合参考资料 引子 JavaScript WebGL 使用图片疑惑点中提到两张图片叠加,默认情况下,即使有透明的区域...
    99+
    2024-04-02
  • ppt设置图片透明度的方法
    小编给大家分享一下ppt设置图片透明度的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!方法:首先打开ppt,导入图片;然后点击“插入”-“形状”-“矩形”,绘...
    99+
    2023-06-14
  • css设置图片透明度的方法
    这篇文章主要介绍了css设置图片透明度的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在css中,可以使用opacity属性设置图片的透明度,语法“opacity:数值”...
    99+
    2023-06-14
  • java 实现图片圆角处理、背景透明化
    目录java 图片圆角处理、背景透明化java 的图片处理解析java 图片圆角处理、背景透明化 public void makeRoundedCorner(File...
    99+
    2024-04-02
  • Android编程实现图片透明的方法
    本文实例讲述了Android编程实现图片透明的方法。分享给大家供大家参考,具体如下: 今天弄了一个图片的透明方法。 效果图: 目录结构 main.xml <?...
    99+
    2022-06-06
    方法 图片 Android
  • html中img图片设置透明度的方法
    这篇“html中img图片设置透明度的方法”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“html中img图片设置透明度的方法”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所...
    99+
    2023-06-06
  • Android编程实现设置按钮背景透明与半透明及图片背景透明的方法
    本文实例讲述了Android编程实现设置按钮背景透明与半透明及图片背景透明的方法。分享给大家供大家参考,具体如下: Button或者ImageButton的背景设为透明或者半透...
    99+
    2022-06-06
    方法 图片 按钮 Android
  • Java操作透明图片并保持背景透明的实现
    目录Java操作透明图片并保持背景透明Java图片背景透明及透明度处理Java操作透明图片并保持背景透明 最近的一个需求,需要对背景为透明的图片加汉字,加完后会出现背景变黑的情况,附...
    99+
    2024-04-02
  • html如何设置图片的透明度
    这篇文章将为大家详细讲解有关html如何设置图片的透明度,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 html图片设置透明度的方法:1、在i...
    99+
    2024-04-02
  • css如何设置图片的透明度
    这篇文章主要介绍了css如何设置图片的透明度,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。css的选择器有哪些css的选择器可以分为三大类,即id选择器、class选择器、标...
    99+
    2023-06-14
  • CSS中半透明样式如何处理
    这篇文章主要讲解了“CSS中半透明样式如何处理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS中半透明样式如何处理”吧!     ...
    99+
    2024-04-02
  • 使用图片透明的css写法教程
    本篇内容介绍了“使用图片透明的css写法教程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!代码如下:html>body .naver_...
    99+
    2023-06-08
  • JS实现IE6下PNG图片透明的方法是什么
    JS实现IE6下PNG图片透明的方法是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。和大家重点讨论一下用Javascript实现IE6...
    99+
    2024-04-02
  • springMVC图片上传的处理方式详解
    本文实例为大家分享了springMVC图片上传的处理方式,供大家参考,具体内容如下首先需要依赖的jar包:<dependency>  <groupId>commons-io</groupId>  <...
    99+
    2023-05-31
    springmvc 图片上传 sprin
  • Java 生成透明图片的设置实现demo
    设置图片透明 ...
    99+
    2023-02-08
    Java 生成透明图片 Java 设置图片透明
  • Vue中设置背景图片和透明度的简单方法
    今天来为我自己的项目设置一个好看的登录页面之前是这样的: 乍一看感觉还行,越看越难受,弄一个好看的图片来做登录页面的背景提上日程,哈哈哈哈~ 让我们先来看一下设置之后的效果: 怎...
    99+
    2023-01-15
    vue设置整个背景图片 vue透明度怎么调 vue设置背景图
  • 如何解决IE6下PNG图片透明的问题
    本篇内容介绍了“如何解决IE6下PNG图片透明的问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!PNG图...
    99+
    2024-04-02
  • Linux命令行处理图片方式(图片格式转换、缩放、旋转等)
    目录linux命令行处理图片1. 转换图像格式2. 缩放图像3. 旋转图像Linux命令行批处理图片,批量去除截图的无用部分总结Linux命令行处理图片 Centos OS 中默认安装了 ImageMagick,Imag...
    99+
    2023-06-17
    Linux命令行处理图片 Linux图片格式转换 Linux图片缩放 Linux图片旋转
  • css+filter如何实现简单的图片透明效果
    这篇文章给大家分享的是有关css+filter如何实现简单的图片透明效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。完成简单的透明度控制功能使用filter的功能对图片元素进行...
    99+
    2024-04-02
  • Python利用matplotlib生成图片背景及图例透明的效果
    前言 最近工作中遇到一个需求,在使用matplotlib生成图片,想要背景透明,而且图例部分也显示透明效果,通过查找相关资料找到了大概的设置方法,特此记录,方便自己或者有需要的朋友们参考学习。 示例代码 ...
    99+
    2022-06-04
    图例 透明 背景
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作