我一直在试用一些简单的图纸和动画与freeglut(在虚拟机上的Linux上).直到现在,所有建造和工作的东西都被罚款.我最近的尝试是用一个方块移动glTimerFunc.虽然它没有任何错误gcc stack.c -lGL -lglut -o stack,但动画本身不起作用.我看过每一个我能找到的过量动画的例子,但是我的代码没有看到任何问题.任何人都可以向我解释我的错误是什么吗?
(编辑:见下面的工作代码)
#include <stdio.h>
#include <stdlib.h>
#include <GL/freeglut.h>
int dx = 0;
#define TIMERSECS 100
void animate(int value) {
glutTimerFunc(TIMERSECS, animate, 1);
if (dx > 0.5) {
dx = -0.5;
}
else {
dx += 0.1;
}
glutPostRedisplay();
}
void display(void) {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0, 0.0, 0.5);
glBegin(GL_POLYGON);
glVertex2d(-0.5+dx, 0.5);
glVertex2d(-0.5+dx, -0.5);
glVertex2d(0.5+dx, -0.5);
glVertex2d(0.5+dx, 0.5);
glEnd();
glutSwapBuffers();
}
void initialize(void) {
glClearColor(1.0, 1.0, 1.0, 1.0);
glShadeModel(GL_SMOOTH);
}
void main(int argc, char *argv[]) {
glutInit(&argc, argv);
glutInitWindowPosition(100, 100);
glutInitWindowSize(500, 500);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutCreateWindow(argv[0]);
initialize();
glutDisplayFunc(display);
glutTimerFunc(TIMERSECS, animate, 0);
glutPostRedisplay();
glutMainLoop();
}
Run Code Online (Sandbox Code Playgroud)
编辑
@datenwolf:我这次看了你更仔细回答的另一个问题,从那里拿了一些代码,效果很好!
这是新版本:
#include <stdio.h>
#include <stdlib.h>
#include <GL/freeglut.h>
int factor=100; // factor the animation is slowed down by
double dx = 0;
void animate(double speed);
static double ftime(void) {
struct timeval t;
gettimeofday(&t, NULL);
return 1.0*t.tv_sec + 1e-6*t.tv_usec;
}
static double last_T;
static void idle(void) {
const double now_T = ftime();
const double delta_T = now_T - last_T;
last_T = now_T;
const double speed = delta_T * 60;
animate(speed);
glutPostRedisplay();
}
void animate(double speed) {
if (dx > 1.5) {
dx = -1.5;
}
else {
dx += speed/factor;
}
glutPostRedisplay();
}
void display(void) {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0, 0.0, 0.5);
glBegin(GL_POLYGON);
glVertex2d(-0.5+dx, 0.5);
glVertex2d(-0.5+dx, -0.5);
glVertex2d(0.5+dx, -0.5);
glVertex2d(0.5+dx, 0.5);
glEnd();
glutSwapBuffers();
}
void initialize(void) {
glClearColor(1.0, 1.0, 1.0, 1.0);
glShadeModel(GL_SMOOTH);
}
void main(int argc, char *argv[]) {
glutInit(&argc, argv);
glutInitWindowPosition(100, 100);
glutInitWindowSize(500, 500);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutCreateWindow(argv[0]);
initialize();
glutDisplayFunc(display);
glutIdleFunc(idle);
glutPostRedisplay();
glutMainLoop();
}
Run Code Online (Sandbox Code Playgroud)
DankeschönfürdeineHilfe!
| 归档时间: |
|
| 查看次数: |
5962 次 |
| 最近记录: |