GLSL着色器- 游戏开发环境 - MDN Web Docs
文章推薦指數: 80 %
这个着色器的作用是设置 gl_FragColor 变量, 也是一个GLSL内置变量: void main() { gl_FragColor = makeCalculationsToHaveColor; }
SkiptomaincontentSkiptosearchSkiptoselectlanguage游戏开发环境Techniquesforgamedevelopment3DgamesontheWebGLSL着色器ArticleActions中文(简体)此页面由社区从英文翻译而来。
了解更多并加入MDNWebDocs社区。
着色器类型例子总结其他链接RelatedTopics
Introduction
Introduction
Anatomy
Examples
APIsforgamedevelopment
Canvas
CSS
Fullscreen
Gamepad
IndexedDB
JavaScript
PointerLock
SVG
TypedArrays
WebAudio
WebGL
WebRTC
WebSockets
WebVR
WebWorkers
XMLHttpRequest
Techniques
Usingasyncscriptsforasm.js
Optimizingstartupperformance
UsingWebRTCpeer-to-peerdatachannels
Efficientanimationforwebgames
AudioforWebGames
2Dcollisiondetection
Tilesandtilemapsoverview
3DgamesontheWeb
3DgamesontheWeboverview
Explainingbasic3Dtheory
BuildingupabasicdemowithA-Frame
BuildingupabasicdemowithBabylon.js
BuildingupabasicdemowithPlayCanvas
BuildingupabasicdemowithThree.js
WebVR
3Dcollisiondetection
BoundingvolumecollisiondetectionwithTHREE.js
Implementinggamecontrolmechanisms
Controlmechanisms
Mobiletouch
Desktopwithmouseandkeyboard
Desktopwithgamepad
Other
Tutorials
2DbreakoutgameusingpureJavaScript
2DbreakoutgameusingPhaser
2Dmaze_gamewithdeviceorientation
2DplatformgameusingPhaser
Publishinggames
Publishinggamesoverview
Gamedistribution
Gamepromotion
Gamemonetization
着色器类型例子总结其他链接GLSL着色器使用GLSL的着色器(shader),GLSL是一门特殊的有着类似于C语言的语法,在图形管道(graphicpipeline)中直接可执行的OpenGL着色语言.着色器有两种类型-- 顶点着色器(VertexShader)和片段着色器(FragmentShader).前者是将形状转换到真实的3D绘制坐标中,后者是计算最终渲染的颜色和其他属性用的.
GLSL不同于JavaScript,它是强类型语言,并且内置很多数学公式用于计算向量和矩阵.快速编写着色器非常复杂,但创建一个简单的着色器并不难.在这篇文章我们将介绍使用着色器的基础知识,并且构建一个使用Three.js的例子来加速代码编写.
你可能记得基本原理那篇文章,一个顶点(vertex)是在空间中有自己3D坐标的点,并且通常包含些被定义的其他信息.空间本身会被坐标系统定义.在那个3D空间中一切都是关于形状的呈现.着色器类型一个着色器实际上就是一个绘制东西到屏幕上的函数.着色器运行在GPU中,它对这些操作进行了很多的优化,这样你就可以卸载很多不必要的CPU,然后集中处理能力去执行你自己的代码.顶点着色器顶点着色器操作3D空间的坐标并且每个顶点都会调用一次这个函数.其目的是设置 gl_Position 变量--这是一个特殊的全局内置变量,它是用来存储当前顶点的位置:
voidmain(){
gl_Position=makeCalculationsToHaveCoordinates;
}
这个 voidmain()函数是定义全局gl_Position变量的标准方式.所有在这个函数里面的代码都会被着色器执行. 如果将3D空间中的位置投射到2D屏幕上这些信息都会保存在计算结果的变量中.片段着色器片段(或者纹理)着色器在计算时定义了每像素的 RGBA颜色—每个像素只调用一次片段着色器.这个着色器的作用是设置 gl_FragColor变量,也是一个GLSL内置变量:
voidmain(){
gl_FragColor=makeCalculationsToHaveColor;
}
计算结果包含RGBA颜色信息.例子让我们构建一个简单的例子来解释这些着色器的动作.假设你已经看过Three.js教程并掌握了场景,物体和材质的基本概念.
注意:记住你没必要使用Three.js或者其他库来编写着色器--纯WebGL 完全够了.我们这里使用Three.js来制作背景代码更简单和易理解.所以你只需关注着色器代码.Three.js和其他3D库给你抽象了很多东西出来--如果你想要用纯WebGL创建这个例子,你得写很多其他的代码才能运行.
环境设置要开始编写WebGL着色器你不需要做太多,只需:
确保你在使用对 WebGL有良好支持的现代浏览器,比如最新版的Firefox或Chrome.
创建一个目录保存你的实验.
拷贝一份的 压缩版的Three.js库 到你的目录.
HTML结构这是将用到的HTML结构.
延伸文章資訊
- 1一起幫忙解決難題,拯救IT 人的一天
昨天提到fragment shader 輸出gl_FragColor gl_FragColor // vec4 ... gl_FragColor = vec4(1.0, 1.0, 0.0, 1....
- 2使用shaders 在WebGL 上色
替fragment 上色. 我們重新回顧一下,之前我們的fragment shader 如下:. const fsSource = ` void main() { gl_FragColor = ...
- 3找gl_FragColor相關社群貼文資訊| 服飾貼文懶人包-2022年1月
關於「gl_FragColor」標籤,搜尋引擎有相關的訊息討論:. 使用shaders 在WebGL 上色- Web APIs | MDN。 ARRAY_BUFFER, new Float32A...
- 4varying 傳遞著色資訊
至今為止的範例,片段著色器的gl_FragColor 都是寫死的,然而attribute 只能用在頂點著色器中,若想自行指定顏色資訊,應當如何傳遞給片段著色器? 著色器的設計, ...
- 5WebGL着色器内置变量gl_PointSize - gl_FragCoord - CSDN博客
gl_FragColor, 片元颜色值, vec4. gl_FragCoord, 片元坐标,单位像素, vec2. gl_PointCoord, 点渲染模式对应点像素坐标, vec2 ...