介绍
由Khronos Group维护 # 还维护了OpenGL和COLLADA
使用OpenGL渲染语言GLSL ES
WebGL是在浏览器中实现三维效果的一套规范
webgl通过增加openGL es 2.0的一个js绑定, 把它们结合在一起
webgl可以为html5 canvas提供硬件3d加速渲染
更流畅地展示3d场景和模型
创建复杂的导航和数据视觉化
内置变量
gl_FragColor
输出的一个像素的颜色, vec4类型, 红 绿 蓝 透明
gl_FragCoord
只读变量,保存了片元相对窗口的坐标位置
x, y, z, 1/w 其中z表示片元深度, z越大越深
输入
varying0, varying1, … , varyingn
uniforms
一致变量. 在js, 顶点着色器, 片元着色器中传递数据, 一次渲染中数据不变
临时变量
gl_Position
gl_FrontFacing
gl_PointSize
当前片段来自三角形的正面还是背面. 该变量只是为了节省性能
采样器
变量
变量分类
attributes(属性变量) # 保存顶点独有数据,如顶点的位置
uniform(一致变量) # 一帧渲染过程中保持不变,如光照方向
varying(易变变量) # 比较容易变化的变量,用来在顶点着色器与片元着色器之间传递数据
类型
vec2
vec3
vec4
mat4
sampler2D
float
传递关系
attribute → 顶点着色器 → varying → 图元光栅化 → varying → 片元着色器 → gl_FragColor
uniform → 顶点着色器 → gl_Position → 图元光栅化 → gl_Position → 片元着色器 → gl_FragColor
使用
< script id = "fragmentShader" type = "x-shader/x-fragment" >
void main(){
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
# 表示片元颜色,是RGBA
}
</ script >
例子
uniform vec2 resolution;
uniform float time;
float a = 1.0 , b = 1.0 , c = 1.0 ;
float t;
void main (){
t = time;
a = abs ( sin (t));
b = abs ( cos (t));
c = abs ( sin (t) * cos (t));
gl_FragColor = vec4 ( vec3 (a, b, c), 1.0 );
}
名词
科纳斯组织 Khronos Group
GLSL ES OpenGL Shading Language Embedded System
网格 Mesh
模型 model
纹理映射 texture map
材质 material
光源 light
变换 transform
相机 camera
视口 viewport
投影矩阵 projection matrix
视锥体 view volume
视平截头体 view frustum
着色器 shader
图元 primitive
三角形带 triangle strip
类型化数组 typed array
模型视图矩阵 modelview matrix
投影矩阵 projection matrix
顶点着色器 vertex shader
片元着色器 fragment shader
像素着色器 pixel shader, 同fragment shader
自发光 unlit
预置光照 prelit
镜面高光 specular highlights
镜面反射 specular reflection
alpha混合 alpha blending
变换层级 transform hierarchy
帧动画 frame-based animation
补间动画 tweening
关键帧 keyframe
关键帧动画 keyframe animation
插值 interpolation
线性插值 linear interpolation
关节动画 articulated animation
蒙皮动画 skinned animation
骨骼 skeleton
目标变形动画 morph target animation
程序贴图 procedural texture
纹理变换 texture transform
拾取 picking
面法线 face normal
程序贴图 procedural texture
多级渐进纹理过滤 mipmapping / mipmapping filtering
数码内容创作软件 DCC digital content creation
包围盒 bounding box
框架
three.js
physi.js
glMatrix
GLGE
philoGL
sceneJS
spiderGL
着色器
工具
网站