第一个ShaderToy——画圆、方、三角
2016-04-17 18:23
330 查看
vec4 drawTriangle(in vec2 p, in vec2 A, in vec2 B, in vec2 C) { vec2 AB = B-A; vec2 BC = C-B; vec2 CA = A-C; vec2 AP = p - A; vec2 BP = p - B; vec2 CP = p - C; vec3 cPAB = cross(vec3(AP,.0),vec3(AB,.0)); vec3 cCAB = cross(vec3(-CA,.0),vec3(AB,.0)); bool bPA = dot(cPAB, cCAB) >= .0; vec3 cPAC = cross(vec3(CP,.0), vec3(CA,.0)); vec3 cBAC = cross(vec3(-BC,.0), vec3(CA,.0)); bool bPC = dot(cPAC, cBAC) >= .0; vec3 cPBC = cross(vec3(BP,.0), vec3(BC,.0)); vec3 cABC = cross(vec3(-AB,.0), vec3(BC,.0)); bool bPB = dot(cPBC, cABC) >= .0; if (bPC && bPB && bPA) { return vec4(0.9, 0.1, 0.1, 1.0); } else { return vec4(0.0, 0.0, 0.0, 0.0); } } vec4 drawCircle(in vec2 p, in vec2 o, in float radius) { float f = smoothstep(radius - 0.003, radius + 0.003, length(p-o)); return vec4(0.4,0.2,0.6,1.0-f); } vec4 drawRect(in vec2 p, in vec2 coord, in vec2 size) { vec2 v = p - coord; if(0.5*size.x > abs(v.x) && 0.5*size.y > abs(v.y)) { return vec4(0.1,0.8,0.1,1.0); } return vec4(0.0,0.0,0.0,0.0); } void mainImage( out vec4 fragColor, in vec2 fragCoord ) { //vec2 uv = fragCoord.xy / iResolution.xy; vec2 p = (fragCoord.xy - 0.5*iResolution.xy)/iResolution.yy; vec4 layer0 = vec4(1.0, 0.8, 0.7, 1.0); vec4 layer1 = drawRect(p, vec2(.1,.1), vec2(0.4,0.4)); vec4 col = mix(layer0, layer1, layer1.a); vec4 layer2 = drawCircle(p, vec2(-0.1,-0.1),0.3); col = mix(col, layer2, layer2.a); vec4 layer3 = drawTriangle(p, vec2(-0.5,-0.4), vec2(-0.3,0.0), vec2(-0.1, -0.4)); col = mix(col, layer3, layer3.a); fragColor = col; }
上ShaderToy看别人的炫酷Shader,自己也想动手写来玩玩,学习一下glsl,今天就先写个画基础图形的Shader,在这里做一下记录。
相关文章推荐
- 将 ShaderToy 上的着色器例子移植到 QML 中
- shader画圆
- Unity模拟ShaderToy的默认Shader
- 【Shader】应用 ShaderToy 代码的 ShaderLab 模板
- Shadertoy-MagicSea
- shadertoy 跳动的心
- Shadertoy-4D Grid Slice
- Shadertoy-Seascape
- 使用ShaderToy来处理VR畸变
- 死侍(DeadPool)
- HDU2544 最短路 + 裸 + dijkstra + 邻接矩阵
- Linux性能测试命令系列(1)- top
- Java进阶学习第五天——XML入门
- [java基础]final关键字
- js---匿名函数和闭包
- angularjs结合localstorage完成一个简单的备忘录
- 求gcd(i,j,k)=m的方案数,i,j,k不同且属于1-n(组合数学+筛法(倍数法))
- 浅谈HashMap
- OpenCV坐标体系的初步认识