社区首页 >问答首页 >如何使用THREE.ShaderLib创建自定义着色器

如何使用THREE.ShaderLib创建自定义着色器
EN

Stack Overflow用户
提问于 2018-03-01 23:35:23
回答 1查看 1.9K关注 0票数 2

我一直在尝试学习THREEJS着色器材质。到目前为止,我了解了uniforms、vertexShader和fragmentShader在投影和着色glsl和webgl世界中的顶点和碎片方面所起的作用。我一直在努力寻找一些使用THREE.ShaderLib扩展THREEJS的ShaderMaterial的好例子。

假设我想扩展一个标准的threejs材质(THREE.ShaderLib' standard ')来编写envmap纹理,这是可能的吗?或者我绝对有必要从头开始写所有的东西?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-02 00:31:14

着色器只是字符串,这取决于您如何处理它们以及如何获取它们。话虽如此,three.js有许多工具可以帮助您更好地构建它们。

在最高级别,有一种THREE.Material形式的抽象。其中描述抽象属性,三个配置引擎盖下的着色器。

代码语言:javascript
代码运行次数:0
复制
//no shaders involved
var redPlastic = new THREE.MeshStandardMaterial({
   color: 'red',
   roughness: notVeryRough
}) 

ShaderMaterial希望您编写原始的GLSL,但仍然包含一些否则您必须手动完成的内容。所以“从头开始写作”不是完全正确的。使用RawShaderMaterial,您可以从头开始编写所有内容。THREE.ShaderMaterial

代码语言:javascript
代码运行次数:0
复制
varying vec2 vUv;
void main(){
  vUv = uv; // <- magic! where does uv come from?
  vec4 worldPosition = modelMatrix * vec4( position, 1.); // <- more magic! where do modelMatrix and position come from?
  gl_Position = projectionMatrix * viewMatrix * worldPosition; // more!
}

在运行时,当三个名称空间被编译并包含在一个页面上时,这三个名称空间就有了THREE.ShaderChunk字典。这些是GLSL的各种命名片段,所有的材料都是从这些片段中构建出来的。

可以从这些片段的源文件中复制它们,并将它们粘贴到您自己的着色器文件或字符串中。

您可以使用字符串模板来编写它:

代码语言:javascript
代码运行次数:0
复制
`${THREE.ShaderChunk.some_chunk}
 void main(){
 ...
 ${anotherChunk}
 gl_Position = ...
`

但是如果你想扩展内置的材质,有一个叫做onBeforeCompile的材质的(IMHO buggy and wonky:)功能。这样,您就可以将回调传递给任何内置材质,并在编译之前获取着色器对象。在这里,你可以注入你自己的glsl,交换出块或任何你能想到的对字符串做的事情。

为了使用它,你需要熟悉从https://github.com/mrdoob/three.js/tree/dev/src/renderers/shaders/ShaderChunk构建的着色器的结构。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49060488

复制
相关文章
WebGL学习笔记 | 创建着色器程序
今天本想偷个懒不发文的,在朋友圈看下到下几句话,还是忍不住,看来我得把自己的位定好,坚定不移.
张晓衡
2019/09/11
9850
WebGL学习笔记 | 创建着色器程序
Vue如何创建自定义指令?
什么是vue指令了? Vue自带的指令很多,v-for/v-if/v-else/v-else-if/v-model/v-bind/v-on/v-show/v-html/v-text... 原来这就是指令。
Javanx
2019/09/04
1.8K0
Vue如何创建自定义指令?
绘图技巧|如何创建自定义colormap
之前悄悄送了一次可视化书籍,大家都留言催更可视化的推文,这就来了。之所以推这篇文章,是因为看到了一个不错的colormap,苦于没有源文件,只能截图然后识别出颜色,但识别效果看起来又没那么好了(如下图)。
bugsuse
2022/09/23
1.3K0
绘图技巧|如何创建自定义colormap
使用 key paths 创建自定义查询函数
作为一个相当严格,静态编译的语言,Swift 可能不会在语法自定义方面提供许多渠道,但这实际上确正好相反。通过如何在 Swift 中自定义操作符,Swift 中 key paths 的能力,函数/结果构建器 等功能,我们有很多机会为特定用例进行调整 Swift 的语法。
Swift社区
2021/11/26
2K0
OpenGL ES 3.0 使用着色器(OC)
在iOS需要先引用 <OpenGLES/ES2/gl.h> <GLKit/GLKit.h>
大壮
2020/06/16
1.2K0
OpenGL ES 3.0 使用着色器(OC)
使用 key paths 创建自定义查询函数
作为一个相当严格,静态编译的语言,Swift可能不会在语法自定义方面提供许多渠道,但这实际上确正好相反。通过自定义和重载运算符,key paths,函数/结果构建器 等功能,我们有很多机会为特定用例进行调整 Swift 的语法。
韦弦zhy
2021/07/01
1.3K0
Python基础:创建并使用自定义模块
Python模块只是一个Python文件或一组Python文件。使用Python模块,可以编写可重用和更有组织的代码。例如,可以编写一个执行CSV文件处理任务的通用Python模块,世界各地的数据科学家都可以使用该模块来读取、写入和操作CSV文件。
fanjy
2022/06/04
1.2K0
Python基础:创建并使用自定义模块
使用Java创建公众号自定义菜单
相信大家在微信公众号开发中都会遇到这样一个问题:启用服务器配置后,原先设置的公众号菜单都失效了,变成了下面这样:
小诸葛
2020/04/14
1.5K0
使用Java创建公众号自定义菜单
使用VBA自定义函数创建数字序列
如果是手工操作,当数据间隔很大或者数据较多时很麻烦,也需要相当长的时间才能完成。然而,可以使用一个由VBA编写的自定义函数轻松实现。
fanjy
2022/11/16
1.1K0
使用VBA自定义函数创建数字序列
OpenGL ES _ 着色器_ 顶点着色器详解
提醒广大网友,当你看到这篇文章的时候,以后写的关于OpenGL 更多的便是代码实战了!
酷走天涯
2018/09/14
2.1K0
OpenGL ES _ 着色器_ 顶点着色器详解
WPF 像素着色器入门:使用 Shazzam Shader Editor 编写 HLSL 像素着色器代码
HLSL,High Level Shader Language,高级着色器语言,是 Direct3D 着色器模型所必须的语言。WPF 支持 Direct3D 9,也支持使用 HLSL 来编写着色器。你可以使用任何一款编辑器来编写 HLSL,但 Shazzam Shader Editor 则是专门为 WPF 实现像素着色器而设计的一款编辑器,使用它来编写像素着色器,可以省去像素着色器接入到 WPF 所需的各种手工操作。
walterlv
2023/10/23
9670
WPF 像素着色器入门:使用 Shazzam Shader Editor 编写 HLSL 像素着色器代码
着色器调用
从 Houdini 12.5 开始,VEX 着色器函数可以调用其他着色器函数。 这种技术可以优化大型着色器的 VEX 编译器和优化器性能,因为在着色器或其他着色器中多次调用的代码可以构建一次并多次使用,而无需额外的运行时开销。
南郭先生
2022/04/25
4440
如何创建自定义数据pool的RGW实例
本文适用于jewel以上版本(含) 本文用到的软件版本如下 ceph:version 10.2.7 OS: Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u6 (2015-11-09) x86_64 GNU/Linux 1新建pool 创建数据pool,注意每个pool的pg配置规划,可以参考http://ceph.com/pgcalc/进行设计 ceph osd pool create .rgw.root 16 16 ceph osd pool
用户1260683
2018/01/31
2.9K0
OpenGL ES 使用着色器(OC)(一)
效果的含义: 使用自定义着色器,实现纹理的一些简单效果。(旋转,移动,放缩) 步骤: 1.设置OpenGL ES 3.0环境 2.Shader和链接程序(myProgram)关联 3.绑定顶点坐标,纹理坐标 4.设置顶点属性对象 5.加载纹理 6.渲染 下面就拆分上面的6个步骤,详细讲解。 几乎每行代码都会增加注释
大壮
2020/06/29
6540
OpenGL ES 使用着色器(OC)(一)
如何在 JavaScript 中创建自定义排序方法
一般情况咱们排序大都按数字或字母顺序,但也有一些情况下,咱们可能需要自定义排序顺序。
前端小智@大迁世界
2020/05/12
3.3K0
如何在 JavaScript 中创建自定义排序方法
点击加载更多

相似问题

从THREE.ShaderLib构建phong着色器

21

使用SpriteKit和Swift创建自定义着色器

15

创建自定义正方形着色器

126

如何在GLKit中使用自定义着色器

21

使用自定义着色器使粒子“闪烁”

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档