<div dir="ltr"><div>Aron,</div><div><br></div><div>Thank you for the links! I just want to try it. As sample I have large enough 3D grid (~100MB) that I want to show it by vtk-js. I don't know how to work with large files by vtk-js... maybe need I use small reducted dataset for 3D preview and load full slices from server?</div><div><br></div><div><span style="font-size:12.8px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">I found aneurism.vti viewer at <a href="https://kitware.github.io/paraview-glance/nightly">https://kitware.github.io/paraview-glance/nightly</a> It looks very interesting but the used datafile is small here.</span></div><div><br></div><div><br></div>Sorry, the script doesn't work as Paraview macro:<div><br></div><div>

<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">ERROR: In /Users/kitware/dashboards/buildbot-slave/8275bd07/build/superbuild/paraview/src/VTK/Rendering/OpenGL2/vtkShaderProgram.cxx, line 445</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">vtkShaderProgram (0x60c00058d5b0): 1: #version 150</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">2: #ifdef GL_ES</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">3: #if __VERSION__ == 300</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">4: #define varying in</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">5: #ifdef GL_FRAGMENT_PRECISION_HIGH</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">6: precision highp float;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">7: precision highp sampler2D;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">8: precision highp sampler3D;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">9: #else</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">10: precision mediump float;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">11: precision mediump sampler2D;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">12: precision mediump sampler3D;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">13: #endif</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">14: #define texelFetchBuffer texelFetch</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">15: #define texture1D texture</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">16: #define texture2D texture</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">17: #define texture3D texture</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">18: #endif // 300</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">19: #else // GL_ES</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">20: #define highp</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">21: #define mediump</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">22: #define lowp</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">23: #if __VERSION__ == 150</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">24: #define varying in</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">25: #define texelFetchBuffer texelFetch</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">26: #define texture1D texture</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">27: #define texture2D texture</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">28: #define texture3D texture</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">29: #endif</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">30: #if __VERSION__ == 120</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">31: #extension GL_EXT_gpu_shader4 : require</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">32: #endif</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">33: #endif // GL_ES</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">34: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">35: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">36: /*=========================================================================</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">37: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">38:   Program:   Visualization Toolkit</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">39:   Module:    raycasterfs.glsl</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">40: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">41:   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">42:   All rights reserved.</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">43:   See Copyright.txt or <a href="http://www.kitware.com/Copyright.htm">http://www.kitware.com/Copyright.htm</a> for details.</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">44: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">45:      This software is distributed WITHOUT ANY WARRANTY; without even</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">46:      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">47:      PURPOSE.  See the above copyright notice for more information.</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">48: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">49: =========================================================================*/</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">50: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">51: //////////////////////////////////////////////////////////////////////////////</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">52: ///</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">53: /// Inputs</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">54: ///</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">55: //////////////////////////////////////////////////////////////////////////////</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">56: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">57: /// 3D texture coordinates form vertex shader</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">58: varying vec3 ip_textureCoords;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">59: varying vec3 ip_vertexPos;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">60: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">61: //////////////////////////////////////////////////////////////////////////////</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">62: ///</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">63: /// Outputs</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">64: ///</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">65: //////////////////////////////////////////////////////////////////////////////</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">66: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">67: vec4 g_fragColor = vec4(0.0);</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">68: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">69: //////////////////////////////////////////////////////////////////////////////</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">70: ///</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">71: /// Uniforms, attributes, and globals</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">72: ///</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">73: //////////////////////////////////////////////////////////////////////////////</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">74: vec3 g_dataPos;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">75: vec3 g_dirStep;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">76: vec4 g_srcColor;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">77: vec4 g_eyePosObj;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">78: bool g_exit;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">79: bool g_skip;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">80: float g_currentT;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">81: float g_terminatePointMax;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">82: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">83: out vec4 fragOutput0;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">84: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">85: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">86: uniform sampler3D in_volume[1];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">87: uniform vec4 in_volume_scale[1];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">88: uniform vec4 in_volume_bias[1];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">89: uniform int in_noOfComponents;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">90: uniform int in_independentComponents;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">91: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">92: uniform sampler2D in_noiseSampler;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">93: #ifndef GL_ES</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">94: uniform sampler2D in_depthSampler;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">95: #endif</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">96: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">97: // Camera position</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">98: uniform vec3 in_cameraPos;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">99: uniform mat4 in_volumeMatrix[1];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">100: uniform mat4 in_inverseVolumeMatrix[1];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">101: uniform mat4 in_textureDatasetMatrix[1];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">102: uniform mat4 in_inverseTextureDatasetMatrix[1];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">103: uniform mat4 in_textureToEye[1];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">104: uniform vec3 in_texMin[1];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">105: uniform vec3 in_texMax[1];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">106: uniform mat4 in_cellToPoint[1];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">107: // view and model matrices</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">108: uniform mat4 in_projectionMatrix;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">109: uniform mat4 in_inverseProjectionMatrix;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">110: uniform mat4 in_modelViewMatrix;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">111: uniform mat4 in_inverseModelViewMatrix;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">112: varying mat4 ip_inverseTextureDataAdjusted;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">113: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">114: // Ray step size</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">115: uniform vec3 in_cellStep[1];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">116: uniform vec2 in_scalarsRange[4];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">117: uniform vec3 in_cellSpacing[1];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">118: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">119: // Sample distance</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">120: uniform float in_sampleDistance;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">121: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">122: // Scales</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">123: uniform vec2 in_windowLowerLeftCorner;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">124: uniform vec2 in_inverseOriginalWindowSize;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">125: uniform vec2 in_inverseWindowSize;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">126: uniform vec3 in_textureExtentsMax;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">127: uniform vec3 in_textureExtentsMin;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">128: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">129: // Material and lighting</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">130: uniform vec3 in_diffuse[4];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">131: uniform vec3 in_ambient[4];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">132: uniform vec3 in_specular[4];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">133: uniform float in_shininess[4];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">134: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">135: // Others</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">136: uniform bool in_useJittering;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">137: vec3 g_rayJitter = vec3(0.0);</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">138: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">139: uniform vec2 in_averageIPRange;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">140: uniform vec3 in_lightAmbientColor[1];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">141: uniform vec3 in_lightDiffuseColor[1];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">142: uniform vec3 in_lightSpecularColor[1];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">143: vec4 g_lightPosObj;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">144: vec3 g_ldir;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">145: vec3 g_vdir;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">146: vec3 g_h;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">147: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">148: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">149:       </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">150:  const float g_opacityThreshold = 1.0 - 1.0 / 255.0;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">151: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">152: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">153: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">154:       </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">155:  int clippingPlanesSize;      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">156:  vec3 objRayDir;      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">157:  mat4 textureToObjMat;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">158: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">159: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">160: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">161: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">162: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">163: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">164: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">165: //VTK::GradientCache::Dec</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">166: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">167: //VTK::Transfer2D::Dec</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">168: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">169: uniform sampler2D in_opacityTransferFunc_0[1];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">170:         </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">171: float computeOpacity(vec4 scalar)        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">172: {        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">173:   return texture2D(in_opacityTransferFunc_0[0], vec2(scalar.w, 0)).r;        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">174: }</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">175: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">176: vec4 computeGradient(in vec3 texPos, in int c, in sampler3D volume, in int index)</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">177: {</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">178:   return vec4(0.0);</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">179: }</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">180: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">181: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">182: uniform sampler2D [1];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">183: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">184: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">185:       </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">186: vec4 computeLighting(vec4 color, int component)      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">187:   {      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">188:   vec4 finalColor = vec4(0.0);</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">189:   finalColor = vec4(color.rgb, 0.0);      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">190:   finalColor.a = color.a;      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">191:   return finalColor;      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">192:   }</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">193: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">194: uniform sampler2D in_colorTransferFunc_0[1];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">195:           </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">196: vec4 computeColor(vec4 scalar, float opacity)          </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">197:   {          </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">198:   return computeLighting(vec4(texture2D(in_colorTransferFunc_0[0],          </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">199:                          vec2(scalar.w, 0.0)).xyz, opacity), 0);          </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">200:   }</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">201: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">202:         </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">203: vec3 computeRayDirection()        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">204:   {        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">205:   return normalize(ip_vertexPos.xyz - g_eyePosObj.xyz);        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">206:   }</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">207: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">208: //VTK::Picking::Dec</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">209: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">210: //VTK::RenderToImage::Dec</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">211: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">212: //VTK::DepthPeeling::Dec</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">213: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">214: /// We support only 8 clipping planes for now</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">215: /// The first value is the size of the data array for clipping</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">216: /// planes (origin, normal)</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">217: uniform float in_clippingPlanes[49];</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">218: uniform float in_scale;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">219: uniform float in_bias;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">220: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">221: //////////////////////////////////////////////////////////////////////////////</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">222: ///</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">223: /// Helper functions</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">224: ///</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">225: //////////////////////////////////////////////////////////////////////////////</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">226: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">227: /**</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">228:  * Transform window coordinate to NDC.</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">229:  */</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">230: vec4 WindowToNDC(const float xCoord, const float yCoord, const float zCoord)</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">231: {</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">232:   vec4 NDCCoord = vec4(0.0, 0.0, 0.0, 1.0);</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">233: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">234:   NDCCoord.x = (xCoord - in_windowLowerLeftCorner.x) * 2.0 *</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">235:     in_inverseWindowSize.x - 1.0;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">236:   NDCCoord.y = (yCoord - in_windowLowerLeftCorner.y) * 2.0 *</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">237:     in_inverseWindowSize.y - 1.0;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">238:   NDCCoord.z = (2.0 * zCoord - (gl_DepthRange.near + gl_DepthRange.far)) /</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">239:     gl_DepthRange.diff;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">240: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">241:   return NDCCoord;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">242: }</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">243: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">244: /**</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">245:  * Transform NDC coordinate to window coordinates.</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">246:  */</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">247: vec4 NDCToWindow(const float xNDC, const float yNDC, const float zNDC)</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">248: {</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">249:   vec4 WinCoord = vec4(0.0, 0.0, 0.0, 1.0);</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">250: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">251:   WinCoord.x = (xNDC + 1.f) / (2.f * in_inverseWindowSize.x) +</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">252:     in_windowLowerLeftCorner.x;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">253:   WinCoord.y = (yNDC + 1.f) / (2.f * in_inverseWindowSize.y) +</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">254:     in_windowLowerLeftCorner.y;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">255:   WinCoord.z = (zNDC * gl_DepthRange.diff +</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">256:     (gl_DepthRange.near + gl_DepthRange.far)) / 2.f;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">257: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">258:   return WinCoord;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">259: }</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">260: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">261: //////////////////////////////////////////////////////////////////////////////</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">262: ///</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">263: /// Ray-casting</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">264: ///</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">265: //////////////////////////////////////////////////////////////////////////////</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">266: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">267: /**</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">268:  * Global initialization. This method should only be called once per shader</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">269:  * invocation regardless of whether castRay() is called several times (e.g.</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">270:  * vtkDualDepthPeelingPass). Any castRay() specific initialization should be</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">271:  * placed within that function.</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">272:  */</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">273: void initializeRayCast()</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">274: {</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">275:   /// Initialize g_fragColor (output) to 0</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">276:   g_fragColor = vec4(0.0);</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">277:   g_dirStep = vec3(0.0);</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">278:   g_srcColor = vec4(0.0);</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">279:   g_exit = false;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">280: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">281:           </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">282:   // Get the 3D texture coordinates for lookup into the in_volume dataset        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">283:   g_dataPos = ip_textureCoords.xyz;        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">284:         </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">285:   // Eye position in dataset space        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">286:   g_eyePosObj = in_inverseVolumeMatrix[0] * vec4(in_cameraPos, 1.0);        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">287:         </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">288:   // Getting the ray marching direction (in dataset space);        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">289:   vec3 rayDir = computeRayDirection();        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">290:         </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">291:   // Multiply the raymarching direction with the step size to get the        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">292:   // sub-step size we need to take at each raymarching step        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">293:   g_dirStep = (ip_inverseTextureDataAdjusted *        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">294:               vec4(rayDir, 0.0)).xyz * in_sampleDistance;        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">295:         </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">296:   // 2D Texture fragment coordinates [0,1] from fragment coordinates.        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">297:   // The frame buffer texture has the size of the plain buffer but         </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">298:   // we use a fraction of it. The texture coordinate is less than 1 if        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">299:   // the reduction factor is less than 1.        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">300:   // Device coordinates are between -1 and 1. We need texture        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">301:   // coordinates between 0 and 1. The in_noiseSampler and in_depthSampler        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">302:   // buffers have the original size buffer.        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">303:   vec2 fragTexCoord = (gl_FragCoord.xy - in_windowLowerLeftCorner) *        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">304:                       in_inverseWindowSize;        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">305:         </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">306:   if (in_useJittering)        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">307:   {        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">308:     float jitterValue = texture2D(in_noiseSampler, fragTexCoord).x;        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">309:     g_rayJitter = g_dirStep * jitterValue;        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">310:     g_dataPos += g_rayJitter;        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">311:   }        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">312:   else        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">313:   {        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">314:     g_dataPos += g_dirStep;        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">315:   }        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">316:         </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">317:   // Flag to deternmine if voxel should be considered for the rendering        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">318:   g_skip = false;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">319: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">320:         </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">321:   // Flag to indicate if the raymarch loop should terminate       </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">322:   bool stop = false;      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">323:       </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">324:   g_terminatePointMax = 0.0;      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">325:       </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">326: #ifdef GL_ES      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">327:   vec4 l_depthValue = vec4(1.0,1.0,1.0,1.0);      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">328: #else      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">329:   vec4 l_depthValue = texture2D(in_depthSampler, fragTexCoord);      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">330: #endif      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">331:   // Depth test      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">332:   if(gl_FragCoord.z >= l_depthValue.x)      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">333:     {      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">334:     discard;      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">335:     }      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">336:       </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">337:   // color buffer or max scalar buffer have a reduced size.      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">338:   fragTexCoord = (gl_FragCoord.xy - in_windowLowerLeftCorner) *      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">339:                  in_inverseOriginalWindowSize;      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">340:       </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">341:   // Compute max number of iterations it will take before we hit      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">342:   // the termination point      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">343:       </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">344:   // Abscissa of the point on the depth buffer along the ray.      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">345:   // point in texture coordinates      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">346:   vec4 terminatePoint = WindowToNDC(gl_FragCoord.x, gl_FragCoord.y, l_depthValue.x);      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">347:       </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">348:   // From normalized device coordinates to eye coordinates.      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">349:   // in_projectionMatrix is inversed because of way VT      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">350:   // From eye coordinates to texture coordinates      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">351:   terminatePoint = ip_inverseTextureDataAdjusted *      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">352:                    in_inverseVolumeMatrix[0] *      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">353:                    in_inverseModelViewMatrix *      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">354:                    in_inverseProjectionMatrix *      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">355:                    terminatePoint;      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">356:   terminatePoint /= terminatePoint.w;      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">357:       </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">358:   g_terminatePointMax = length(terminatePoint.xyz - g_dataPos.xyz) /      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">359:                         length(g_dirStep);      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">360:   g_currentT = 0.0;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">361: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">362:   </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">363: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">364:   </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">365: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">366:   //VTK::RenderToImage::Init</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">367: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">368:   //VTK::DepthPass::Init</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">369: }</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">370: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">371: /**</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">372:  * March along the ray direction sampling the volume texture.  This function</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">373:  * takes a start and end point as arguments but it is up to the specific render</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">374:  * pass implementation to use these values (e.g. vtkDualDepthPeelingPass). The</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">375:  * mapper does not use these values by default, instead it uses the number of</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">376:  * steps defined by g_terminatePointMax.</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">377:  */</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">378: vec4 castRay(const float zStart, const float zEnd)</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">379: {</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">380:   //VTK::DepthPeeling::Ray::Init</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">381: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">382:   //VTK::DepthPeeling::Ray::PathCheck</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">383: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">384:   </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">385: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">386:   /// For all samples along the ray</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">387:   while (!g_exit)</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">388:   {</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">389:           </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">390:     g_skip = false;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">391: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">392:     </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">393: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">394:     </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">395: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">396:     </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">397: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">398:     </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">399: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">400:     //VTK::PreComputeGradients::Impl</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">401: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">402:           </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">403:     if (!g_skip)      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">404:       {      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">405:       vec4 scalar = texture3D(in_volume[0], g_dataPos);        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">406:       scalar.r = scalar.r * in_volume_scale[0].r + in_volume_bias[0].r;        </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">407:       scalar = vec4(scalar.r);             </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">408:       g_srcColor = vec4(0.0);             </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">409:       g_srcColor.a = computeOpacity(scalar);             </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">410:       if (g_srcColor.a > 0.0)             </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">411:         {             </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">412:         g_srcColor = computeColor(scalar, g_srcColor.a);           </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">413:         // Opacity calculation using compositing:           </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">414:         // Here we use front to back compositing scheme whereby           </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">415:         // the current sample value is multiplied to the           </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">416:         // currently accumulated alpha and then this product           </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">417:         // is subtracted from the sample value to get the           </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">418:         // alpha from the previous steps. Next, this alpha is           </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">419:         // multiplied with the current sample colour           </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">420:         // and accumulated to the composited colour. The alpha           </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">421:         // value from the previous steps is then accumulated           </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">422:         // to the composited colour alpha.           </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">423:         g_srcColor.rgb *= g_srcColor.a;           </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">424:         g_fragColor = (1.0f - g_fragColor.a) * g_srcColor + g_fragColor;             </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">425:         }      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">426:       }</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">427: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">428:     //VTK::RenderToImage::Impl</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">429: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">430:     //VTK::DepthPass::Impl</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">431: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">432:     /// Advance ray</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">433:     g_dataPos += g_dirStep;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">434: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">435:           </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">436:     if(any(greaterThan(g_dataPos, in_texMax[0])) ||      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">437:       any(lessThan(g_dataPos, in_texMin[0])))      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">438:       {      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">439:       break;      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">440:       }      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">441:       </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">442:     // Early ray termination      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">443:     // if the currently composited colour alpha is already fully saturated      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">444:     // we terminated the loop or if we have hit an obstacle in the      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">445:     // direction of they ray (using depth buffer) we terminate as well.      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">446:     if((g_fragColor.a > g_opacityThreshold) ||       </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">447:        g_currentT >= g_terminatePointMax)      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">448:       {      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">449:       break;      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">450:       }      </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">451:     ++g_currentT;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">452:   }</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">453: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">454:   </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">455: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">456:   return g_fragColor;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">457: }</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">458: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">459: /**</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">460:  * Finalize specific modes and set output data.</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">461:  */</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">462: void finalizeRayCast()</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">463: {</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">464:   </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">465: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">466:   </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">467: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">468:   </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">469: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">470:   </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">471: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">472:     </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">473:   // Special coloring mode which renders the voxel index in fragments that  </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">474:   // have accumulated certain level of opacity. Used during the selection  </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">475:   // pass vtkHardwareSelection::ID_MID24.  </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">476:   if (g_fragColor.a > 3.0/ 255.0)  </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">477:     {  </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">478:     uvec3 volumeDim = uvec3(in_textureExtentsMax - in_textureExtentsMin);  </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">479:     uvec3 voxelCoords = uvec3(volumeDim * g_dataPos);  </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">480:     // vtkHardwareSelector assumes index 0 to be empty space, so add uint(1).  </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">481:     uint idx = volumeDim.x * volumeDim.y * voxelCoords.z +  </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">482:       volumeDim.x * voxelCoords.y + voxelCoords.x + uint(1);  </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">483:     idx = ((idx & 0xff000000) >> 24);  </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">484:     fragOutput0 = vec4(float(idx % uint(256)) / 255.0,  </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">485:       float((idx / uint(256)) % uint(256)) / 255.0,  </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">486:       float(idx / uint(65536)) / 255.0, 1.0);  </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">487:     }  </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">488:   else  </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">489:     {  </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">490:     fragOutput0 = vec4(0.0);  </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">491:     }  </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">492:   return;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">493: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">494:   g_fragColor.r = g_fragColor.r * in_scale + in_bias * g_fragColor.a;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">495:   g_fragColor.g = g_fragColor.g * in_scale + in_bias * g_fragColor.a;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">496:   g_fragColor.b = g_fragColor.b * in_scale + in_bias * g_fragColor.a;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">497:   fragOutput0 = g_fragColor;</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">498: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">499:   //VTK::RenderToImage::Exit</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">500: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">501:   //VTK::DepthPass::Exit</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">502: }</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">503: </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">504: //////////////////////////////////////////////////////////////////////////////</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">505: ///</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">506: /// Main</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">507: ///</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">508: //////////////////////////////////////////////////////////////////////////////</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">509: void main()</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">510: {</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">511:       </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">512:   initializeRayCast();    </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">513:   castRay(-1.0, -1.0);    </span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">514:   finalizeRayCast();</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">515: }</span></p>
<p style="margin:0px;font-family:Courier;font-size:13pt;color:rgb(128,0,0);white-space:pre-wrap"><br></p>
<p style="margin:0px;font-family:Courier;font-size:13pt;color:rgb(128,0,0);white-space:pre-wrap"><br></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">ERROR: In /Users/kitware/dashboards/buildbot-slave/8275bd07/build/superbuild/paraview/src/VTK/Rendering/OpenGL2/vtkShaderProgram.cxx, line 446</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">vtkShaderProgram (0x60c00058d5b0): ERROR: 0:483: '&' does not operate on 'unsigned int' and 'int'</span></p>
<p style="margin:0px;font-family:Courier;font-size:13pt;color:rgb(128,0,0);white-space:pre-wrap"><br></p>
<p style="margin:0px;font-family:Courier;font-size:13pt;color:rgb(128,0,0);white-space:pre-wrap"><br></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">ERROR: In /Users/kitware/dashboards/buildbot-slave/8275bd07/build/superbuild/paraview/src/VTK/Rendering/VolumeOpenGL2/vtkOpenGLGPUVolumeRayCastMapper.cxx, line 3169</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">vtkOpenGLGPUVolumeRayCastMapper (0x7fc085e21f60): Shader failed to compile</span></p>
<p style="margin:0px;font-family:Courier;font-size:13pt;color:rgb(128,0,0);white-space:pre-wrap"><br></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">Traceback (most recent call last):</span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">  File "<string>", line 450, in <module></span></p>
<p style="margin:0px;white-space:pre-wrap"><span style="font-family:Courier;font-size:13pt;color:rgb(128,0,0)">AttributeError: 'vtkCommonDataModelPython.vtkImageData' object has no attribute 'GetPoints'</span></p>
<p style="margin:0px;font-family:Courier;font-size:13pt;color:rgb(128,0,0);white-space:pre-wrap"><br></p><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2018-07-11 21:08 GMT+07:00 Aron Helser <span dir="ltr"><<a href="mailto:aron.helser@kitware.com" target="_blank">aron.helser@kitware.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Adding back the mailing list....<div><br></div><div>Alexey,</div><div>Do you have a particular goal, or do you just want to try out vtk-js? If you just want to see what it can do, it is used the rendering in ParaView Glance, which you can try out here:</div><div><a href="https://kitware.github.io/paraview-glance/nightly/" target="_blank">https://kitware.github.io/<wbr>paraview-glance/nightly/</a><br></div><div>It will load several different data formats, or just start with the example datasets. As you can see, vtk-js is used for real and useful projects.</div><div><br></div><div>For just VTK-js, the example applications like the OBJ viewer: <a href="https://kitware.github.io/vtk-js/examples/OBJViewer.html" target="_blank">https://kitware.<wbr>github.io/vtk-js/examples/<wbr>OBJViewer.html</a></div><div>are a good starting point - there are several that will load different formats of data.</div><div><br></div><div>The script I pointed you at is a ParaView macro, which means that after running the ParaView application, you add it by going to the Macro menu and choosing 'Add new macro...'</div><div><br></div><div>Regards,</div><div>Aron</div></div><div class="HOEnZb"><div class="h5"><br><div class="gmail_quote"><div dir="ltr">On Wed, Jul 11, 2018 at 9:59 AM Alexey Pechnikov <<a href="mailto:pechnikov@mobigroup.ru" target="_blank">pechnikov@mobigroup.ru</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Aron,<div><br></div><div>That script doesn't work in python2/python3 (there is no paraview extension) and it doesn't work in internal Paraview Python shell. Maybe do you know some working way? Or do you mean I need to write my own script using this one instead of normal documentation? Is vtk-js used by somebody or it's only just to fun unuseful project? Maybe I don't need to try it actually.</div></div><div class="gmail_extra"><br><div class="gmail_quote">2018-07-11 20:16 GMT+07:00 Aron Helser <span dir="ltr"><<a href="mailto:aron.helser@kitware.com" target="_blank">aron.helser@kitware.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi Alexey,<div>This example: <a href="https://kitware.github.io/vtk-js/examples/StandaloneSceneLoader.html" target="_blank">https://kitware.<wbr>github.io/vtk-js/examples/<wbr>StandaloneSceneLoader.html</a></div><div>references this macro from vtk-js: Utilities/ParaView/<wbr>export-scene-macro.py</div><div>It can be used to export a scene from ParaView for consumption by vtk-js. </div><div><br></div><div>I know there are other ways to do it as well, but that was the easiest.</div><div>HTH,</div><div>Aron</div></div><br><div class="gmail_quote"><div><div class="m_-4439136373360282098m_6752255536829370604h5"><div dir="ltr">On Wed, Jul 11, 2018 at 5:54 AM Alexey Pechnikov <<a href="mailto:pechnikov@mobigroup.ru" target="_blank">pechnikov@mobigroup.ru</a>> wrote:<br></div></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="m_-4439136373360282098m_6752255536829370604h5"><div dir="ltr">Hi,<div><br></div><div>I couldn't find any documentation or tool to do it. Google doesn't know anything about "vti-web" data format. VTK/VTI and other VTK formats are not allowed I see. Is disassembling example datasets and build own tools the only possible way?!<br clear="all"><div><br></div>-- <br><div class="m_-4439136373360282098m_6752255536829370604m_728893885673327684m_181269064484301796gmail_signature"><div dir="ltr"><div>Best regards, Alexey Pechnikov.<br></div></div></div>
</div></div></div></div>
______________________________<wbr>_________________<br>
Powered by <a href="http://www.kitware.com" rel="noreferrer" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" rel="noreferrer" target="_blank">http://www.kitware.com/<wbr>opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" rel="noreferrer" target="_blank">http://www.vtk.org/Wiki/VTK_<wbr>FAQ</a><br>
<br>
Search the list archives at: <a href="http://markmail.org/search/?q=vtkusers" rel="noreferrer" target="_blank">http://markmail.org/search/?q=<wbr>vtkusers</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="https://public.kitware.com/mailman/listinfo/vtkusers" rel="noreferrer" target="_blank">https://public.kitware.com/<wbr>mailman/listinfo/vtkusers</a><br>
</blockquote></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="m_-4439136373360282098m_6752255536829370604gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>Best regards, Alexey Pechnikov.<br></div></div></div>
</div>
</blockquote></div>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>Best regards, Alexey Pechnikov.<br></div></div></div>
</div>