【发布时间】:2016-04-05 19:27:07
【问题描述】:
我正在使用 OpenGL 3 创建一个小型动画电影,并在 Visual Studio Community 2015 中实现它。我正在尝试制作一个恐龙的动画,至少在一开始就向右移动,但我无法以某种方式使其动画化。
这是我的主要内容:
#include "glut.h"
#include "globaldeclare.h"
#include "dino.h"
#include "scene1.h"
#include "scene1_animation.h"
#include <math.h>
void init(void)
{
glClearColor(0.0, 204.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, 500, 0, 500);
glMatrixMode(GL_MODELVIEW);
}
void myIdle() {
frame++;
scene1_dino_idle();
glutPostRedisplay();
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
//Animation happens here
if (scene_counter == 1) {
scene1();
scene1_animation();
}
glutSwapBuffers();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(1300, 800);
glutInitWindowPosition(100, 100);
glutCreateWindow("Walking with dinosaur");
glutDisplayFunc(display);
glutIdleFunc(myIdle);
init();
glutMainLoop();
return 0;
}
这是场景 1 动画发生的地方(但它没有发生。):)
void scene1_dino_idle() {
//idle
if (dino_slidey > 0 && dino_count == 1) dino_movey = 1;
if (dino_movey == 1 && dino_count == 1) dino_slidey -= 2;//1
if (dino_slidey < -30 && dino_count == 1) dino_movey = 0;
if (dino_movey == 0 && dino_count == 1) dino_slidey += 2;//1
if (dino_slidex > 1000 && dino_count == 1) { dino_movex = 1; dino_count = 2; dinoleg_count = 2; }
if (dino_movex == 1 && dino_count == 1) dino_slidex -= 6;//4
if (dino_slidex < -1600 && dino_count == 1) dino_movex = 0;
if (dino_movex == 0 && dino_count == 1) dino_slidex += 6;//4
}
void scene1_dino_animation() {
//moving to the right
glPushMatrix();
if (dino_count == 1) {
glTranslatef(dino_slidex, dino_slidey, 0);
glTranslatef(0, 100, 0);
glScalef(0.6, 0.6, 1);
}
glScalef(dinoR_lost, dinoR_lost, 0);
dino();
glPopMatrix();
}
void scene1_animation() {
scene1_dino_animation();
}
我的全局变量 //帧计数器 int 帧,scene_counter = 1;
//dino animation
float dino_movex, dino_movey, dino_count, dino_slidex, dino_slidey, dinoR_lost, dinoL_lost;
//dino leg
float dinoleg_angle = 0, dinoleg_move_x, dinoleg_move_y, dinoleg_count = 0;
我已经完成了场景的绘制,但我无法制作动画。在我看来,我在动画中做得很好,也许我的空闲功能中的某个地方不允许我让它工作。我尝试了所有方法,但无法使其正常工作,而且我真的不知道问题出在哪里。请让我知道主要问题是什么。提前致谢。
【问题讨论】:
-
您提到您正在使用 OpenGL 3...但是看起来您正在使用已弃用的固定管道功能...
-
@rlam12 是吗?你能告诉我是哪一个吗?我是opengl的新手。
-
我也不是专家,但我可以识别
glTranslatefglMatrixMode和其他一些正在从标准中删除的函数,OpenGL 3 对所有内容都使用着色器和自定义矩阵但我无法真正说出您的代码有什么问题,再次,不是专家。祝你好运,新年快乐! -
int main(int argc, char **argv)是合法的 C。但是,有些人喜欢int main(int argc, char *argv[])。但是,启用警告是个好建议。 -
你看过this simple animation使用OpenGL吗?
glutPostRedisplay()和glViewPort()跳出来特别有趣。
标签: c opengl animation translate-animation