Start.of.DemoNews.118..............................................Size:45,139

 ______/\___________________________       __  ________________ ___  /\_______
 \____   \  ________ _   _ ______   \     /  \|  \  ________   |   \/  ______/
 /   |    \  _)   \   \_/   \   |    \   /    \   \  _)   \    |    \______  \
/    |     \       \   |     \  |     \ /          \       \  /~\    \    /   \
\_____     /_______/___|     /________/ \____\_____/_______/_________/________/
    \_____/            |____/
                                                      | Subscribers  :  2014
         DemoNews Issue #118 - March 5, 1996          |   Last Week  :  1950
                    -------------                     |   Change     :   +64
     DemoNews is a newsletter for the demo scene.     | Archive Size : 2169M
 It is produced by Hornet at the site ftp.cdrom.com.  |   Last Week  : 2108M
    Our demo archive is located under /pub/demos.     |   Remaining  :  795M
                                                      |
=-[Contents]=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

   Line    Section
 ------    -------------------------------------------------------------------
     33    Calendar
     55    Top Downloads
     78    Uploads
    214    Articles
    216      Introduction................................Snowman
    249      Quotes Heard in the Demoscene...............Trixter
    362      10 Ways NAID '95 Will Differ from NAID '96..GD
    527      Funktracker Port to Linux...................JsNO
    550      Intro to 3D Graphics - Volume 03............Kiwidog
    945    Subscribing
    960    Closing


=-[Calendar]=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

 Date      Event               Location  Concact Points
 --------- ------------------- --------- -------------------------------------
 29 Mar 96 Mekka               Germany   PV80090@PH80090.HH.eunet.de
           http://www.xs4all.nl/~blahh/RAW/Parties/Invitations/Mekka.html

 02 Apr 96 The Gathering       Norway    mikaels@powertech.no
           http://www.ifi.uio.no/~uwek/Crusaders/TG

 05 Apr 96 Symposium           Germany   gandalf@blackbox.shnet.org
           http://134.28.37.10/~frank/bbx-sym96/bbx96.html

 06 Apr 96 X                   Netherlnd cba@xs4all.nl
           http://www.xs4all.nl/~herkel

 31 May 96 Naid                Canada    naid@autoroute.net
           http://www.autoroute.net/~naid

 More information is at http://hagar.arts.kuleuven.ac.be/~sdog/party.html


=-[Top Downloads]-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

 NOTE: Statistics are sometimes slightly off due to symbolic links, mirrors,
 renamed files, and other things that affect the log files.

 Pc Times FileName.Ext      Pc Times FileName.Ext       Pc Times FileName.Ext
 -- ----- --------.---      -- ----- --------.---       -- ----- --------.---
 <COMBINED LIST>            <DEMOS LIST>                <GRAPHICS LIST>
  1 00416    ft206.zip       1 00238 mfx_tgr2.zip        1 00044  bondage.zip
  2 00238 mfx_tgr2.zip       2 00190 nooon_st.zip        2 00035   airwar.zip
  3 00236     cp16.zip       3 00188 ftj_ymca.zip        3 00032 spacetit.zip
  4 00190 nooon_st.zip       4 00184  animate.zip        4 00026 dst_frac.zip
  5 00188 ftj_ymca.zip       5 00129 symbolog.zip        5 00026   vamp10.zip
  6 00184  animate.zip      <MUSIC LIST>                <CODE LIST>
  7 00172 scrmt321.zip       1 00426    ft206.zip        1 00152  ggouro2.zip
  8 00161    it105.zip       2 00234     cp16.zip        2 00119  dcc_3de.zip
  9 00161    ft204.zip       3 00172 scrmt321.zip        3 00115 dn116_3d.zip
                             4 00161    it105.zip        4 00097   pmw122.zip
                                                         5 00090      s64.zip

 <Files downloaded total : 066259>


=-[Uploads]-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

=----------------------------------------------------------[File Information]-=

 All files listed below are on ftp.cdrom.com under /pub/demos.
 Please keep in mind that all ratings are subjective.

 If your file transfers are too slow, there are several alternatives:

   Our code mirror is ftp.co.iup.edu/code.  ftpadmin@ftp.co.iup.edu for help.
   Try getting files from the web at http://www.cdrom.com/pub/demos
   See /hornet/demonews/demonews.102 for details about ftpmail.

 You may also wish to check out a couple of other good demo sites:

   ftp://ftp.arosnet.se/e:\demo maintained by Zodiak / Cascada
   ftp://hagar.arts.kuleuven.ac.be/demos maintained by Sleeping Dog / Natives

 Here are also a few good WWW links to try out (under construction):

   http://www.th-zwickau.de/~maz/sound.html for music and sound utils


=-------------------------------------------------------------[Demos:General]-=
Location /demos/alpha             Size Rated Description
=-------------------------------- ---- ----- ---------------------------------=
/1996/d/distant.zip                  5 ****  Distant by Remal
/1996/j/jump_n.zip                 208 *+    Jump by Nova

=-------------------------------------------------------------[Music:General]-=
Location /demos/music             Size Rated Description
=-------------------------------- ---- ----- ---------------------------------=
/disks/1996/m/myst0296.zip        1239 ***+  Mystique Music Disk 02/96
/songs/1994/mod/f/fullmoon.zip     163 **    Full Moon Rock by Heatbeat
/songs/1994/mod/i/iridium.zip      247 ***   Iridium by Misty and Daeron
/songs/1994/mod/k/killingf.zip      96 ***+  Killing Floor v2.1 by Chorus+Sid
/songs/1994/mod/m/mypolska.zip     114 ****  Myonnytspolska by Dizzy
/songs/1994/mod/n/netherwd.zip     293 ***+  Netherworld by Probe
/songs/1994/mod/n/nk_acid2.zip     144 ***   Acid Jazz (pt 2) by Nuke
/songs/1994/mod/n/nocorner.zip      67 **+   No Corners by The Master
/songs/1995/mod/d/deci.zip         247 *     Deci by T.U.O
/songs/1995/mod/j/julius.zip       289 ***+  Julius! by Julius
/songs/1995/s3m/g/ghost.zip        116 **    Celes.Mel. by Zaigamor Spellweaver
/songs/1995/s3m/v/vibrphns.zip      77 ***   Vibraphones by Julien Lariviere
/songs/1995/xm/h/h2-brght.zip      238 *     Bright Green World by Trajic
/songs/1995/xm/i/ineed.zip         563 ***   I Need the Actions by Lizardking
/songs/1995/xm/l/lk_indi.zip       715 *     Elvis E. Ind. by LK+Ante Lundgren
/songs/1995/xm/l/lk_infer.zip      417 ***+  Inferno Dance by Lizardking
/songs/1995/xm/l/lk_sat.zip        715 *     Saturday Night by Lizardking
/songs/1995/xm/p/physiogn.zip      293 ***+  Physiognomy by Trajic
/songs/1996/it/j/joint.zip         136 *+    Joint by Galahad
/songs/1996/it/n/no-secon.zip      107 ***   Second Sight by Delta X
/songs/1996/it/v/vs_tefth.zip      232 ***+  The Soul Tefth by Vadim VS
/songs/1996/mod/d/dem-fl.zip        70 ***+  Flatloop by ???
/songs/1996/mod/d/dieindus.zip      76 ***   Die Industry by Frelancer
/songs/1996/mod/d/dream_s1.lha     204 **    Dream Sequence Part 1 by Hypno
/songs/1996/mod/d/dream_s2.lha      95 ***   Dream Sequence Part 2 by Hypno
/songs/1996/mod/d/dream_s3.lha     100 **+   Dream Sequence Part 3 by Hypno
/songs/1996/mod/h/heavenp.zip       51 **    Heaven of Pain by Madokan
/songs/1996/mod/m/mars.zip          97 **    Mars Power by Michiru
/songs/1996/mod/v/venus.zip         96 **+   Venus Power by Michiru
/songs/1996/s3m/g/g_gcntri.zip     131 ***+  Centauri Grey by GentlE
/songs/1996/s3m/g/gals.zip         112 ***+  Gals Spakoz by Zenecade
/songs/1996/s3m/g/gf_alway.zip      97 ***+  Always Dark by Ghost Fellow
/songs/1996/s3m/g/gf_depen.zip     121 ***+  Dependance by Ghost Fellow
/songs/1996/s3m/g/gf_heave.zip     162 ****  Heaven is So Far by Ghost Fellow
/songs/1996/s3m/g/gf_inter.zip      77 ****  Interstice by Ghost Fellow
/songs/1996/s3m/g/gf_lost.zip      150 ***   Lost Soul by Ghost Fellow
/songs/1996/s3m/g/gf_space.zip     117 ***   Space Killer by Ghost Fellow
/songs/1996/s3m/g/gf_techn.zip     137 ***   Tech Not! by Ghost Fellow
/songs/1996/s3m/g/gf_willb.zip      76 ***+  This Will Be by Ghost Fellow
/songs/1996/s3m/i/icefirst.zip     262 +     Think About.. by George Gaspari
/songs/1996/s3m/l/lush.zip         138 ***+  Lush Forests by Zaig. Spellweaver
/songs/1996/s3m/m/m-river.zip      137 **+   River of Sadness by Guizmo
/songs/1996/s3m/m/m-rnr.zip        177 ***   R'n'R by Uterere
/songs/1996/s3m/m/m-spell.zip      197 **+   Gypsy's Spell by Guizmo
/songs/1996/s3m/m/m-war.zip        263 ***   WarCraft by Guizmo
/songs/1996/s3m/m/meta.zip          59 ***   Metamorphica by Zenecade
/songs/1996/s3m/n/no-knife.zip      67 **+   CutThroat by SamH
/songs/1996/s3m/n/no-var-p.zip     217 **+   Variable-P by Syrinx
/songs/1996/s3m/n/no-zjump.zip     292 ***+  Zydeco Jump by Stote
/songs/1996/s3m/p/pr-adjst.zip     221 ***+  Adjustments by Darkwolf
/songs/1996/s3m/p/pr-aware.zip     143 ***   Awareness by Darkwolf
/songs/1996/s3m/v/v-river.zip      116 **+   The River Eternal by Vegas
/songs/1996/xm/e/echnaton.zip      244 *     Echnaton by Scolnick
/songs/1996/xm/g/gl-night.arj      618 ***   Forever Night by Glitch
/songs/1996/xm/h/holyhell.zip      215 *+    Holyhell by ??? 
/songs/1996/xm/h/htime.zip         415 **    House Time by Trauma
/songs/1996/xm/l/ladybug.zip       168 **    Ladybug by Scolnick
/songs/1996/xm/l/leggmatt.zip      529 *+    Leggematter'n by Xerxes
/songs/1996/xm/m/ms_hfl.zip         83 **+   Heart Full of Love by Miss Saigon
/songs/1996/xm/m/myrose.zip        262 ***+  My Rose by Nedeljko Gajic
/songs/1996/xm/n/ng-lcyc.zip       384 **+   Lunar Cycle by Solaris
/songs/1996/xm/n/ng-ondat.zip      178 **+   Ondated by Demuc
/songs/1996/xm/n/ng-rad.zip        326 ***   Radition by Cicada
/songs/1996/xm/n/no-feuil.zip      350 ****  Feuilles Mortes by Spyder
/songs/1996/xm/v/vs_feb9.zip       326 **+   February 9th by Vadim VS

=----------------------------------------------------------[Graphics:General]-=
Location /demos/graphics          Size Rated Description
=-------------------------------- ---- ----- ---------------------------------=
/images/1996/l/lt-appol.zip        170 ***   Dance with the Planets by Light

=-----------------------------------------------------[Graphics:Non-Reviewed]-=
Location /demos/graphics          Size Description
=-------------------------------- ---- ---------------------------------------=
/programs/players/cybrshow.zip    1417 Fractal Arts by Cyberlight Matrix

=----------------------------------------------------------------------[Code]-=
Location /demos/code              Size Rated Lang Description
=-------------------------------- ---- ----- ---- ----------------------------=
/demosrc/micsrc41.zip              185 **+   A--- BBS intro w/environ. mapping
/graph/3d/vga-vul3.zip              14 **+   A--P How to do simple 3D
/graph/3d/vga-vul4.zip               9 ***   A--- Simple 3D in ASM
/graph/examples/bp-hires.zip        14 **    A--- 640x480x16 by Ash/Bunghole
/graph/fade/vga-vul2.zip            20 ***   A--- ASM source on palette fading
/graph/gouraud/gvector2.zip         73 ***   --C- Gouraud vectors by Tumblin'
/graph/stars/vga-vul5.zip           10 ***   A--P How to do a simple starfield
/libs/adip.zip                     708 **    ABCP SB Awe 32 developers pack
/libs/asm_good.zip                 118 ***+  A--- Lots of misc. ASM code
/pmode/pmw122.zip                  127 ****+ --C- Pmode/W v. 1.22 by DD/Ren.
/sound/cpmik02.zip                  18 **    A--- S3M/GUS player
/sound/fmoddoc2.zip                390 ***** --C- Great MOD/S3M/player info!
/sound/mxmp12.zip                   92 ****  A-C- Tiny .XM/GUS player by Cubic
/text/ffmts002.zip                 102 ***+  ---- Music file formats info.
/text/vga-info.zip                 139 ***+  ---- Graphical pragmatics via VGA
/tutorial/basicdoc.zip               4 ***   ---- Beginner's guide to VGA
/tutorial/dn114_3d.zip              14 ****+ --CP Intro to 3D by Kiwidog
/tutorial/fh-3dtut.zip              12 ***+  A--P 3D vector tutorial
/tutorial/kmagv2.zip                54 **+   A--P King's programming mag. #2
/tutorial/kmagv3.zip                63 ***   A-CP King's programming mag. #3
/tutorial/tweakdoc.zip               5 ***+  ---- Beginner's guide to Mode X
/utils/alabv12.zip                 185 ****+ A--- ASM IDE, w/syntax highlight.
/utils/pp104swv.zip                 44 **    ---P Protect .exes from hacking


=-[Articles]=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

=---------------------------------------------------[Introduction]--[Snowman]-=

 Hello all, and welcome to DemoNews issue 118.

 First off, I'd like you all to note that we've passed 2000 subscribers this
 week!  I consider that a milestone.  When I started helping with DemoNews
 that number was under 300.  My personal thanks goes to all those who have
 helped contribute over the past several years, as well as those who have
 supported and subscribed to this online publication.  I used to ask the
 question "When will we finally saturate the scene?"  I now believe that we
 won't.  Not only are huge segments of the demo scene finally getting
 online, but countless individuals are now just discovering it.

 After reading almost all of "The Road Ahead" by Bill Gates, I am inspired.
 Our little listserver error two weeks ago is only the first of many
 creative and new ideas.

 For the past couple of weeks, our site has been getting a lot of action.
 The /pub/demos tree is seeing 3.5Gb a transferred a day on average (that's
 about 100Gb a month)!  Believe it or not, this isn't even 1/3rd what the
 /pub/games archive is getting.  Now, I like games just as much as the next
 guy.  However, games aren't really my first love.  I encourage you all to
 use our demo archive and download as much as possible, as often as
 possible, at weird hours of the day, while eating, while in the shower,
 while sleeping, while doing your homework...  :)  Let's see if we can hit a
 5Gb day!

 Don't forget to submit articles to Darkness / Imphobia for the upcoming
 diskmag.

 Snowman / Hornet - r3cgm@cdrom.com


=----------------------------------[Quotes Heard in the Demoscene]--[Trixter]-=

 [This list was compiled by Trixter]

 _____General Quotes

 "Good code isn't good design, and good design doesn't need good code."
   Charlatan
 
 "Jezus Christ, are we still having this conversation?"
   Luc Lodder, on the Amiga vs. PC debate.
 
 "When the finish Head General sees the Russian army coming he just boots up
 his PC and loads Second Reality.  Then when all the ruskies are staring in
 disbelief, a plane drops a bomb on them."
   Tony, on how the Finnish demoscene could help in the Finnish army
 
 "The number of channels available with a PC trackers has led to a
 generation of lazy mod composers. Instead of using a trick, let's use
 another track!"
   Moby / Nooon
 
 "Hello, people!!  Monitor manuals have H-Sync V-Sync tolerance listings for
 a _REASON_!!"
   Lance Kalzus, on reports that Xtal by Complex was blowing up monitors
 
 "Moral:  Never underestimate democoders..."
   PsychoMan, on people who think democoding is a limited art
 
 "Personally, I'd be surprised to see someone release something on CD that
 was made up of huge, total, game.  Come to think of it, you could create
 RPGs that take an average of 1.4yrs to complete, if you just stretched your
 mind and put a GAME on the CD instead of an 'interactive movie'."
   Mr. P, on the future of gaming
 
 "The trick is to forget about writing something good and pull cheese out of
 your butt."
   Necros, on how to win the '20-Minutes' compo
 
 "A DOT!!!! A FUCKING DOT!!!! YEAH!!!!!!!"
   Chris Chapin, on getting his first graphic element working
 
 "I have to figure out what 'music good moose american!' means."
   Leviathan, on translating some of the european fan mail he gets
 
 "The life of the coder is that of the hermit, except the hermit can't make
 shadebobs."
   Leviathan, on coding
 
 "You're just trying to find texture coordinates, not to be mathematically
 correct."
   Midnight, on how accurate you should be while coding environment mapping
 
 "People often forget God's contribution to the demo scene. He coded some
 brilliant effects, all real-time as well."
   Lew
 
 "As we all know, the audience voted for best productions at Juhla Pi.  And,
 as always - audience was stupid."
   Jmagic, on why the world's first real-time raytracing demo didn't win 1st
   place at Juhla Pi
 
 _____On Having Sex
 
 "Coders do it with a routine."
   Otto Chrons

 "Coders do it with bugs."
   Trixter

 "Trackers do it with rhythm."
   Floss

 "Trackers like to slide up & down."
   Charlatan
 
 _____You Know You've Been Democoding Too Long When...
 
 "...You think 'hey, the phong shading on this toilet seat is really cool'
 and move it up and down a few times just to watch the highlights..."
   Sam
 
 "...You're in a train looking out of the window, and you notice the
 high-quality multi-layer parallax scrolling."
   Sam
 
 "...You spend an hour in the tub trying to figure out displacement."
   Leong
 
 "...You walk along a wall and are impressed that it's not pixelated,
 even at close range."
   Dag-Erling Smrgrav
 
 "...You notice how the faucets in bathrooms are envirovment mapped
 with a nice metal-looking texture..."
   Jyrki Saarinen
 
 "...You move objects around to make sure the clipping and culling
 routines are working."
   Quantum Porcupine
 
 "...You spill or mess up something and the first reaction that come
 to mind is 'undo'."
   Stephan
 
 "...You watch the "Mortal Kombat" movie, and during the part where
 Liu Kang does a flip off a wall, you absent-mindedly say, 'I wonder
 if that was calculated real-time.'"
   Dominion Arcana

 Trixter / Hornet - trixter@ftp.cdrom.com


=--------------------------[10 Ways NAID '95 Will Differ from NAID '96]--[GD]-=

 _____Introduction

 Are you considering going to NAID this year? Not sure if you want to go or
 not?  Heard some things that made you suspicious?

 Many people seem unsure whether or not they want to make the sacrifice of
 time and money to attend. With pressures of school and final exams, some
 potential attendees are unsure if they will make it to NAID 1996.

 Following is a list of ten ways that NAID 1996 will differ from NAID 1995.
 Hopefully, you will see that this is to be a party you won't want to miss.

 _____Reason 01: From Spotlights to Lasers

 The NAID organizers have been discussing the possibility of a laser light
 show this year. Remember those "dance floor" style spotlights they used last
 year? Well, those would be replaced by laser technology.

 This will improve the visual effects greatly. By adding laser lights to the
 setup, it will create an incredible effect for those who want to feel as if
 they're at a real rave. Even better, anyone needing laser surgery can just
 position themselves appropriately between laser beams and save thousands of
 dollars in medical fees.

 _____Reason 02: Parlez-vous francais?

 The language barrier was one difficult aspect for some Americans traveling
 to Montreal. As those who live in Montreal speak french as their primary
 language, verbal communication was a problem.

 With a year and two months between NAID 1995 and NAID 1996, hopefully some
 people have tried to work on the issue of the language barrier. However, I
 suggest a French-English dictionary, as some of your good friends who know
 french are most likely going to only teach you french phrases that
 translate into something like "You look like my mother, you stupid
 pancake!" or "Will you go to bed with me, you revolting jackass?"

 _____Reason 03: Price Difference

 People have been talking about the difference in ticket prices this year. The
 admission fee is CA$20, as compared to last year which cost CA$7.

 The organizers have decided to combat complaints about the sudden price
 increase with some special deals:

 Three-Arm Discount (TAD) : All persons with three arms shall receive 50% off
                            the admission fees.

 Two-Foot Discount (TFD)  : Anyone who stands less than two feet tall will
                            only need to pay CA$2 for admission.

 Green-Hair Discount (GHD): Anyone entering with green hair will be admitted
                            for CA$5. Persons taking advantage of the GHD must
                            pose as plants any time someone's parents walk by.

 _____Reason 04: The wrath of PeriSoft

 Ever since last year, PeriSoft has been plotting his revenge against the
 "evil forces of Hornet" for the comment about him in the Hornet NAID report.
 This year, witness it live as the drama unfolds.

 Supposedly, one of PeriSoft's revenge tactics will be to bring an Alannis
 Morrisette CD and secretly place speakers in the Hornet room through which
 this CD will be played constantly. The results of such an experiment could
 have drastic effects, so watch and see what happens.

 _____Reason 05: Necros

 Dungeon Dwellers Design is a USA-based demo group that was in attendance at
 NAID 1995. They also entered a demo into the competition. They took many
 pictures at NAID and released a party report.

 Unfortunately, DDD made several errors in their NAID report, which confused
 some people as to who won which compo with which entry.

 This year, Necros may fall victim to a large amount of lamers asking him if
 he is going to write another song like his hit, "Can't Take the Bus."

 _____Reason 06: The Snowman Speech

 Before the closing ceremony last year, Snowman presented a very memorable
 speech to the soon-to-be-departing crowd. As many people complimented his
 efforts, he will again be making a speech this year.

 However, this year's speech proves to be more than a monologue, as Snowman
 recently released his cast list:

   Ara (formerly Epeius) ............... Human "beat box"
   The Zapper .......................... Bass Guitar
   Maelcum ............................. "Move it Move it" voice
   Miss Saigon ......................... "Whoo! Yeah!" voice

 _____Reason 07: Drugs and Alcohol

 Drugs and Alcohol are prohibited in the school at which NAID 1996 will be
 held. Because of this, the organizers are making special arrangements to
 inspect the belongings of those suspected to have any illegal possessions.

 They are arranging a "we get half, you get half" deal with anyone who
 wishes to consume said possessions at the party place. Be sure to stock up
 and bring twice your normal supply.

 _____Reason 08: 1-900-NAID-FUN

 The organizers have been so overwhelmed with telephone calls that they have
 set up this 1-900 answering service. Callers will be able to get their
 questions answered and even get a chance to win some great prizes! The
 prize list follows:

   Free NAID tickets will be given out to every 1000th caller

   If you are able to "Name this Hadji S3M" you can win one of these
   fabulous prizes:
     - Year old subs (leftover food from Subway, who served food at NAID
                      1995 and forgot to clean up)
     - Year old tshirts (they were left outside during a rainstorm, and
                         put through a very powerful dryer. All shirts are
                         now exactly 7 sizes smaller than stated on the
                         label)

 Each call costs $1.00 a minute. If you're under 18, be sure to get
 permission from your parent or legal guardian before calling.

 _____Reason 09: The "Deep-Six Demo Compo"

 Is your computer waterproof?  Ever thought of putting it inside a sealed
 plastic bag and submerging it in water?

 Since the pool was not used much last year, the organizers have introduced
 this competition, which states that "Computers will be submerged into the
 pool after starting a popular European demo. The owner of last computer to
 remain running underwater is the winner.

 The organizers are seeking judges for this competition. To be eligible, you
 need to be able to hold your breath for 10 minutes, have a certified
 lifeguard license, and sign a release form stating that the organizers are
 "not responsible for drowning, choking, or excess water intake."

 _____Reason 10: Electricity

 Last year the organizers were very fortunate to not experience any amount
 of interruption in the power supply. There were no power failures and no
 equipment was damaged by a spike or surge.

 This year, you won't want to miss out on your chance to fry the power
 system! Be the lamer responsible for a blackout during the demo
 competition!  Get hundreds of angry partygoers chasing after you!

 To enter in this competition, all you need is an electrical device which,
 when plugged in, will overload the circuit breaker and cause a power
 outage.  Winners will receive a first-class shunning.

 _____Conclusion

 This guide is your road map to fun at NAID 1996! Be sure to attend this
 event because it only happens once a year.

 Enjoy the show, meet new friends, and learn how to swear at your parents in
 a different language!  What more could you ask for?

 GD / Hornet - gd@ftp.cdrom.com


=-----------------------------------------[Funktracker Port to Linux]--[JsNO]-=

 I've began work on porting Funktracker from the DOS32 protected mode
 platform over to X11/Xview, first for Linux, then other Unix's. As this is
 mainly an exercise to learn X-windows programming, I will be taking it
 easy. It may be a while before there is a releasable version.

 NOW would be a good time to tell me anything that you want in there. I've
 had wades of email about requested extras and changes that people wanted in
 1.08b, but couldn't, due to the fact the requests were never considered in
 the initial contingency of FunkTracker. So, if you tell me now in the
 designing stage, it will be far easier for me to put in.

 I'm going to attempt to give it the look and feel of the original
 FunkTracker (in an Xwindows sort of way), so, if you don't like the
 original Funky style interface, tell me now, and i'll alter it on weighted
 opinion.

 See ya.

 JsNO / Super Real Darwin - root@superr.topend.com.au


=------------------------------[Intro to 3D Graphics - Volume 03]--[Kiwidog]-=

 _____Introduction

 Howdy everyone!

 Time for round three... :-)

 This is the last introductory article before we dive into polygon fillers,
 and it's something that's crucial to any effective 3D system.  You may be
 asking yourself, "Hey, I can do projection and rotation now, isn't that all
 I need to start making solid objects?"  Well, not quite.

 Let's say you want to make a cube.  You know how to project the cube's
 vertices, so that's fine.  You can rotate the vertices too, so that's not a
 problem either.  And let's say you know how to do polygon filling too...
 well what happens when you start rotating the cube around?

 A big mess. :)  Sides in the back show up half the time, so the cube
 doesn't look solid at all.  And then you decide you want to add
 lightsourcing... uhh.... wait... lightsourcing?  How do I do that again?

 Yup, something's definitely missing. :-)

 It turns out that backface removal, lightsourcing, and a whole mess of
 other 3D-related issues often stem down to one small, yet very important
 math concept...

 The normal.
 
 _____What the Heck's a "Normal"?

 The normal is just the name of the vector that's perpendicular to a plane.
 It's as simple as that (actually, I should be using the word "orthogonal",
 since that's the real name for perpendicular in 3D, but you get the idea).
 That's all it is.  Every 3D plane in space has a normal; it's just the line
 that sticks straight out of that plane.

 So what's so useful about normals?  Well, if we have a 3D surface (like a
 polygon face), the normal tells us where the polygon is facing... it's the
 line that the polygon is "looking at", and that has a LOT of uses.

 For one, backface removal.  You only want to see a polygon face (like on a
 cube) when the surface is facing toward you.  If it's facing away from you,
 you shouldn't see it (unless you want paper-thin objects).  So the normal
 is very useful here.

 And lightsourcing is entirely about normals.  If you take the angle between
 the normal of a surface and the vector of surface to the lightsource, you
 can find out how much it's facing that lightsource and can use that for
 brightness.  We'll be using this fact a lot with Lambert, Gouraud, and
 Phong shading, as well as Environment Mapping.

 There are also other nice thing normals are used for, like calculating BSP
 trees and such.  The list goes on and on....

 But I'm probably overwhelming you with all this.  Let's take it one step at
 a time, and all the rest of the pieces will face into place later. Don't
 worry if you're confused for the moment... it'll click soon enough. :)

 _____Finding the Normal of a Plane

 You've already dealt with a few normals - the axes.  The Z axis sticks
 straight out of the XY plane, which means (tada!) that the Z axis is the
 normal of the XY plane.  Likewise, the X axis is the normal of the YZ
 plane, and the Y axis is the normal of the ZX plane.

 But what about arbitrary surfaces?  Most of the time, with our 3D objects,
 we won't know where they're facing.  They won't be on the axes most of the
 time, that much is for certain.  So what do we do to find these special
 vectors?

 _____The Dot and Cross Products

 There are two very useful operations in linear algebra called the Dot
 Product, and the Cross Product.  They're not really hard at all; the
 equations are pretty simple.  But they come in very handy, as you'll soon
 see.  Like the Trig identities, these are two of the most important things
 you'll ever use in 3D.

 The Dot Product is just a value (or "scalar", in linear algebra terms).
 It's a function of two vectors, and usually denoted with a "." character.
 If we have two vectors A and B,

   A.B = (Ax * Bx) + (Ay * By) + (Az * Bz)

 That's it.  Just multiply the XYZ parts together of each vector, add them
 up, and the resulting number is your dot product.  What's it for?  We'll
 see soon enough...

 Now the Cross Product is a little more complicated of an equation.  Like
 the Dot Product, it's a function of two vectors.  But unlike the Dot
 Product, the result is not a scalar value.... it's another vector.  If we
 have our A and B vectors, and C is the cross product (denoted A x B),

   C = A x B

   Cx = (Ay * Bz) - (By * Az)
   Cy = (Az * Bx) - (Bz * Ax)
   Cz = (Ax * By) - (Bx * Ay)

 That's how we get each of the XYZ components of the cross product vector.
 Well what's C after we do this?  A very nice thing... it's the vector
 that's ORTHOGONAL to A and B.

 Yup, the Cross Product is our normal! :-)

 Sure enough, if you check these equations against some normals we know,
 like the axes mentioned above, it turns out that

   (1,0,0) x (0,1,0) = (0,0,1)     Z axis is orthogonal to the X and Y axes.
   (0,1,0) x (0,0,1) = (1,0,0)     X axis is orthogonal to the Y and Z axes.
   (0,0,1) x (1,0,0) = (0,1,0)     Take a wild guess. :-)

 Now, we can't necessarily use this directly with our polygons.  I mean,
 with our polys all we have is a set of vertices (each 3 for a triangle, 4
 for a quadrilateral, whatever).  We don't have two vectors.  So we need to
 find two vectors in our poly that we can shove into this cross product
 equation, and find our normal.

 How to do that?  Not too hard, really.  We can form two vectors from any
 three points in a poly.  Say we have a quadrilateral polygon.....

   P2
     .         P1
             .



         .
      P3      . P4

 Okay, all we need to do is get two tail-to-tail vectors from the poly.
 Solution?  Simple, just pick a point, and use the vectors to the two points
 "connected" to it along the edges...

   P2
     .___ A    P1
         ----.
      \
       \ B
        \
         .
      P3      . P4

 Be warned, though.... the cross product function is NOT commutative. That
 is, A x B is NOT the same as B x A.  As a matter of fact, B x A is the
 exact OPPOSITE vector of A x B.... it's the same line, just pointing in the
 other direction! :)

 How to know which one to use as A and which as B?  It depends on what kind
 of objects you're using.  If you're importing from a modeler of sorts, most
 modelers either order the vertices a certain way or have some kind of field
 telling you which way the normal is.  Then you'll know which vector is
 supposed to be first, so your normal is in the right direction.

 Otherwise, if you're making your objects manually, you'll have to be a
 little more innovative.  Many people like to create their faces so the
 vertices go in either a consistent clockwise or counter-clockwise order.
 Then you start at a consistent point in the polygon (like the first
 vertex), and you know which point goes with which vector.

 It's really a matter of taste, but whatever you do, you should be
 consistent. Manually correcting normals that go wrong is a real pain in the
 rear, so getting the system down right the first time will help you a lot
 in the long run.

 (BTW... in the above ASCII picture, the order that A and B are in will
 result in a normal that goes up, towards where the "P1" label is).

 Now to get nice, accurate normals, we don't want the poly's location in
 space to have any effect on it... true "vectors" aren't points, they're
 rays going from the origin to a point.  Well, P1 probably isn't going to be
 at (0,0,0).  So for the cross product we need to calculate the vertices as
 if it were.  This is just done by translating the points, subtracting P1
 from both the P2 (for vector A) and from P4 (for vector B)...

   A = (P2 - P1)
   B = (P4 - P1)

 Bam, now we just shove A and B into the cross product formula, and out
 comes our normal.  Almost.

 (Don't you just LOVE these "almosts" and "not quites"? :-)
 
 _____Size Matters

 Only one more thing we have to do to the normal to get it exactly the way
 we want it.  We need to scale it down (or up), so that the vector has an
 exact length of 1.  Why 1?  Because having normals of length 1 is a really
 nice thing as far as calculation is concerned.  It's mainly for the "angle
 between" equation we need for lightsourcing.  I'll get to all that in a
 little bit, but for now, just trust me.... we want it one unit in length.
 :)

 Doing that isn't really difficult... we just use the distance formula. From
 algebra you probably remember that in 2D, the distance between any two
 points is

   length = sqrt( (x2-x1)^2 + (y2-y1)^2 )

 That gives us the distance, or length, of that line segment.  The same
 thing applies in 3D, by adding the Z component...

   length = sqrt( (x2-x1)^2 + (y2-y1)^2 + (z2-z1)^2 )

 Well a vector has just one point... the other point is at the origin, so if
 we want to find the length of our normal, we just set point 1 to (0,0,0),
 and

   length = sqrt( x^2 + y^2 + z^2 )

 Odds are, when you pump in your normal's values you got from the cross
 product, the length is NOT going to be equal to 1.  It could be 0.2, it
 could be 10.583, it could be three-thousand-something.  Anything.  Well
 since all we care about is direction, not length, we can divide every XYZ
 component in the normal by its length, and the new length will become 1.

 As an example, say our normal was (3,5,2).  The length would be

   length = sqrt( 3^2 + 5^2 + 2^2 ) = (9+25+4) = 38

 So if we divide each component by 38, our final, scaled normal would be

   (3/38, 5/38, 2/38)

 Now as you can see, if all our normals are going to be length 1, then we
 need to use decimal places.... no component is ever going to be above 1 in
 size.  But using floating point is incredibly slow, and pure integers don't
 allow for decimal places.  The solution?  Fixed point.

 _____A Sidetrack on Fixed Point

 Fixed point is an easy way to represent non-integer numbers with only
 integers in the processor.  It's done by taking a certain number of bits in
 a register, and dedicating them to decimal places instead of integer
 values.  Like if we have a 16-bit word, we can do 8.8 fixed point by using
 the upper 8 bits as the "whole" portion of the number, and the lower 8 bits
 as the "fractional" portion.

 Examples of 8.8 fixed point....

   1.0   =  0100h
   1.5   =  0180h
   0.25  =  0040h
   3.75  =  03C0h
   5.125 =  0520h

 ...and so on.  All we're doing is using the high byte as the whole, and the
 low byte as the precision.  How precise?  Well since we have 8 bits in the
 fraction, it means we can go down to 1/256 for a fractional value. The more
 the fractional bits you use, the more accurate your decimal places can
 be... but the fewer number of whole-number bits you have left (so your
 value can't go up as high).

 Sure enough, you're not limited to equal splits.  With 16 bits you can do
 things like 15.1 fixed point (which only goes down to 0.5 for decimal units
 but allows numbers up to 32767), or you can do 1.15, which can only have a
 whole number of 0 or 1, but goes down to 1/32768 of decimal accuracy. You
 choose what works well for your system.

 (Incidentally, since I code 32-bit mostly these days, I use 16.16 fixed
 point for pretty much everything 3D-wise.  It's accurate enough in decimal
 places, yet has wholes up to 64k which is a nice range).

 To sum up, fixed point is just treating integers as fractional numbers by
 working with the numbers a few powers of 2 above what the number actually
 means.  In 8.8, 0100h (256) means 1, 512 means 2, 768 means 3, etc...
 you're just scaling the operations up a bit so you can stick with integer
 operations.

 Adding and subtracting fixed point is just like regular integer add and
 sub. You don't have to do anything special...

   1.5  + 1.5  = 3.0     0180h + 0180h = 0300h
   2.75 - 2.25 = 0.5     02C0h - 0240h = 0080h

 ...and so on.  On the other hand, multiplication and division have to be
 adjusted by the number of places in your precision, since the resulting
 number would be too high for multiply, and too low for divide....

   1.5  * 3.0  = 4.5     0180h * 0300h = 048000h
                         NOPE!  We have to divide by 100h (8 bits precision).
                         0180h * 0300h = 048000h / 100h = 0480h   (correct)

 Likewise, division needs to get multiplied by your precision.  This must be
 done BEFORE you divide, or you'll end up losing all your decimal places.

   7.5  / 2.5  = 3.0     0780h / 0280h = 0003h
                         WRONG! We need to multiply....
                         0780h * 0100h = 078000h / 0280h = 0300h  (correct)

 Note that this means for multiply and divide that you'll need more space
 than just what's in your fixed point registers.  Luckily multiply and
 divide on the Intel processors multiply into and from EDX:EAX, so you've
 got extra space already even if you're using assembly language.  And the
 adjustment mul/divs are all powers of two, so you can use bit shifts
 instead (if you are using 386 regs, make sure you look up the SHLD and SHRD
 instructions... they come in real useful for this...)

 Okay, enough of that sidetrack.  That's the basics of fixed point.  It's an
 excellent alternative to floating point, and it's the only way to get
 really good speed with 3D on an integer unit, since you can't use fast
 normals that aren't 1 unit in length.

 That's all you need to know about finding normals! :-)  Here's the quick
 summary.  To get a normal from any polygon (with any number of vertices)

 1. Choose three vertices from the poly that are connected by two edges. The
    middle vertex is the base of both your vectors, so translate all three
    points so that this base point is at the origin.

 2. The two vectors are the two other points after translation.  Choose your
    first and second vector in the right order so that the normal goes in
    the direction you want it, "in" or "out", so to speak.  If your vertex
    ordering is consistent or you're importing from a modeler, this
    shouldn't be a big problem.

 3. Take the cross product of the two vectors, in the right order.

 4. Scale the cross product down so its length is equal to 1.  This is your
    final normal for the poly (yay!) :)

 _____You Want Me To Do All That REALTIME?!?

 Heck no! :)  Calculating normals for every surface every frame would be
 incredibly slow.  Major MAJOR waste of time.  But you don't have to worry
 about that, because you can precalculate your normals for the original
 object, and guess what?

 If you rotate the normals by the same angles that you rotate the object,
 the normals will still be correct! :-)

 So just generate your normals when you load up your object, or store them
 in the object file itself (if you have your own file format, this can be an
 easier option).  As you rotate your object by rotating all the vertices,
 just treat the normals like regular vertices.  So when rotating a cube, for
 example, you won't be rotating 8 points... you'll be rotating 14 points,
 i.e. the 8 vertices and the 6 normals.

 _____In Our Next Episode

 There are certainly other ways to deal with normals besides straight
 rotation and such, and I'll show you these methods as time goes on. We'll
 also be using these normals (and the thus-far-useless Dot Product) next
 time, when we start our polygon filling escapade! :)  The next article will
 cover how to fill polygons with a flat color, and also how to lightsource
 that color using our normals, so don't throw this article away just yet...
 this info will become very useful very quickly.

 In the meantime, the supplement will have example source that shows how to
 use normals for simple backface removal.  I'll put a lot of comments in
 there so you can see what the normals are doing to make it possible.
 It's quite easy...

 Anyway, take a look at that source (in Pascal and C, once again... BTW some
 people have asked me if I'll be doing more ASM source later on, and the
 answer is yes, I will be)... and play around with some of this stuff on
 your own! :)  I realize there's not much to gain from this article by
 itself, but it'll give you time to get a very critical portion of your 3D
 system going.  Even if it's still wireframe, it's a big step.

 _____BTW

 The supplement files are being renamed from DNxxx_3D.ZIP to DN3D_x.ZIP.
 This is because it seems I'm not going to make it for every single DemoNews
 issue, so it's probably less confusing if I name them by volume number than
 by DemoNews issue number.  As such, this article's supplement will be at

   ftp.cdrom.com/pub/demos/incoming/code/DN3D_3.ZIP

 DN114_3D.ZIP and DN116_3D.ZIP will be renamed to DN3D_1.ZIP and DN3D_2.ZIP
 within the next couple weeks, so don't be surprised if you don't find them
 under their old filenames after a while.  All new supplements will be in

   /pub/demos/incoming/code/

 and the previous ones will be under

   /pub/demos/code/tutorial/

 so look there if you don't find them in incoming.

 Also, give me a couple days after this DemoNews's release to upload the
 supplement file.  I tend to write these articles a little close to the
 wire, so I don't have time to get the supplement up immediately.  If you
 don't find it in /pub/demos/incoming/code, give it a day or two before
 emailing me saying you can't find it.... it's probably just me being lazy.
 :-)

 Until next time...

 Kiwidog / Hornet , Terraformer - kiwidog@vt.edu


=-[Subscribing]-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

 _____How to subscribe to DemoNews

 Mail to : listserver@unseen.aztec.co.za
 Body    : subscribe demuan-list [first_name] [last_name]

 The listserver will send DemoNews to your e-mail's return address.

 _____Back Issues

 Older issues of DemoNews can be located under /demos/hornet/demonews.
 Newly released issues of DemoNews are posted to /demos/incoming/news.


=-[Closing]-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

 For questions and comments, you can contact us at r3cgm@cdrom.com
 Your mail will be forwarded to the appropriate individual.


..........................................................End.of.DemoNews.118.


