Информационный сервер для программистов: Исходники со всего света. Паскальные исходники со всего света
  Powered by Поисковый сервер Яndex: Найдется ВСЁ!
На Главную Pascal Форум Информер Страны мира
   Demo Making    >>    otplasma
   
 
 Outlaw Triad Demo Series, Part 7 - PLASMAs  Vulture/OT 20.06.96

Демо серия группы Outlaw Triad, Выпуск №7. Алгоритм плазмы. Язык - Assembler, легко переводится на Pascal.
This time a VERY wellknown type of effect is discussed and that is plasmas! Plasmas are great for background effects. For example, when displaying some text, you could run a plasma screen in the background. Let's see how plasma screens are made. Enjoy!



5k 
 

- THE OUTLAW TRIAD DEMO-SERIES - ----------------------- PART VII ----------------------------------- Written by : Vulture/OT Code in : Assembler Topic : Plasmas --------------------- 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. This time a VERY wellknown type of effect is discussed and that is plasmas! Plasmas are great for background effects. For example, when displaying some text, you could run a plasma screen in the background. Let's see how plasma screens are made. Enjoy! ------------------------ Theory ------------------------------------ Note: I know plasmas are very old and shouldn't be used too much nowadays but I think plasmas are great for learning purposes. That's the reason why I decided to put a plasma trainer into these series anyway. Let's start by mentioning the diverence between 2 sorts of plasmas. Static plasma and realtime plasma. The first variant simply creates a screen on which pixels fluently flow into other colors. Then the palette is rotated. Realtime plasma uses cosine values to create magnificient curves on the vga thus being much more fun to watch than static plasma, IMHO. But, realtime plasma is more time consuming than static plasma because each pixel on the screen has to be refreshed each frame! To create a plasma screen you should use an unchained tweaked vga mode. Because every pixel on the screen is affected each frame, it is usually best to reprogram the vga to a mode in which you have large pixels, let's say 4x4. This will result in mode 80x50 so we only have to process 80*50= 4000 pixels each frame. Also create a good palette. The colors should run smoothly from one to the other. To create realtime plasma, we need cosine values. Why? Because cosine values represent a nice curve and that's what we want, nice curves. Take a look at the source to see a good cosine chart. Oh, that chart was generated by Jare/VangelisTeam (always give credit where credit is due), but it's pretty easy to generate your own charts. The values in this example range from 0 to 64 but of course you can go and experiment with other values/ranges. The range in this example is pretty clever. Think about it! When you add 4 cosine values in range 0..64, the maximum value you can get is 4*64=256. And that's the exact amount of colors we have to our disposal in plain mode 13h. In this example I only used 128 colors. The cosine values go up to 64 so I had to implement code to handle additions above 128. Anyway, now we have setup our vga and created a good cosine chart. Let's go and code the plasma. We want complex curves on the screen. To create plasma screens, we simply add 4 cosine values and put the resulting value on the vga. We use 2 cosine values for vertical movement and 2 for the horizontal movement. For each frame we use 4 pointers to the cosine chart. For each horizontal pixel, we update our 2 horizontal cosine pointers to point to another cosine value in the chart! For each horizontal line we go down we update our 2 vertical pointers. When updating the pointers, don't save the new values to the pointer variables but into temporary variables (in asm I just used some registers). We update the original pointers when we've done the entire screen (frame). Complex? Observe this: - Set vertical cosine start values (save into temp variables) - Go into vertical loop (50 times in this example) - Set horizontal cosine start values (save into temp variables) - Go into horizontal loop (80 times in this example) - Add 4 temporary cosine values - Put result on vga - Update the temporary horizontal cosine values - End horizontal loop - Update the temporary vertical cosine values - End vertical loop - Update the original cosine start values - Back to start Just take a look at the source to see what I mean. Go and change some of the values and see what happens. Also, try to implement this in hi-resolutions to see what you get. Allthough it's a rather old effect, it still is good enough to put in demos when you use it clever enough. I know this text is a bit cryptic but once you've experimented with the source, all will become clear. Trust me ... I know ... :-) Ok, this is all for now. Happy coding! -Vulture/Outlaw Triad- ---------------------- Distro Sites -------------------------------- Call our distrobution sites! All our releases are available at: BlueNose World HQ +31 (0)345-619401 The Force Distrosite +31 (0)36-5346967 More distros wanted! Bugs'R'Us Distrosite +31 (0)252-686092 (preferably outside MagicWare Italian HQ +39 6-52355532 of The Netherlands) ShockWave South African HQ +27 (011)888-6345 Society HQ United States HQ +1 (518)465-6721 Also check the major FTP sites for Outlaw Triad productions. ------------------------- 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 1997. --------------------------------------------------------------------- Quote: It is dangerous to be sincere unless you are also stupid.