ray marching shader
来源:互联网 发布:尚学堂大数据视频下载 编辑:程序博客网 时间:2024/05/01 05:51
shadertoy上的第一篇关于ray marching的教程,实现了在屏幕上绘制一个3D球体
float minDist=0.0;float maxDist=100.0;float getDist(vec3 cameraOrign , vec3 dir ){ float depth=minDist; for(int i =0;i<255;i+=1){ vec3 rayPosition=cameraOrign+depth*dir; float sphereSDF=1.0; float dist=length(rayPosition)-1.0; if(dist<0.01){ return depth; } depth+=dist; if(depth>=maxDist){ return maxDist; } } return maxDist; }void mainImage( out vec4 fragColor, in vec2 fragCoord ){vec2 size=iResolution.xy; vec2 rayMarchXY=fragCoord-size/2.; float fieldOfView=45.0; float z = size.y / tan(radians(fieldOfView) / 2.0); vec3 rayDir=normalize( vec3(rayMarchXY,-z) ); vec3 cameraOrign=vec3( 0,0 , 5); float dist=getDist(cameraOrign,rayDir); if(dist>maxDist-0.001){ fragColor=vec4(0.0,0.0,0.0,1.0); return; } vec3 p = cameraOrign + dist * rayDir; vec3 K_a = vec3(0.2, 0.2, 0.2); vec3 K_d = vec3(0.7, 0.2, 0.2); vec3 K_s = vec3(1.0, 1.0, 1.0); float shininess = 10.0; vec3 color = vec3 (0.25,0.25,0.25); vec3 light1Pos = vec3(4.0 * sin(iGlobalTime), 2.0, 4.0 * cos(iGlobalTime)); float EPSILON=0.001; vec3 N = normalize(vec3( length(vec3(p.x + EPSILON, p.y, p.z)) - length(vec3(p.x - EPSILON, p.y, p.z)), length(vec3(p.x, p.y + EPSILON, p.z)) - length(vec3(p.x, p.y - EPSILON, p.z)), length(vec3(p.x, p.y, p.z + EPSILON)) - length(vec3(p.x, p.y, p.z - EPSILON)) )); vec3 L = normalize(light1Pos - p); float dotLN = dot(L, N); if (dotLN < 0.0) { color+= vec3(0.0, 0.0, 0.0); } color+= vec3( dotLN,dotLN,dotLN); fragColor = vec4(color, 1.0);}
阅读全文
0 0
- ray marching shader
- ray marching shader 2:viewspace 转换 worldspace
- Unity3d Ray Marching
- Unity CG 写一个超酷的 ray-marching(shader纯代码写3D)
- 用代码来画画 —— Ray-Marching(光线步进)【Unity Shader】
- 用代码来画画 —— Ray-Marching(光线步进) 多个立体图形的绘制【GLSL】
- Marching squares & Marching cubes
- Mental ray Custom Shader 主函数和参数的命名
- unity3d shader之God Ray上帝之光
- Ray
- Marching Cubes
- Marching Cubes
- Marching Cubes
- Marching squares
- Marching Cubes
- How to compile maya plug-ins and mental ray shader in x_86_64 linux ?
- Unity Shader-遮挡处理(X-Ray,遮挡描边,遮挡半透,遮挡溶解)
- Unity Shader-遮挡处理(X-Ray,遮挡描边,遮挡半透,遮挡溶解)
- python2.6 升级到python2.7
- docker基本命令
- Java for Web学习笔记(六八):Service和Repository(3)异步Async和调度Schedule
- C#中主窗体Panel中加载其他多个窗体Panel控件
- 494Target Sum
- ray marching shader
- 如何获得expect中spawn的命令的返回值?
- ORACLE 建主键,外键,建表的基本语法
- ionic使用(二):顶部、底部导航及返回顶部或底部
- 不改代码,CS转BS
- JAVAWEB开发之redis学习(五)——SortedSet集合相关的操作命令
- 第二天-Java基础
- Bandit:一种简单而强大的在线学习算法
- POJ 2921 Knights of the Round Table 笔记