Witajcie nie mam pojęcia jak poruszyć w ogóle, coś nie używając inkrementacji licznika. Tzn. całe zadanie, które miałem wykonać opierałem na tym, że zwiększał się licznik do jakiegoś momentu, potem zerował i przez to poruszała się moja figura.
Jeden z użytkowników tego forum, napisał mi taki pseudokod, do napisania, ale nie mam pojęcia jak napisać i w którym miejscu, żeby klatki się renderowały, bez używania licznika.
To fragment tego pseudokodu:
kat_oscylacji += czas_klatki * szybkosc_oscylacji;
x_trojkata = cos(kat_oscylacji w radianach) * promien_oscylacji;
y_trojkata = sin(kat_oscylacji w radianach) * promien_oscylacji;
glTranslated(x_trojkata, y_trojkata, 0.0);
A to mój szkielet podstawowy programu:
#include "glut.h"
#include "math.h"
void display(void)
{
/* clear window */
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glTranslatef(x, y, 0);
//glRotatef(kat,0,0,1); rotacja w okolo osi z
/* draw unit square polygon */
glBegin(GL_TRIANGLES);
glVertex2f(-1, -0.5);
glVertex2f(-0.5, 0.4);
glVertex2f(0, -0.5);
glEnd();
/* flush GL buffers */
glPopMatrix();
glFlush();
}
static void Key(unsigned char key, int x_d, int y_d)
{
//blablabla
}
void init()
{
/* set clear color to black */
glClearColor(0.0, 0.0, 0.0, 0.0);
/* set up standard orthogonal view with clipping */
/* box as cube of side 2 centered at origin */
/* This is default view and these statement could be removed */
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutInitWindowPosition(0, 0);
glutCreateWindow("simple");
glutDisplayFunc(display);
glutKeyboardFunc(Key);
init();
glutMainLoop();
return 0;
}
Gdzie miałbym to dopisać i to mają być normalne zmienne, tzn. czas trwania klatki, szybkość oscylacji i zaś mam je jakoś inkrementować, czy jak? Bo nie mam pojęcia. Jakiejś dodatkowej funkcji do określania czasu trwania klatki mam użyć?