kommt_noch
Grünschnabel
hi, ich versuche einen einfachen bildschirmschoner zu bastel,
1. problem
der kasten soll auf dem bildschirm erseinen (transparent)
und dann sichtbar werden, macht er leider nur nicht... ich finde den fehler nicht...
2. problem
der kasten wird immer schneller,
sollte aber eine konstante geschwindigkeit haben
bin für jede hilfe dankbar =)
gruss k_n
1. problem
der kasten soll auf dem bildschirm erseinen (transparent)
und dann sichtbar werden, macht er leider nur nicht... ich finde den fehler nicht...
2. problem
der kasten wird immer schneller,
sollte aber eine konstante geschwindigkeit haben
bin für jede hilfe dankbar =)
gruss k_n
Code:
#include <iostream>
#include <stdlib.h>
#include <math.h>
//Benoetigt fuer OpenGL
#include <GL/glut.h> // OpenGL
#include <GL/glf.h> // GLF
using namespace std;
//Variable für Transparenz
GLfloat t = 0.0;
// koordinaten für die Spiralbewegung
GLfloat positionX = 0.0;
GLfloat positionY = 0.0;
GLfloat winkel = 0.0;
void aktion (int i)
{
glPushMatrix();
while(t<1){
t=t+0.1; // transparenzwert soll geändert werden
glutPostRedisplay();
glutTimerFunc(25 ,aktion,1);
}
//objekt wird spiralförmig aus dem bildschirm bewegt
if(winkel >= 8 ){
winkel = 0.0; // objekt wieder in mitte
t = 0.0; // objekt wieder transparent
}
positionX = 1.5 * winkel*cos(winkel);
positionY = 1.5 * winkel*sin(winkel);
winkel = winkel + 0.025/(1+0.25*winkel); // erzeugt die Bewegung
glPopMatrix();
glutPostRedisplay();
glutTimerFunc(25 ,aktion,1);
}
void kasten(void){
//fläche des kasten
glColor4f(0.0,0.0,0.8,t);
glBegin (GL_POLYGON);
glVertex2f (-1.0, -1.0);
glVertex2f (-1.0, 1.0);
glVertex2f ( 1.0, 1.0);
glVertex2f ( 1.0, -1.0);
glEnd();
// umrandung des kasten
glColor4f(1.0,0.0,0.0,t);
glBegin (GL_LINE_LOOP);
glVertex2f (-1.0, -1.0);
glVertex2f (-1.0, 1.0);
glVertex2f ( 1.0, 1.0);
glVertex2f ( 1.0, -1.0);
glEnd();
glLineWidth(1.);
}
// Graphik wird erstellt
void display(void)
{
glClearColor(1.0 , 1.0 , 1.0 , 1.0); // macht hintergrund farbig
glClear (GL_COLOR_BUFFER_BIT);
glPolygonMode(GL_FRONT, GL_LINE);
glPushMatrix();
glScalef( 1.0 , 1.0 , 1 );
glTranslatef(positionX, positionY , 1.0);
kasten(); // funktion für den kasten ...
glPopMatrix();
glutSwapBuffers(); // Bildspeicher wird gewechselt
}
// Aenderungen des Fensters
void reshape (int w, int h)
{
float faktor1 = (float) h / (float) w;
float faktor2 = (float) w / (float) h;
glViewport (0, 0, w, h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
// Weltkoordinaten
if (w <= h)
gluOrtho2D (-8.0, 8.0, -8.0 * faktor1, 8.0 * faktor1);
else
gluOrtho2D (-8.0 * faktor2, 8.0 * faktor2, -8.0, 8.0);
glMatrixMode(GL_MODELVIEW);
}
// Tastaturabfragen
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
//glutmainloop() beenden
case 27: // Escape-Taste
exit(0);
break;
}
}
int main(int argc, char** argv)
{
// Initialisierungen (GLUT)
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_ALPHA | GLUT_RGBA );
glutInitWindowSize (1000, 1000);
glutInitWindowPosition (200, 200);
glutCreateWindow (argv[0]);
glutFullScreen(); // FULLSCREEN
// Initialisierungen (GLF)
glfInit();
glfLoadFont("/opt/glf/fonts/arial1.glf");
// Callback Funktionen
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc (keyboard);
glutTimerFunc(2000,aktion,1); //
//Nun beginnt es;
glutMainLoop();
return 0;
}
Zuletzt bearbeitet: