| 5 | { |
| 6 | |
| 7 | static std::string getVolumeShaderCommonFunctions() |
| 8 | { |
| 9 | return R"( |
| 10 | float getVal( in float value ) |
| 11 | { |
| 12 | return (value - minValue) / (maxValue-minValue); |
| 13 | } |
| 14 | |
| 15 | float getGradAlphaVal( in float value ) |
| 16 | { |
| 17 | if ( value < 0.0 || value > 1.0 ) |
| 18 | return 0.0; |
| 19 | return texture( denseMap, vec2( value, 0.5 ) ).a; |
| 20 | } |
| 21 | |
| 22 | void swap( inout float a, inout float b ) |
| 23 | { |
| 24 | float c = a; |
| 25 | a = b; |
| 26 | b = c; |
| 27 | } |
| 28 | |
| 29 | void rayVoxelIntersection( in vec3 minCorner, inout vec3 voxelCoord, in vec3 voxelSize,inout vec3 rayOrg, in vec3 ray ) |
| 30 | { |
| 31 | vec3 voxelMin = voxelCoord * voxelSize + minCorner - rayOrg; |
| 32 | vec3 voxelMax = (voxelCoord + vec3(1.0,1.0,1.0) ) * voxelSize + minCorner - rayOrg; |
| 33 | vec3 minInt = voxelMin / ray; |
| 34 | vec3 maxInt = voxelMax / ray; |
| 35 | if ( ray.x < 0.0 ) |
| 36 | swap( minInt.x, maxInt.x ); |
| 37 | if ( ray.y < 0.0 ) |
| 38 | swap( minInt.y, maxInt.y ); |
| 39 | if ( ray.z < 0.0 ) |
| 40 | swap( minInt.z, maxInt.z ); |
| 41 | |
| 42 | bvec3 goodRayComp = greaterThan( abs( ray ), vec3(0.001,0.001,0.001) ); // discard small ray components |
| 43 | float absMinInt = -1.0e20; // just some small value |
| 44 | if ( goodRayComp.x && minInt.x > absMinInt ) |
| 45 | absMinInt = minInt.x; |
| 46 | if ( goodRayComp.y && minInt.y > absMinInt ) |
| 47 | absMinInt = minInt.y; |
| 48 | if ( goodRayComp.z && minInt.z > absMinInt ) |
| 49 | absMinInt = minInt.z; |
| 50 | |
| 51 | rayOrg = rayOrg + ray * absMinInt; |
| 52 | |
| 53 | float absMaxInt = 1.0e20; // just some big value |
| 54 | int absMaxIntId = 3; // to have "else" block if ray is zero for some reason |
| 55 | if ( goodRayComp.x && maxInt.x < absMaxInt ) |
| 56 | { |
| 57 | absMaxIntId = 0; |
| 58 | absMaxInt = maxInt.x; |
| 59 | } |
| 60 | if ( goodRayComp.y && maxInt.y < absMaxInt ) |
| 61 | { |
| 62 | absMaxIntId = 1; |
| 63 | absMaxInt = maxInt.y; |
| 64 | } |
no outgoing calls
no test coverage detected