-
GLSL学习笔记 6.3 Fragment Shader
程序判断片断是处于砖块位置还是水泥位置,然后分别进行着色。
程序流程
使用内置函数说明:
vec2 floor (vec2 x): Returns a value equal to the nearest integer that
is less than or equal to x.
vec2 fract (vec2 x): Returns x – floor (x).
vec2 step (vec2 edge, vec2 x): Returns 0 if x <= edge; otherwise, it returns 1.0.
vec3 mix (vec3 x, vec3 y, vec3 a): Returns x * (1.0 – a) + y * a, i.e., the linear
blend of x and y using the floating-point value a.
The value for a is not restricted to the range [0,1].![](/Images/OutliningIndicators/None.gif)
得到当前片断在整个砖块图案中的位置。(单位长度1 = 一个砖块的尺寸)
position = MCposition / BrickSize;
![](/Images/OutliningIndicators/None.gif)
每隔一行,偏移半个砖块宽度。产生交错感。
if (fract(position.y * 0.5) > 0.5)
position.x += 0.5;
![](/Images/OutliningIndicators/None.gif)
得到当前片断在砖块图的一个图元中的相对位置。
position = fract(position);
![](/Images/OutliningIndicators/None.gif)
判断当前片断处于砖块位置还是灰泥位置,处于砖块位置时为1,处于灰泥位置时为0。
useBrick = step(position, BrickPct);
![](/Images/OutliningIndicators/None.gif)
根据当前片断的位置,得到当前片断的颜色值。
color = mix(MortarColor, BrickColor, useBrick.x * useBrick.y);
![](/Images/OutliningIndicators/None.gif)
在颜色中加入光照效果。
color *= LightIntensity;
![](/Images/OutliningIndicators/None.gif)
将计算好的颜色赋给当前片断。
gl_FragColor = vec4 (color, 1.0); 程序清单
uniform vec3 BrickColor, MortarColor;
uniform vec2 BrickSize;
uniform vec2 BrickPct;
![](/Images/OutliningIndicators/None.gif)
varying vec2 MCposition;
varying float LightIntensity;
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
void main(void)
{
vec3 color;
vec2 position, useBrick;
position = MCposition / BrickSize;
![](/Images/OutliningIndicators/InBlock.gif)
if (fract(position.y * 0.5) > 0.5)
position.x += 0.5;
position = fract(position);
![](/Images/OutliningIndicators/InBlock.gif)
useBrick = step(position, BrickPct);
![](/Images/OutliningIndicators/InBlock.gif)
color = mix(MortarColor, BrickColor, useBrick.x * useBrick.y);
color *= LightIntensity;
gl_FragColor = vec4 (color, 1.0);
}
-
相关阅读:
面向对象深入:继承01——子类
面向对象的基础知识——小结
IP地址配置
二、RPM包管理-rpm命令管理
一、软件包管理简介
关机重启命令
网络命令
权限管理命令
字符截取命令
shell-正则表达式(二)
-
原文地址:https://www.cnblogs.com/Pointer/p/30060.html
Copyright © 2020-2023
润新知