Ok Doc,
Heres the low down. What you are looking for is a "Software" rendering
engine. So you are looking for a general book on 3D computer graphics.
Here are a few things you might like to read-up on:
Vector Math
Matrix Math
Frustum Clipping
Backface Culling
Z Buffer
BSP Trees
Texture Mapping
Clip Planes
Dave Eberly is something of an expert on this. He posts on
comp.graphics.algorithms quite frequently, has written a few books and
releases his source code free of charge (its all C++).
http://www.magic-software.com/Books.html
What you are looking for is basic principles, from which you can of course
implement with whatever platform you desire - .NET or not. The only GDI+
functions you will use are drawing methods (clear window, draw line, draw
polygon/triangle). The rest you will have to implement yourself (matrix
transforms, perspective correction, frustum clipping, model representation).
So for example, with VB.NET, you will create a vector class:
public class Vector
public x, y, z As Double
' Some methods to operate on vectors
public function DotProduct ( Another As Vector ) as Double
return ( x * Vector.x + y * Vector.y + z * Vector.z )
end sub
public sub Normalize ()
Dim Length As Double = sqrt ( x * x + y* y + z * z )
if Length <> 0 then
x /= Length
y /= Length
z / = Length
end if
end sub
end class
As I say, you are looking for first principles - if you wish to use GDI+,
you will have to implement these yourself. You won't be able to perform
real-time texture mapping or z-buffering with GDI+, although you could
implement it yourself in software (it will be VERY slow however and you will
need to implement your own triangle scan convertor! This is a big job). A
few enthusiasts spend time writing and optimising their own software
rendering engines with advanced features (some of them are actually very
good), but 99.999% of people use either DirectX or OpenGL for real time
rendering. Of course, if you are talking about Ray Tracing, software
rendering is the way to go at present, but thats a different story
altogether!