8__text__TEXT__cstring__TEXT__data__DATA2   P//VTK::System::Dec /*========================================================================= Program: Visualization Toolkit Module: raycasterfs.glsl Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ ////////////////////////////////////////////////////////////////////////////// /// /// Inputs /// ////////////////////////////////////////////////////////////////////////////// /// 3D texture coordinates form vertex shader varying vec3 ip_textureCoords; varying vec3 ip_vertexPos; ////////////////////////////////////////////////////////////////////////////// /// /// Outputs /// ////////////////////////////////////////////////////////////////////////////// vec4 g_fragColor = vec4(0.0); ////////////////////////////////////////////////////////////////////////////// /// /// Uniforms, attributes, and globals /// ////////////////////////////////////////////////////////////////////////////// vec3 g_dataPos; vec3 g_dirStep; vec4 g_srcColor; vec4 g_eyePosObj; bool g_exit; bool g_skip; float g_currentT; float g_terminatePointMax; uniform vec4 in_volume_scale; uniform vec4 in_volume_bias; //VTK::Output::Dec //VTK::Base::Dec //VTK::Termination::Dec //VTK::Cropping::Dec //VTK::Clipping::Dec //VTK::Shading::Dec //VTK::BinaryMask::Dec //VTK::CompositeMask::Dec //VTK::GradientCache::Dec //VTK::ComputeOpacity::Dec //VTK::ComputeGradient::Dec //VTK::ComputeGradientOpacity1D::Dec //VTK::ComputeLighting::Dec //VTK::ComputeColor::Dec //VTK::ComputeRayDirection::Dec //VTK::Picking::Dec //VTK::RenderToImage::Dec //VTK::DepthPeeling::Dec /// We support only 8 clipping planes for now /// The first value is the size of the data array for clipping /// planes (origin, normal) uniform float in_clippingPlanes[49]; uniform float in_scale; uniform float in_bias; ////////////////////////////////////////////////////////////////////////////// /// /// Helper functions /// ////////////////////////////////////////////////////////////////////////////// /** * Transform window coordinate to NDC. */ vec4 WindowToNDC(const float xCoord, const float yCoord, const float zCoord) { vec4 NDCCoord = vec4(0.0, 0.0, 0.0, 1.0); NDCCoord.x = (xCoord - in_windowLowerLeftCorner.x) * 2.0 * in_inverseWindowSize.x - 1.0; NDCCoord.y = (yCoord - in_windowLowerLeftCorner.y) * 2.0 * in_inverseWindowSize.y - 1.0; NDCCoord.z = (2.0 * zCoord - (gl_DepthRange.near + gl_DepthRange.far)) / gl_DepthRange.diff; return NDCCoord; } /** * Transform NDC coordinate to window coordinates. */ vec4 NDCToWindow(const float xNDC, const float yNDC, const float zNDC) { vec4 WinCoord = vec4(0.0, 0.0, 0.0, 1.0); WinCoord.x = (xNDC + 1.f) / (2.f * in_inverseWindowSize.x) + in_windowLowerLeftCorner.x; WinCoord.y = (yNDC + 1.f) / (2.f * in_inverseWindowSize.y) + in_windowLowerLeftCorner.y; WinCoord.z = (zNDC * gl_DepthRange.diff + (gl_DepthRange.near + gl_DepthRange.far)) / 2.f; return WinCoord; } ////////////////////////////////////////////////////////////////////////////// /// /// Ray-casting /// ////////////////////////////////////////////////////////////////////////////// /** * Global initialization. This method should only be called once per shader * invocation regardless of whether castRay() is called several times (e.g. * vtkDualDepthPeelingPass). Any castRay() specific initialization should be * placed within that function. */ void initializeRayCast() { /// Initialize g_fragColor (output) to 0 g_fragColor = vec4(0.0); g_dirStep = vec3(0.0); g_srcColor = vec4(0.0); g_exit = false; //VTK::Base::Init //VTK::Terminate::Init //VTK::Cropping::Init //VTK::Clipping::Init //VTK::RenderToImage::Init //VTK::DepthPass::Init } /** * March along the ray direction sampling the volume texture. This function * takes a start and end point as arguments but it is up to the specific render * pass implementation to use these values (e.g. vtkDualDepthPeelingPass). The * mapper does not use these values by default, instead it uses the number of * steps defined by g_terminatePointMax. */ vec4 castRay(const float zStart, const float zEnd) { //VTK::DepthPeeling::Ray::Init //VTK::DepthPeeling::Ray::PathCheck //VTK::Shading::Init /// For all samples along the ray while (!g_exit) { //VTK::Base::Impl //VTK::Cropping::Impl //VTK::Clipping::Impl //VTK::BinaryMask::Impl //VTK::CompositeMask::Impl //VTK::PreComputeGradients::Impl //VTK::Shading::Impl //VTK::RenderToImage::Impl //VTK::DepthPass::Impl /// Advance ray g_dataPos += g_dirStep; //VTK::Terminate::Impl } //VTK::Shading::Exit return g_fragColor; } /** * Finalize specific modes and set output data. */ void finalizeRayCast() { //VTK::Base::Exit //VTK::Terminate::Exit //VTK::Cropping::Exit //VTK::Clipping::Exit //VTK::Picking::Exit g_fragColor.r = g_fragColor.r * in_scale + in_bias * g_fragColor.a; g_fragColor.g = g_fragColor.g * in_scale + in_bias * g_fragColor.a; g_fragColor.b = g_fragColor.b * in_scale + in_bias * g_fragColor.a; gl_FragData[0] = g_fragColor; //VTK::RenderToImage::Exit //VTK::DepthPass::Exit } ////////////////////////////////////////////////////////////////////////////// /// /// Main /// ////////////////////////////////////////////////////////////////////////////// void main() { //VTK::CallWorker::Impl } _raycasterfs