Introduction
Overview
Concepts
History
Viewing Tips
Software
Books
Web Sites

Gallery
Text
B&W
Color
Sprites
Tiled
Textures
Depth Masks

Algorithms
Text Algorithm
Pixel Algorithm
Smart Links
Hidden Surface
Center-Out
Over Sampling
All Combined

Stereo Algorithms - Hidden Surface Removal
This page shows how to modify the basic stereogram code to incorporate a hidden surface removal algorithm.


Basic Stereogram with Hidden Surface Removal Source Code:

1   Dim x As Long, y As Long, maxX As Long, maxY As Long, same() As Long  'basic
2   Dim z() As Single, mu As Single, E As Long, DPI As Long, s As Long    'basic
3   Dim right As Long, left As Long, w As Single                          'basic
4   Dim L As Long                                             'smart links
5   Dim zt As Single, t As Long, visible As Long              'hidden surface removal
6   DPI = 72:  E = 2.5 * DPI:  mu = 0.2: w = 0.5
    w = whitespace: mu = depth
7   maxX = picDepth.ScaleWidth: maxY = picDepth.ScaleHeight
8   ReDim same(maxX), z(maxX, maxY): Randomize
9   For y = 0 To maxY
10    For x = 0 To maxX - 1                                      '1 scanline
11      z(x, y) = picDepth.Point(x, y) / 16777215              'initialize
12      same(x) = x                                            'initialize
13      s = (1 - mu * z(x, y)) * E / (2 - mu * z(x, y))        'image plane separation
14      left = x - (s / 2)                                     'left link position
15      right = left + s                                       'right link position
16      If 0 <= left And right < maxX Then
17        t = 1
18        Do
19          zt = z(x, y) + 2 * (2 - mu * z(x, y)) * t / (mu * E)
20          visible = (z(x - t, y) < zt) And (z(x + t, y) < zt)
21          t = t + 1
22        Loop While visible And (zt < 1)
23        If visible Then same(left) = right  'create link
24      End If
25    Next x
26    For x = maxX - 1 To 0 Step -1                              'set colors
27      If same(x) = x Then
28        picOut.PSet (x, y), Int(Rnd + w) * vbWhite             'random Rnd*vbwhite for color
29      Else
30        picOut.PSet (x, y), picOut.Point(same(x), y)           'use link color
31      End If
32    Next x
33  Next y

Code Discussion
The hidden surface removal code, found in lines 17-23, works in the following way ...