MCPcopy Create free account
hub / github.com/MeshInspector/MeshLib / getVolumeShaderCommonFunctions

Function getVolumeShaderCommonFunctions

source/MRViewer/MRVolumeShader.cpp:7–80  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5{
6
7static 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 }

Callers 2

getVolumeFragmentShaderFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected