void initial()
{
	initializeSpheres();
	
	glClearColor (0.9, 0.9, 0.9, 0.0);
	glShadeModel (GL_SMOOTH); // may be pointless in this program
}
Exemple #2
0
int init(struct winampVisModule *this_mod)
{
	//config_read(this_mod);

	/* ----------------------------------------------------Register our window class-----------------------------------*/
	/* ----------------------------------------------------------------------------------------------------------------*/

	GLuint PixelFormat;																		// Speichert das Pixelformat
	WNDCLASS wc;																			// wc wird eine Instanz der Fensterklasse
	DWORD dwExStyle;																		// weitere Informationen
	DWORD dwStyle;																			// Fensterinformationen
	RECT WindowRect;																		// Speicher für aktuelle Auflösung
	WindowRect.left=(long)0;																// Die linke Seite des Rechtecks wirtd auf 0 gesetzt
	WindowRect.right=(long)width;															// Hier wird die gewünschte Breite des Fensters gespeichert
	WindowRect.top=(long)0; 																// Die obere Seite wird auch auf 0 gesetzt
	WindowRect.bottom=(long)height;															// Und hier wird die Höhe abgelegt 
	hInstance = this_mod->hDllInstance; 
	memset(&wc,0,sizeof(wc));
	wc.lpfnWndProc = (WNDPROC) WndProc;
	wc.hInstance = this_mod->hDllInstance;													// hInstance of DLL
	wc.lpszClassName = szAppName;															// our window class name
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);												// Lädt einen Cursor
	wc.lpszMenuName = NULL;																	// Auch ein Menü wird nicht benötigt.
	//if (MessageBox(NULL,"Would You Like To Run In Fullscreen Mode?", 
	//	"Start FullScreen?",MB_YESNO|MB_ICONQUESTION)==IDNO)
	//{
		fullscreen=FALSE;																	// Windowed Mode
	//}

	if (!RegisterClass(&wc)) 
	{
		MessageBox(	NULL,"Can't register window class.","ERROR",
					MB_OK|MB_ICONEXCLAMATION);
		return 1;
	}
	if (fullscreen)																			// Soll im Vollbildmodus gestartet werden
	{
		DEVMODE dmScreenSettings;															// Instanz von DEVMODE wird erzeugt
		memset(&dmScreenSettings,0,sizeof(dmScreenSettings));								// Diese wird geleert
		dmScreenSettings.dmSize=sizeof(dmScreenSettings);									// dmsize soll genauso groß wie die dmScreenSettings sein
		dmScreenSettings.dmPelsWidth = width; 
		dmScreenSettings.dmPelsHeight = height;
		dmScreenSettings.dmBitsPerPel = 32; 
		dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;											
		if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)
								!=DISP_CHANGE_SUCCESSFUL)    
		{
			if (MessageBox(NULL,"Fullscreen device not available , Do you want to start in a windowed mode?",
				"Problem",MB_YESNO|MB_ICONEXCLAMATION)==IDYES)
			{
				fullscreen=FALSE; 
			}

			else
			{
				return FALSE;
			}
		}
	}
	if (fullscreen) 
	{
		dwExStyle=WS_EX_APPWINDOW;															// Fenstereigenschaften
		dwStyle=WS_POPUP; 
		ShowCursor(FALSE);																	// Der Mauszeiger wird nicht angezeigt
	}
	else
	{
		dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;										// Das Fenster soll zusätzlich einen 3D Rahmen bekommen
		dwStyle=WS_OVERLAPPEDWINDOW;														// Ein typisches Windowsfenster mit Minimieren, Maximieren, etc
	}
	AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle);								// Fenster wird angepasst
	hMainWnd = CreateWindowEx(dwExStyle,													// these exstyles put a nice small frame, but also a button in the taskbar
		szAppName,																			// our window class name
		this_mod->description,																// use description for a window title
		WS_CLIPSIBLINGS |																	// Wird von OpenGL benötigt
		WS_CLIPCHILDREN |																	// Wird auch von OpenGL benötigt
		dwStyle,
		0,0,																				// screen position (read from config)
		WindowRect.right-WindowRect.left,													// Hier werden die ermittelten Werte für die Breite eingesetzt
		WindowRect.bottom-WindowRect.top,													// und hier für die Länge
		this_mod->hwndParent,																// parent window (winamp main window)
		NULL,																				// no menu
		this_mod->hDllInstance,																// hInstance of DLL
		0);																					// no window creation data
	if (!hMainWnd) 
	{
		MessageBox(this_mod->hwndParent,"Error creating window","ERROR",MB_OK);
		return 1;
	}
	static PIXELFORMATDESCRIPTOR pfd=														// pdf ist jetzt ein PIXELFORMATDESCRIPTOR
	{
		sizeof(PIXELFORMATDESCRIPTOR), 
		1,																					// Versionsnummer
		PFD_DRAW_TO_WINDOW |																// Das Format muss in Fenster sichtbar sein können
		PFD_SUPPORT_OPENGL |																// OpenGL muss unterstützt werden
		PFD_DOUBLEBUFFER,																	// Double Buffering muss unterstützt werden
		PFD_TYPE_RGBA,																		// Das RGBA (Rot,Grün,Blau,Alpha(Transparenz)) muss unterstützt werden
		32,																					// Die Farbtiefe, die schon übergeben wurde, wird hier benötigt
		0, 0, 0, 0, 0, 0,																	// wird nicht benötigt
		0,																					// kein Alpha Buffer
		0,																					// Shift Bit ignoriert
		0,																					// kein Accumulation Buffer
		0, 0, 0, 0,																			// nicht benötigt
		32,																					// 16Bit Z-Buffer (Depth Buffer)
		0,																					// kein Stencil Buffer
		0,																					// kein Auxiliary Buffer
		PFD_MAIN_PLANE,																		// Die Hauptebene auf die später gezeichnet wird
		0,																					// unwichtig
		0, 0, 0																				// keine Ebenenmasken benötigt
	};
	if (!(hDC=GetDC(hMainWnd)))																// Versuch, den DC zu bekommen
	{
		KillGLWindow(this_mod);																// Alles rückgängig machen

		MessageBox(	NULL,"NO dc available.","ERROR",
					MB_OK|MB_ICONEXCLAMATION);
		return FALSE;																		// FALSE zurückgeben, beenden
	}
	if (!(PixelFormat=ChoosePixelFormat(hDC,&pfd)))											// Kann Windows ein passendes finden? 
	{ 
		KillGLWindow(this_mod);																// Alles zurücksetzen
		MessageBox(	NULL,"Can't find pixelformat.","ERROR",
					MB_OK|MB_ICONEXCLAMATION);
		return FALSE;																		// FALSE zurück und Ende.
	}
	if(!SetPixelFormat(hDC,PixelFormat,&pfd))
    {
		KillGLWindow(this_mod);																// Leider nicht, Fehlerpopup und raus
		MessageBox(	NULL,"Can't use pixelformat.",
					"ERROR",MB_OK|MB_ICONEXCLAMATION);
		return FALSE;																		// FALSE zurück und raus
	}
	if (!(hRC=wglCreateContext(hDC)))														// Versuch den RC zu bekommen
    {
		KillGLWindow(this_mod);																// Alles rückgängig machen
		MessageBox(	NULL,"Can't get rendering context.","ERROR",
					MB_OK|MB_ICONEXCLAMATION);
		return FALSE;
	}
	if(!wglMakeCurrent(hDC,hRC))															// Versuch den RC zu aktivieren
	{
		KillGLWindow(this_mod);																// hat nicht geklappt, also alles zurück
		MessageBox(	NULL,"Can't activate rendering context.","ERROR",
					MB_OK|MB_ICONEXCLAMATION);
		return FALSE;
	}
	ShowWindow(hMainWnd,SW_SHOW);															// Fenster anzeigen
	SetForegroundWindow(hMainWnd);															// Priorität des Programms wird erhöht
	SetFocus(hMainWnd);																		// Tastatureingaben werden jetzt an das Programm geleitet
	ReSizeGLScene(width, height);															// Die Perspektive wird aktiviert 
	
	SetTimer(hMainWnd , FPS_TIMER, FPS_INTERVAL, NULL);

	myinit();
	initializeSpheres();

	return 0;								
}
Exemple #3
0
void myinit(void) 
{
	/*Initialize and compute the vectors for the spiral*/
	spir[0][0]=0.0;
	spir[0][1]=-1.0;
	spir[1][0]=-sin(30.0*M_PI/180);
	spir[1][1]=-cos(30.0*M_PI/180);
	spir[2][0]=-cos(30.0*M_PI/180);
	spir[2][1]=-sin(30.0*M_PI/180);
	spir[3][0]=-1.0;
	spir[3][1]=0.0;
	spir[4][0]=-cos(30.0*M_PI/180);
	spir[4][1]=sin(30.0*M_PI/180);
	spir[5][0]=-sin(30.0*M_PI/180);
	spir[5][1]=cos(30.0*M_PI/180);
	spir[6][0]=0.0;
	spir[6][1]=1.0;
	spir[7][0]=sin(30.0*M_PI/180);
	spir[7][1]=cos(30.0*M_PI/180);
	spir[8][0]=cos(30.0*M_PI/180);
	spir[8][1]=sin(30.0*M_PI/180);
	spir[9][0]=1.0;
	spir[9][1]=0;
	spir[10][0]=cos(30.0*M_PI/180);
	spir[10][1]=-sin(30.0*M_PI/180);
	spir[11][0]=sin(30.0*M_PI/180);
	spir[11][1]=-cos(30.0*M_PI/180);
	
	for (int i = 0; i <= 103; i++)
	{
		cosTable[i] = cos((double)(M_PI*2*i/100.0));
		sinTable[i] = sin((double)(M_PI*2*i/100.0));
	}
/*create all needed spheres and initialize them with default values*/
	initializeSpheres();

/*Initialize the random number creator*/
	time_t t;
    time(&t);
    srand((unsigned int)t);  //initialize with date and time

/* attributes */

    glClearColor(0.0, 0.0, 0.0, 1.0); /* black background */

/* Lighting */
	glLoadIdentity();

	GLfloat light_ambient[] = {0.0,0.0,0.0,1.0};
	GLfloat light_diffuse[] = {1.0,1.0,1.0,1.0};
	GLfloat light_specular[] = {1.0,1.0,1.0,1.0};
	GLfloat lmodel_ambient[] = {0.5,0.5,0.5,1.0};
	GLfloat mat_amb_diff[] = { 0.5, 0.5, 0.5, 1.0 };
	GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
	GLfloat mat_shininess[] = { 40.0 };

	GLfloat light_position0[] = {1.0, 1.0, 0.0, 0.0 }; 

	glShadeModel (GL_SMOOTH);

	glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
	glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
	glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
	glLightfv(GL_LIGHT0, GL_POSITION, light_position0);
	
	glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);

	glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_amb_diff);
	glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
	glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);

	//Enable Lighting
	glEnable(GL_COLOR_MATERIAL);
	glEnable(GL_LIGHTING);
	glEnable(GL_LIGHT0);
}
Exemple #4
0
void keyboard ()
{
	if(keys['R']) { //reset to default settings
		CONES = DEFAULTCONES;
		SURFACE = DEFAULTSURFACE;
		NUMSPHERES = DEFAULTSPHERES;
		SPEEDFACTOR = DEFAULTSPEEDFACTOR;
		NUMSEC = DEFAULTSEC;
		COLORCHANGE = DEFAULTCOLORCHANGE;
		COLOR = DEFAULTCOLOR;
		WAVEFORMCIRCLES = DEFAULTWAVEFORMCIRCLES;
		SPHERES = SPHERESONOFF;
		SQUASH = DEFAULTSQUASH;

		for(int i=0; i<MAXSPHERES; i++) {
			changeColor(&sphere[i], COLOR);
		}

		initializeSpheres();
	}
	if(keys['X']&&NUMSPHERES<MAXSPHERES) { //increase number of spheres
		NUMSPHERES++;
		initializeSpheres();
	}
	if((keys['Z']||keys['Y'])&&NUMSPHERES>MINSPHERES) { //decrease number of spheres
		NUMSPHERES--;
		changeColor(&sphere[NUMSPHERES], COLOR); //RESET COLOR
		initializeSpheres();
	}
	if(keys['I']&&NUMSEC<MAXSEC) { //increase Airtime 
		NUMSEC+=0.1;
	}
	if(keys['U']&&NUMSEC>MINSEC) { //decrease Airtime 
		NUMSEC-=0.1;
	}
	if(keys['K']&&SPEEDFACTOR<MAXSPEEDFACTOR) { //increase Speedfactor
		SPEEDFACTOR+=0.1;
	}
	if(keys['J']&&SPEEDFACTOR>MINSPEEDFACTOR) { //decrease Speedfactor
		SPEEDFACTOR-=0.1;
	}
	if(keys['S']) { //switch surface on/off
		SURFACE=(SURFACE==true)?false:true;
	}
	if(keys['C']) { //switch cones on/off
		CONES=(CONES==true)?false:true;
	}
	if(keys['B']) { //switch bouncing balls on/off
		BOUNCE=(BOUNCE==true)?false:true;
	}
	if(keys['O']) { //switch output of data on/off
		OUTPUT=(OUTPUT==true)?false:true;
	}
	
	if(keys['H']) { //switch help on/off
		if(HELP==false) {
			surfacetemp=SURFACE;
			SURFACE=false;
			circlestemp=WAVEFORMCIRCLES;
			WAVEFORMCIRCLES=false;
		}
		if(HELP==true) {
			SURFACE=(SURFACE==true)?true:surfacetemp;
			WAVEFORMCIRCLES=(WAVEFORMCIRCLES==true)?true:circlestemp;
		}
		HELP=(HELP==true)?false:true;
	}
	if(keys['L']) { //switch colorchange on/off
		COLORCHANGE=(COLORCHANGE==true)?false:true;
		for(int i=0; i<NUMSPHERES; i++) {
			changeColor(&sphere[i], COLOR);
		}
	}
	if(keys['M']&&COLOR<MAXCOLOR) { //switch through colors
		COLOR++;
		for(int i=0; i<NUMSPHERES; i++) {
			changeColor(&sphere[i], COLOR);
		}
	}
	if(keys['N']&&COLOR>MINCOLOR) { //switch through colors
		COLOR--;
		for(int i=0; i<NUMSPHERES; i++) {
			changeColor(&sphere[i], COLOR);
		}
	}
	if(keys['W']) { //switch waveformcircles on/off
		WAVEFORMCIRCLES = (WAVEFORMCIRCLES == true)?false:true;
	}
	if(keys['A']) { //switch balls on/off
		SPHERES = (SPHERES == true)?false:true;
	}
	if(keys['T']) { //switch balls on/off
		SQUASH = (SQUASH == true)?false:true;
	}
}