File: vtkGPUVolumeRayCastMapper_PerspectiveProjectionFS.glsl

package info (click to toggle)
vtk6 6.3.0%2Bdfsg2-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 118,880 kB
  • sloc: cpp: 1,442,792; ansic: 113,395; python: 72,383; tcl: 46,998; xml: 8,119; yacc: 4,525; java: 4,239; perl: 3,108; lex: 1,694; sh: 1,093; asm: 154; makefile: 103; objc: 17
file content (60 lines) | stat: -rw-r--r-- 1,718 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/*=========================================================================

  Program:   Visualization Toolkit
  Module:    vtkGPUVolumeRayCastMapper_PerspectiveProjectionFS.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.

=========================================================================*/

// Perspective projection.

#version 110

// Entry position (global scope)
vec3 pos;
// Incremental vector in texture space (global scope)
vec3 rayDir;

// Camera position in texture space
uniform vec3 cameraPosition;
// Sample distance in world space
uniform float sampleDistance;
// Matrix coefficients: diagonal (a11,a22,a33)
uniform vec3 matrix1;
// Matrix coefficients: others (2a12,2a23,2a13)
uniform vec3 matrix2;

// Defined in the right projection method.
void incrementalRayDirection()
{
  // Direction of the ray in texture space, not normalized.
  rayDir=pos-cameraPosition;

  // x^2, y^2, z^2
  vec3 normDir=rayDir*rayDir;
  normDir.x=dot(normDir,matrix1);

  // xy,yz,zx
  vec3 coefs=rayDir*rayDir.yxz;
  coefs.x=dot(coefs,matrix2);

  // n^2
  normDir.x=normDir.x+coefs.x;

  // 1/n
  // normDir=1/sqrt(normDir)
  normDir.x=inversesqrt(normDir.x);

  // Final scale factor for the ray direction in texture space
  // normDir=normDir*sampleDistance
  normDir.x=normDir.x*sampleDistance;
  // Now, rayDir is the incremental direction in texture space
  rayDir=rayDir*normDir.x;
}