I try to make the triangle move smoothly but instead the triangle is gone when I enter move button. WHY? can someone please check and tell me what is the problem? it can move without dt( in my code for elapse time).
#include <windows.h>
#include <GL/gl.h>
#include <GL/glut.h>
#include <time.h>
#include <iostream>
GLfloat d[3] = { 0.0,0.0,0.0};
// Some global variables used to measure the time
float timeAtGameStart;
UINT64 ticksPerSecond;
float GetGameTime()
{
UINT64 ticks;
float time;
// This is the number of clock ticks since start
if( !QueryPerformanceCounter((LARGE_INTEGER *)&ticks) )
ticks = (UINT64)timeGetTime();
// Divide by frequency to get the time in seconds
time = (float)(__int64)ticks/(float)(__int64)ticksPerSecond;
// Subtract the time at game start to get
// the time since the game started
time -= timeAtGameStart;
return time;
}
// Called once at the start of the game
void InitGameTime()
{
// We need to know how often the clock is updated
if( !QueryPerformanceFrequency((LARGE_INTEGER *)&ticksPerSecond) )
ticksPerSecond = 1000;
// If timeAtGameStart is 0 then we get the time since
// the start of the computer when we call GetGameTime()
timeAtGameStart = 0;
timeAtGameStart = GetGameTime();
}
// Called every time you need the current game time
// We'll need some starting values
float lastGameTime = 0;
float position = 0;
float velocity = 1;
float dt;
// Here's where we compute how much
// time has passed since last update
float GetDeltaTime()
{
dt = GetGameTime() - lastGameTime;
// Increment with dt instead of calling
// GetGameTime() to avoid loosing time
lastGameTime += dt;
return dt;
}
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glPushMatrix();
glTranslatef(d[0], d[1], 0.);
glScalef(0.5,0.5,0.5);
dt = GetDeltaTime(); // Each set of 3 vertices form a triangle
glTranslatef(d[0],d[1],0);
glBegin(GL_TRIANGLES);
glColor3f(0.0f, 1.0f, 0.0f); // Green
glVertex2f(0.2f, -0.3f);
glVertex2f(0.8f, -0.3f);
glVertex2f(0.5f, 0.2f);
glEnd();
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, d);
glDrawArrays(GL_TRIANGLES, 0, 3);
glPopMatrix();
glutSwapBuffers();
}
void special(int key, int x, int y)
{
if( key == GLUT_KEY_UP )
d[1] += 0.1f*dt;
if( key == GLUT_KEY_DOWN )
d[1] -= 0.1f*dt;
if( key == GLUT_KEY_LEFT )
d[0] -= 0.1f*dt;
if( key == GLUT_KEY_RIGHT )
d[0] += 0.1f*dt;
glutSwapBuffers();
glutPostRedisplay();
}
// GLUT runs as a Console Application
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutCreateWindow("simple triangle test");
glutDisplayFunc(display);
// Register callback handler for window re-paint
glutSpecialFunc(special);
glutMainLoop();
// Enter infinitely event-processing loop
return 0;
}