dof_3_dof_2.frag

来自「java 3d game jme 工程开发源代码」· FRAG 代码 · 共 141 行

FRAG
141
字号
// "Depth of Field" demo for Ogre// Copyright (C) 2006  Christian Lindequist Larsen//// This code is in the public domain. You may do whatever you want with it.uniform float sampleDist0;uniform sampler2D scene;				// full resolution imageuniform sampler2D depth;				// full resolution image with depth valuesvarying vec2 vTexCoord;void main(){   vec2 samples00 = vec2(-0.326212, -0.405805);   vec2 samples01 = vec2(-0.840144, -0.073580);   vec2 samples02 = vec2(-0.695914,  0.457137);   vec2 samples03 = vec2(-0.203345,  0.620716);   vec2 samples04 = vec2( 0.962340, -0.194983);   vec2 samples05 = vec2( 0.473434, -0.480026);   vec2 samples06 = vec2( 0.519456,  0.767022);   vec2 samples07 = vec2( 0.185461, -0.893124);   vec2 samples08 = vec2( 0.507431,  0.064425);   vec2 samples09 = vec2( 0.896420,  0.412458);   vec2 samples10 = vec2(-0.321940, -0.932615);   vec2 samples11 = vec2(-0.791559, -0.597705);   vec2 newCoord;   vec4 sum = texture2D(scene, vTexCoord);	    vec4 d = texture2D(depth, vTexCoord);     float _sampleDist0 = (d.r)*sampleDist0;     float additionCount = 1.0;	   vec4 dCheck = vec4(0.0, 0.0, 0.0, 0.0);   newCoord = vTexCoord + _sampleDist0 * samples00;   dCheck = texture2D(depth, newCoord);   if (abs(dCheck.r-d.r)<0.1)   {    	sum += texture2D(scene, newCoord);    	additionCount = additionCount+1.0;   }      newCoord = vTexCoord + _sampleDist0 * samples01;   dCheck = texture2D(depth, newCoord);   if (abs(dCheck.r-d.r)<0.1)   {    	sum += texture2D(scene, newCoord);    	additionCount = additionCount+1.0;   }   newCoord = vTexCoord + _sampleDist0 * samples02;   dCheck = texture2D(depth, newCoord);   if (abs(dCheck.r-d.r)<0.1)   {    	sum += texture2D(scene, newCoord);    	additionCount = additionCount+1.0;   }   newCoord = vTexCoord + _sampleDist0 * samples03;   dCheck = texture2D(depth, newCoord);   if (abs(dCheck.r-d.r)<0.1)   {    	sum += texture2D(scene, newCoord);    	additionCount = additionCount+1.0;   }   newCoord = vTexCoord + _sampleDist0 * samples04;   dCheck = texture2D(depth, newCoord);   if (abs(dCheck.r-d.r)<0.1)   {    	sum += texture2D(scene, newCoord);    	additionCount = additionCount+1.0;   }   newCoord = vTexCoord + _sampleDist0 * samples05;   dCheck = texture2D(depth, newCoord);   if (abs(dCheck.r-d.r)<0.1)   {    	sum += texture2D(scene, newCoord);    	additionCount = additionCount+1.0;   }   newCoord = vTexCoord + _sampleDist0 * samples06;   dCheck = texture2D(depth, newCoord);   if (abs(dCheck.r-d.r)<0.1)   {    	sum += texture2D(scene, newCoord);    	additionCount = additionCount+1.0;   }   newCoord = vTexCoord + _sampleDist0 * samples07;   dCheck = texture2D(depth, newCoord);   if (abs(dCheck.r-d.r)<0.1)   {    	sum += texture2D(scene, newCoord);    	additionCount = additionCount+1.0;   }   newCoord = vTexCoord + _sampleDist0 * samples08;   dCheck = texture2D(depth, newCoord);   if (abs(dCheck.r-d.r)<0.1)   {    	sum += texture2D(scene, newCoord);    	additionCount = additionCount+1.0;   }   newCoord = vTexCoord + _sampleDist0 * samples09;   dCheck = texture2D(depth, newCoord);   if (abs(dCheck.r-d.r)<0.1)   {    	sum += texture2D(scene, newCoord);    	additionCount = additionCount+1.0;   }   newCoord = vTexCoord + _sampleDist0 * samples10;   dCheck = texture2D(depth, newCoord);   if (abs(dCheck.r-d.r)<0.1)   {    	sum += texture2D(scene, newCoord);    	additionCount = additionCount+1.0;   }   newCoord = vTexCoord + _sampleDist0 * samples11;   dCheck = texture2D(depth, newCoord);   if (abs(dCheck.r-d.r)<0.1)   {    	sum += texture2D(scene, newCoord);    	additionCount = additionCount+1.0;   }   sum /= additionCount;   sum.a = d.r*2.0;   gl_FragColor =  sum;		}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?