source: trunk/gui/vizservers/nanovis/shaders/zincblende_volume.cg @ 617

Last change on this file since 617 was 617, checked in by vrinside, 17 years ago

Added new zinc blende renderer - It is still needed to compare with unicell based simulation data.
Removed tentatively used class, NvVolQDVolumeShader,NvVolQDVolume
Moved Font.bmp into resources directory

File size: 2.4 KB
Line 
1/*
2 * ======================================================================
3 *  AUTHOR:  Wei Qiao <qiaow@purdue.edu>
4 *           Purdue Rendering and Perceptualization Lab (PURPL)
5 *
6 *  Copyright (c) 2004-2006  Purdue Research Foundation
7 *
8 *  See the file "license.terms" for information on usage and
9 *  redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
10 * ======================================================================
11 */
12
13#include "common.cg"
14
15/*
16 * zincblende shading fragment program:
17 */
18
19PixelOut main(v2f IN,
20                uniform sampler1D tf,
21                uniform sampler3D volumeA,
22                uniform sampler3D volumeB,
23                uniform float4 cellSize,
24                uniform float4x4 modelViewInv,
25                uniform float4 renderParameters)
26
27{
28
29  PixelOut OUT;
30
31  float4 tex_coord = mul(modelViewInv, IN.TexCoord);
32  float4 twice_cell_size = cellSize * 2.0;
33       
34  float4 tex_coord_a = tex_coord - float4(twice_cell_size.x, twice_cell_size.y, 0, 0);
35  float4 tex_coord_b = tex_coord - float4(twice_cell_size.x, 0, twice_cell_size.z, 0);
36  float4 tex_coord_c = tex_coord - float4(0, twice_cell_size.y, twice_cell_size.z, 0);
37       
38  float4 voxel_corner = f4tex3D(volumeA, tex_coord) + f4tex3D(volumeB, tex_coord - cellSize);
39  float4 voxel_face_center_a = f4tex3D(volumeA, tex_coord_a) + f4tex3D(volumeB, tex_coord_a - cellSize);
40  float4 voxel_face_center_b = f4tex3D(volumeA, tex_coord_b) + f4tex3D(volumeB, tex_coord_b - cellSize);
41  float4 voxel_face_center_c = f4tex3D(volumeA, tex_coord_c) + f4tex3D(volumeB, tex_coord_c - cellSize);
42       
43  //combine 8 sampling results
44  float sample = (voxel_corner.x + voxel_face_center_a.y + voxel_face_center_b.z + voxel_face_center_c.w) * 0.125;
45
46  //sample transfor function texture
47  float4 color = f4tex1D(tf, sample);
48
49
50  if(renderParameters.x < 0.5)
51  { //If single slice render, only flat shading, completely opaque.
52    color.w = 1;
53  }
54  else
55  { //regular volume rendering, we do FLAT SHADING
56    //since all 4 components of the volume texture has been used to store orbital data,
57    //there is no room to store normal vector. If we really need PHONG shading we have to pass more volumes to
58    //the shader. We might add this later.
59
60    color.w = renderParameters.y * color.w / renderParameters.x; //opacity is modulated by the number of total slices
61                                                        //to avoid very opaque volume when number of slices is high
62  }
63
64  OUT.Color = color;
65  return OUT;
66}
Note: See TracBrowser for help on using the repository browser.