views:

207

answers:

8

Hi, I am IT student and I have to make a project in VB6, I was thinking to make a 3D Software Renderer but I don't really know where to start, I found a few tutorials but I want something that goes in depth with the maths and algorithms, I will like something that shows how to make 3D transformations, Camera, lights, shading ...

It does not matter the programing language used, I just need some resources that shows me exactly how to make this.

So I just want to know where to find some resources, or you can show me some source code and tell me where to start from.

Or if any of you have a better idea for a VB6 project.

Thanks.

+1  A: 

VB6 is not the best suited language to do maths and 3D graphics, and given that you have no previous knowledge about the subject either, I would recommend you to choose something different (and easier).

As it's Visual Basic, you could try something more form-oriented, that is the original intent of the language.

fortran
Yes I know that, but I need to make this project in VB6 and I have to use alot of algorythms and math, so I can't think of anything else.
andreeib
A: 

A 3D software renderer as a whole project is fairly complex if you've never done it before. I would suggest something smaller - like just doing the 3D portion and using lines to do the rendering OR just write a shaded triangle renderer (which is the underpinnings of 3D renderers anyway).

Something a little simpler rather than trying to write a full-blown 3D software renderer on the first go - especially in VB.

Aaron
I don't really have to make a full 3D Software Renderer but at least It needs to have Camera, lights, shading and transformations.
andreeib
A: 

A software renderer is a very difficult project and the language VB6 is not indicated at all ( for a task like this c++ is the way.. ), anyway I can suggest you some great books I used:

  1. Shaders: http://wiki.gamedev.net/index.php/D3DBook%3AIntroduction%5F%28Volume%29
  2. Math: 3D Math Primer for Graphics and Game Development

There are other 2 books. Even if they are for VB.NET you can find some useful code:

  1. .NET Game Programming with DirectX 9.0
  2. Beginning .NET Game Programming in VB .NET
Salv0
Thank's alot, I know that C++ it's best for this but I have to use VB6. I will check this book's.
andreeib
+4  A: 

I disagree with the previous posts, a 3D renderer is actually pretty simple. A high-quality 3D renderer is hard however.

  1. Get a bunch of 3D data, triangles are simplest.
  2. Learn about homogenous coordinates and the great 4x4 matrix for transforms.
  3. Define a camera by a position and a rotation (expressed in the 4x4 matrix).
  4. Transform your 3D geometry by this camera.
  5. Perform the perspective divide and scale to your window. This converts your 3D data to 2D.
  6. Render the data as 2D.

Now you're going to lose out on a depth buffer, so stick to wireframes in the beginning. :-)

Don't listen to these nay-sayers, go out and have some fun!

Frank Krueger
Yes I will surely try to make this, and I will nor change my mind. I read about all about this things and I want to find more informations.You said earlier that you had written a tutorial for this, do you have a link?
andreeib
good luck with the subject for the next year then xD
fortran
+1  A: 

There is the 3D engine list which lists three engine in pure basic (an oxymoron) + Source code and of them one is in Visual Basic (Dex3D)

DeX3D is an open source 3D engine coded entirely in Visual Basic from Jerry Chen ( [email protected] ).

  • Gouraud shading
  • Transparency
  • Fogging
  • Omni and spot lights
  • Hierarchical meshes
  • Support for 3D Studio files
  • Particle systems
  • Bezier curve segments
  • 2.5 D text
  • Visual Basic source

More information, screenshots and the source can be found on the Dex3D Homepage. (<= Dead Link)

Shay Erlichmen
Yes I found the source code of an earlier version of this, I will try and see how it work's.
andreeib
A: 

I think you can take two ways either go the Direct X way and use DirectX 8 that has VB 5-6 support. I found a page http://www.gamedev.net/reference/articles/article1308.asp

You can always write a engine group up but by doing so you will need some basic linear algebra like Frank Krueger suggests.

I want to make my project whithout using DirectX ar other 3D engine I want to make something starting from just basic code, but if I can't I will surely try DirectX or I will try making a Vector Drawing aplication.
andreeib
+1  A: 

EGL25 by Erkan Sanli is a fast open source VB 6 renderer that can render, rotate, animate, etc. complex solid shapes made of thousands of polygons. Just Windows API calls – no DirectX, no OpenGL.

alt text

VBMigration.com chose EGL25 as a high-quality open-source VB6 project to demonstrate their VB6 to VB.Net upgrade tool.

MarkJ
+3  A: 

Many years ago I made a shaded triangle renderer that used library calls to draw the triangles. It's a rather naive approach but you would be able to achieve the same result using VB6. I got all the maths & techniques from "Computer Graphics principles and practice" by Foley et al. Some parts are out of date now but I think you'd find it very helpful for this project and it can be bought 2nd hand at reasonable prices from Amazon for example.

One simple approach could be:

  1. Read model file as triangles
  2. Transform each triangle using matrices to account for camera position
  3. Project triangle points onto 2D
  4. Draw 2D triangle (probably using GDI)

This covers wireframe viewing. To extend this to hidden surface removal you need to work out which triangles are in front. Two possible ways:

  1. Z-order sorting the triangles and drawing the ones furthest from the camera first. This is simple but inefficient if there are a lot of triangles and can give overlapping triangle effects when the order is not quite correct. You also have to decide how to sort the triangles - e..g by centroid, by extents...
  2. Using a software depth buffer. This will give better results but is more work to implement. You will have to write your own triangle drawing code so cannot rely on GDI. See bresenham's line algorithm and related algorithms for doing filled triangles for how to do this.

After this you'd also need some kind of shading based on lighting. The calculations are covered in Computer Graphics principles and practice. For simple shading you can stick with drawing triangles using gdi , but if you want to do gouraud or phong shading the colour values vary across a triangle. One way around this is to sub-divide the triangle into smaller triangles, but this is inefficient and won't give very nice looking results. Better would be to draw the triangles yourself as required above for the software depth buffer.

A good extension would be to support primitives other than triangles. Basic approach would be to split primitives into triangles as you read them.

Good luck - could be an interesting project.

danio
Thank's for the info, I'l search the book and see if I can find some answers there.
andreeib