- THE OUTLAW TRIAD DEMO-SERIES -
-------------------------- PART II ---------------------------------
Written by : Vulture/OT
Code in : Pascal/Asm
Topic : 3d starfield
----------------------- Introduction -------------------------------
Welcome to the Outlaw Triad demo-series! In these series we will be
talking about programming demo-effects in either pascal or assembler.
Theory behind the effects shall be discussed while a full sourcecode
is also provided.
In this second release of the Outlaw Triad demo-series we will
discuss how to create a 3d starfield in 100% assembler. This is a
wellknown effect in the demo-scene and is used in many demos. It's a
great background routine for various effects so let's see how one
creates such a starfield. Enjoy!
-------------------------- Theory ----------------------------------
A 3d point consists of X,Y,Z values. However, your screen is a 2d
plane. This means you must do a 3d to 2d conversion. You can do that
with these formulas:
ScreenX := ((X * 256) / Z) + 160
ScreenY := ((Y * 256) / Z) + 100
I assume ScreenX and ScreenY don't need any futher explanation.
Now, setup X to be a random value between -160..160. Your Y value
should be setup between -100..100. I choose Z to be 256 at start.
When decreasing the Z value, the stars will come towards you.
Obviously, when you increase Z, stars will fly away from you.
You add 160 and 100 to center the point on the screen. Ok, if the
star Z value is 0 (or below), then abort the star and create a new
one. Also do this when the star is not in VGA range.
In my code I did these steps:
- Check Z (and do appropiate action)
- Delete old star
- Calculate Screen X
- Range check X
- Calculate Screen Y
- Range check Y
- Calculate final vga-position (y*320+x)
- Plot star
- Save vgaposition (for deletion)
- Decrease (or increase) Z
Do this for all stars and that's it! You've got a cool 3d starfield!
The little trick in this source is the Random routine. When I first
started coding assembler, I examined an example of 3d stars by
Draeden of VLA.
His example used a chart with the random values pre-calculated in it.
This is a nice solution but the disadvantage is that you will always
see the same stars because you work with the same random values
constantly. That's not too good. So, when I finally got my own random
routine, I decided to write my own little 3d starfield. The starting
seed value is obtained from the system clock, just like using the
Randomize command in Pascal.
Of course you can do various little tricks with 3d starfields.
For example, you could rotate all stars so they fly in another
direction. What I'm trying to say is that a simple basic 3d
starfield ain't nothing special. So go and make something cool using
3d starfields. Try implementing this in other resolutions
(like 320*400). Be creative!
Ok, this is all for now. Happy coding!
- Vulture / Outlaw Triad -
------------------------ Distro Sites ------------------------------
Call our distros to get all our releases.
BlueNose World HQ +31 (0)345-619401
FireHouse Distrosite +31 (0)528-274176 More distros wanted!
The Force Distrosite +31 (0)36-5346967
MagicWare Italian HQ +39 6-52355532
--------------------------- Contact --------------------------------
Want to contact Outlaw Triad for some reason? You can reach us at our
distrosites in Holland. Or if you have e-mail access, mail us:
Vulture (coder/pr) comma400@tem.nhl.nl
Our internet homepage:
http://www.tem.nhl.nl/~comma400/vulture.html
These internet adresses should be valid at least till june 1996.
|