前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WebGL中着色器shader的处理方法

WebGL中着色器shader的处理方法

作者头像
acoolgiser
发布2019-01-17 10:44:31
1.5K0
发布2019-01-17 10:44:31
举报
文章被收录于专栏:acoolgiser_zhuanlanacoolgiser_zhuanlan

关于着色器

WebGL中,所谓的固定渲染管线是不存在的。估计会有人问,什么是固定渲染管线?先来简单说明一下。

固定渲染管线,简单来说,就是3d渲染所进行的一连串的计算流程,就像流水线一样。(说的有点太简单了。)

固定渲染管线中,上次所说的模型,视图,投影的坐标变换都会替我们完成。不需要理解细节,只需要知道所有的这些坐标变换都包含在里面,都会帮我们计算好。

如果有了固定渲染管线,编写程序就比较容易了,因为所有的变换都是由固定渲染管线来完成的,但是缺点就是自由度低。固定渲染管线只能完成一些最基本的操作,如果想要做一些特殊的处理,就比较麻烦了。

好了,固定渲染管线就说到这里了。

前面说了,WebGL中不存在固定渲染管线。也就是说,坐标变换必须全部由自己来做。而且,这个记述了坐标变换的机制就叫做着色器(Shader)。

这样可以由程序员控制的机制叫做可编辑渲染管线。而着色器又有 处理几何图形顶点的顶点着色器和处理像素的片段着色器两种类型。

由于WebGL中没有固定管线,所以必须准备好顶点着色器和片段着色器。

固定渲染管线与可编程渲染管线的区别: https://www.cnblogs.com/lihonglin2016/p/6270771.html

着色器的处理方法

顶点着色器和片段着色器要怎么准备呢?

实际上,着色器的添加可以有多种做法。着色器是由程序员自己编写的,而且着色器的代码就是简单的字符串而已。所以,不管用什么方法,只要把这个着色器字符串传给程序就可以了。

最简单的方法,就是把着色器记录在HTML中。使用这种方法的话,是利用HTML的script标签来做的。下面是一个简单的例子。

写在HTML中:

代码语言:javascript
复制
<script id="vshader" type="x-shader/x-vertex">
    ※顶点着色器
</script>
 
<script id="fshader" type="x-shader/x-fragment">
    ※片段着色器
</script>
代码语言:javascript
复制
canvas也一样,为了在javascript中可以调用,给script标签加上了id属性。另外,type属性是和javascript不同的,不要误认为是javascript代码。

>>指定type属性的理由

type属性指定了[x-shader/x-vertex]和[x-shader/x-fragment],这并不是HTML中定义的正式的写法。但是一般的浏览器如果遇到不识别的标签的话会无视掉的,浏览器不会认为这是javascript代码的。浏览器只会把它当成无意义的字符串,而程序中则可以使用标签里面的内容。

另一个,也可以不使用script标签来做。

主要是因为着色器的代码就是简单的字符串,可以直接在javascript内部定义字符串。这样的话,着色器被定义在了javascript文件中,HTML的代码就变的简单多了,并不是说,这种做法比前一种做法好。

还不懂啥意思?懵?

注意红色那段话,通俗讲,其实就是在script标签中正是因为定义了属性type="x-shader/x-fragment",浏览器就不会认为这是一个单独的新的script标签(js文件),而是一段用script首尾标签包含起来的普通字符串文本,在程序代码中可以通过id属性来访问到script里的这段文本。

个人觉得是为了结构化代码,方便管理。有待于继续深入理解学习!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年01月05日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于着色器
  • 着色器的处理方法
    • 还不懂啥意思?懵?
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档