(1)u_resolution 是画布尺寸,即代表画布宽高
(2)gl_FragCoord:是一个 vec4 类型的变量 (x, y, z, 1/w),其中 x, y 是当前片元的窗口坐标。直译就是片元坐标
2 结合例子理解
如下效果和代码
#ifdef GL_ES
precision mediump float;
#endif
// u_resolution (画布尺寸)
uniform vec2 u_resolution;
void main() {
vec2 st = gl_FragCoord.xy/u_resolution;
gl_FragColor = vec4(st.x,st.y,0.0,1.0);
如上画布宽高:(950,600)即u_resolution的宽高值是(950,600);
那么gl_FragCoord的取值范围就是 x在(0,950),y在(0,600)
所以vec2 st = gl_FragCoord.xy/u_resolution; st的x和y值都在0.0-1.0之间;
gl_FragCoord.xy/u_resolution在四个角的值为
左下角(0,0)处:x=0/950 y=0/600 st为(0.0,0.0);颜色值为(0.0,0.0,0.0,1.0)黑色
左上角(0,600)处:x=0/950 y600/600 st为(0.0,1.0);颜色值为(0.0,1.0,0.0,1.0)绿色
右上角(950,600)处:x=950/950 y=600/600 st为(1.0,1.0) ;颜色值为(1.0,1.0,0.0,1.0)黄色
右下角(950,0)处:x=950/950 y=0/600 st为(1.0,0.0);颜色值为(1.0,0.0,0.0,1.0)红色
共六章1.基础章节,从Shader1.0版本到新的4.5版本,介绍每一个版本中特性的用法;2.Tesslattion Shader应用/基础案例分析3.Gemotry Shader应用/基础案例分析4.Compute Shader应用/基础案例分析5.通过大量案例讲解分析/结合新特性,介绍用法6.性能调优,如果借助shader加速应用,让你的程序支撑百万级别的场景对象轻松应对
ShaderToy上用的shader语言 为glsl , 效果是用webgl跑的,而webgl封装了opengl es, 所以ShaderToy上的例子同样使用于Android端。
ShaderToy基本上 都是用fragment shader 对栅格化后的像素进行处
gl_FragCoord和gl_FragDepth分别是片元着色器的输入和输出变量。
gl_FragCoord是个vec4,四个分量分别对应x, y, z和1/w。其中,x和y是当前片元的窗口相对坐标,不过它们不是整数,小数部分恒为0.5。x - 0.5和y - 0.5分别位于[0, windowWidth - 1]和[0, windowHeight - 1]内。windowWidth和windowHeight都以像素为单位,亦即用glViewPort指定的宽高。w即为乘过了投影矩阵之后点坐标的w,用于p
局部坐标系——》世界坐标系——》相机坐标系——》剪裁坐标系——》规范化设备坐标系——》屏幕坐标系
模型变换:world.xyzw = modelMatrix * position.xyzw;
视图变换::eye.xyzw = viewMaterix * world.xyzw;
投影变换:clip.xyzw = projectMatrix * eye.xyzw;
透视除法(w归1化):ndc.xyzw = clip.xyzw / clip.w;
视口变换:screen.xy = (nd
gl_FragCoord 表示当前片元着色器处理的候选片元窗口相对坐标信息,是一个 vec4 类型的变量(x, y, z, 1/w), 其中 x, y 是当前片元的窗口坐标,OpenGL 默认以窗口左下角为原点, 在 着色器中通过布局限定符可以重新设定原点,比如窗口左上角为原点origin_upper_left,窗口大小由 glViewport() 函数指定。x, y 默认是像素中心 而非 整...
vs: `
void main() {
gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4( position, 1.0 );
fs: `
// 屏幕尺寸
uniform vec2
(26条消息) WebGL屏幕坐标系、canvas坐标系和WebGL坐标系转换——学习笔记_ponGISer的博客-CSDN博客https://blog.csdn.net/u011332271/article/details/110477
layout (location = 0) in vec3 aPos; // 位置变量的属性位置值为0
out vec4 vertexColor; // 为片段着色器指定一个颜色输出
void main()
gl_Position = vec4(aPos...
gl_Position,gl_FragCoord,gl_PointCoord分别描述渲染管线中的顶点,片元,点域图元(点精灵/PointSprite)光栅化后的片元在各自坐标系中的大小;可以借助上图区分记忆。
gl_Position:
1.gl_Position描述的是顶点在世界坐标系中的坐标;
2.是绝对大小;
gl_FragCoord:
1.gl_FragCoord描述的是片元在以Canvas画布窗口坐标系统中的坐标;
2.是绝对大小;
3.单位为像素;
gl_PointCoord:
1.gl.