Witam, Mam taki program i problem. Napisałem sobie klasę Cprostokat i zdefiniowałem wszystkie funkcje. Napisałem również klasę Cscena, która tworzy mi obszar na którym będą wyświetlane obiekty itp. Problem w tym, że w ogóle nie mogę tego wywołać, ponieważ co chwilę wyrzuca mi jakiś błąd. Mam też problem z funkcją glutDisplayFunc(display), niby teraz nie wyrzuca już tam problemu, ale nie wiem czy program będzie działał...
#ifndef _naglowek_h
#define _naglowek_h
#include <glut.h>
#include <math.h>
class Cprostokat
{
public:
float x;
float y;
float a;
float b;
float red;
float green;
float blue;
void Rysuj();
void Przesun(float dx, float dy);
void Koloruj(float red, float green, float blue);
Cprostokat();
Cprostokat(float X, float Y, float A, float B);
Cprostokat(const Cprostokat &P);
};
class Cscena
{
public:
Cprostokat* P[10];
void display(void);
static void key(unsigned char key, int x_d, int y_d);
void init();
int main(int argc, char* argv[]);
void wyswietl();
};
#endif
#include "naglowek.h"
Cprostokat prostokat[10];
void Cscena::display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
for(int i=0; i<10; i++)
{
prostokat[i].Rysuj();
}
glFlush();
}
void wyswietl()
{
Cscena scena;
scena.display();
}
int i = 0;
void Cscena::key(unsigned char key, int x_d, int y_d)
{
switch(key)
{
case 'n':
i++;
break;
case 'p':
i--;
if(i<0)
{
i=10;
}
break;
case 32:
prostokat[i].Koloruj(1,1,0);
glutPostRedisplay();
break;
case 'a':
prostokat[i].Przesun(-0.05,0);
glutPostRedisplay();
break;
case 'w':
prostokat[i].Przesun(0,0.05);
glutPostRedisplay();
break;
case 'd':
prostokat[i].Przesun(0.05,0);
glutPostRedisplay();
break;
case 's':
prostokat[i].Przesun(0,-0.05);
glutPostRedisplay();
break;
case 27:
exit(0);
break;
}
}
void Cscena::init()
{
glClearColor (0, 0, 0, 0.0);
glColor3f(1.0, 1.0, 1.0);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
glOrtho(-1, 1, -1, 1, 1, -1);
}
int Cscena::main(int argc, char* argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500,500); //tworzenia okna 500/500
glutInitWindowPosition(0,0); //lewy naroznik ekranu 0na0 zawsze zaczyna od lewego gornego naroznika
glutCreateWindow("Klasy"); //tworzy okno o podanym tytule
//glutDisplayFunc(wyswietl); //zostanie wywolana kiedy wymagane jest przerywsowanie okna
void display();
glutKeyboardFunc(key); //
init(); // funkcja inicjuje cała scene
glutMainLoop(); //funkcja przyjmujaca wszytskie komunikaty systemowe mozemy uzywac klawiatury myszki
return 0;
}
#include "naglowek.h"
Cprostokat::Cprostokat()
{
x=-0.5;
y=-0.5;
a=0.25;
b=0.25;
red = 1;
blue= 1;
green=1;
}
void Cprostokat::Przesun(float dx, float dy)
{
x+=dx;
y+=dy;
}
void Cprostokat::Rysuj()
{
glColor3f(red,green,blue);
glBegin(GL_POLYGON);
glVertex2f(x,y);
glVertex2f(x+a,y);
glVertex2f(x+a,y-b);
glVertex2f(x,y-b);
glEnd();
}
Cprostokat::Cprostokat(const Cprostokat &P)
{
x=P.x;
y=P.y;
a=P.a;
b=P.b;
red=P.red;
blue=P.blue;
green=P.green;
}
Cprostokat::Cprostokat(float X, float Y, float A, float B)
{
x=X;
y=Y;
a=A;
b=B;
red=1;
green=1;
blue=1;
}
void Cprostokat::Koloruj(float red, float green, float blue)
{
red=1;
green=1;
blue=1;
}
#include "naglowek.h"
int main()
{
Cscena scena;
scena.main();
}