Drawing plasma

This is a discussion on Drawing plasma within the C++ Programming forums, part of the General Programming Boards category; Hi, I was wondering if anyone had a simple algorithm for drawing plasma. I am trying to write an OpenGL ...

  1. #1
    Registered User
    Join Date
    Apr 2005
    Posts
    13

    Drawing plasma

    Hi,

    I was wondering if anyone had a simple algorithm for drawing plasma. I am trying to write an OpenGL program to simulate that plasma before I can implement it in hardware. The problem is that my plasmas have very regular shapes. Also, since they will have to change depending on the audio that is input (like a winamp visualization) I need to be able to affect the plasma by playing with some of the variables. But they need to have smooth changes.

    The current algorithm I have right now is as follows:
    I have a 512x512 matrix (representing my screen raster) that holds values of intensity from 0 to 511 that were obtained by adding 2 cos and 2 sin. Now when I draw to screen, I go through the matrix and each intensity value refers to a specific color stored in an array. The smoothest results are obtained by storing a gradient in that array. However, it's too regular. I get circles and squares, etc. I'm looking for the more diffuse plasma look. As well as one with variables that affect how the plama behaves but without too drastic a change. I'll post my code just to give you a general idea. It's not the entire thing.

    Code:
    void initColorArray()
    {
    	int i;
    	float tempR, tempG, tempB;
    	long pos1;
    	
    	tempR = 1.0f;
    	tempG = 0.0f;
    	tempB = 0.0f;
    
    	colorArray = (Color*)malloc(sizeof(Color)*512);
    
    	// Array loaded with a gradient
    	for(i = 0; i < 512; i++)
    	{
    		colorArray[i] = createColor(tempR - i*1.0f/512.0f, tempG, tempB + i*1.0f/512.0f);
    	}
    	
    	// A table holding a few cos and sin values so that I only need to compute them once
    	for (pos1 = 0;pos1 < 360;pos1++)
    	{
    		tcos[pos1] = abs(cos(pos1*PI/180) * 128);
    		tsin[pos1] = abs(sin(pos1*PI/180) * 128);
    	}
    }
    
    void Move_Plasma(long pos1, long pos2, long pos3, long pos4, int pattern)
    {
    	// pos1 through pos4 affect the general shape direction of movement
    	long i,j,color,p1,p2,p3,p4;
    	p1 = pos1;
    	p2 = pos2;
    	for (i = 0;i < 512;i++)
    	{
    		p3 = pos3;
    		p4 = pos4;
    		for (j = 0;j < 512;j++)
    		{
    			color = tcos[p1 % 360] + tcos[p2 % 360] + tsin[p3 % 360] + tsin[p4 % 360];
    
    			// Pattern here affects what colors in the gradient are referenced
    			if(pattern == 0)
    			{
    				// do nothing
    			}
    			else if(pattern == 1)
    			{
    				color = (color + 10) % 512;
    			}
    			else if(pattern == 2)
    			{
    				color = (color + 20) % 512;
    			}
    			else if(pattern == 3)
    			{
    				color = (color + 30) % 512;
    			}
    
    			Color tempC = colorArray[color];
    			glColor3f(tempC.R, tempC.G, tempC.B);
    			glVertex3f((float)i*0.0097f, (float)(-1*j*0.0097f), 0);
    			
    			// p1 through p4 affect the movement and the general shape of the pattern
    			// however, changing them changes the pattern instantly. 
    			// There is no smooth transition
    			// these 2 affect the number of patterns along the height			
    			p3 += 1; // + sideways transmutation for this one
    			p4 += 1; // + vertical transmutation for this one
    		}
    		// these 2 affect the number of patterns along the width
    		p1 += 1; // + vertical transmutation
    		p2 += 1; // + sideways transmutation
    	}
    }
    Thanks in advance

  2. #2
    Skunkmeister Stoned_Coder's Avatar
    Join Date
    Aug 2001
    Posts
    2,572
    if you want more irregularities try using fractals. Theres plenty of info on the web regarding fractals.
    Free the weed!! Class B to class C is not good enough!!
    And the FAQ is here :- http://faq.cprogramming.com/cgi-bin/smartfaq.cgi

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Slow drawing code
    By tjpanda in forum Windows Programming
    Replies: 5
    Last Post: 05-09-2008, 06:09 PM
  2. Line Drawing Algorithm
    By Axpen in forum Game Programming
    Replies: 15
    Last Post: 08-01-2005, 07:30 PM
  3. drawing minimaps and radar screens.
    By Eber Kain in forum Game Programming
    Replies: 4
    Last Post: 03-08-2002, 11:44 AM

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21