【问题标题】:Animate bouncing box using?使用动画弹跳框?
【发布时间】:2022-06-15 21:21:07
【问题描述】:

我需要制作一个动画,盒子从 (-15, 0) 开始,然后上升到 (-8, 15),当它到达那个位置时,它就下降了。等等,就像 DVD 屏幕保护程序一样,但我似乎找不到它的工作原理。

代码如下:

#include<windows.h>
#include<GL/glu.h>
#include<GL/glut.h>

#ifdef APPLE
#include<GLUT/glut.h>
#else
#include<GL/glut.h>
#endif

#include<stdio.h>
#include<stdlib.h>
#include <GL/freeglut.h>

//Variable menampung sudut awal
float xpos = -15.0;
float deltax = 0.5;
float ypos = 0.0;
bool balik = true;
bool turun = true;
//Variable mengatur perubahan sudut

void myInit(void) {
    glClearColor(0.0, 0.0, 0.0, 1.0);
    glColor3f(1.0, 1.0, 1.0);
    glPointSize(2.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(-15.0f, 15.0f, -15.0f, 15.0f);
}

void myDisplay(void) {
    glClear(GL_COLOR_BUFFER_BIT);

    glBegin(GL_LINES);
    glColor3f(1.0, 1.0, 1.0);
    glVertex2f(-15.0, 0.0);
    glVertex2f(15.0, 0.0);
    glEnd();

    glBegin(GL_LINES);
    glColor3f(1.0, 1.0, 1.0);
    glVertex2f(-8.0, 15.0);
    glVertex2f(-8.0, -15.0);
    glEnd();

    glBegin(GL_LINES);
    glColor3f(1.0, 1.0, 1.0);
    glVertex2f(8.0, 15.0);
    glVertex2f(8.0, -15.0);
    glEnd();

    glBegin(GL_LINES);
    glColor3f(1.0, 1.0, 1.0);
    glVertex2f(0.0, 15.0);
    glVertex2f(0.0, -15.0);
    glEnd();


    glColor3f(1.0, 1.0, 1.0);
    glBegin(GL_POLYGON);
    glVertex2f(-0.2 + xpos, 0.2 + ypos);
    glVertex2f(-0.2 + xpos, -0.2 + ypos);
    glVertex2f(0.2 + xpos, -0.2 + ypos);
    glVertex2f(0.2 + xpos, 0.2 + ypos);
    glEnd();

    glutSwapBuffers();
}

void Timer(int) {
    glutPostRedisplay();
    glutTimerFunc(100, Timer, 0);

    if (ypos < 15 && xpos <-8 && turun == true){
        xpos = xpos + deltax;
        ypos = (2.143*xpos) + 32.143;
    }
    else {turun = false;};


    if (ypos > -15 && xpos <8 && turun == false){
        xpos = xpos + deltax;
        ypos = -1,875*xpos + ;
    }
    else turun = true;



}

int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowSize(500, 500);
    glutInitWindowPosition(100, 100);
    glutCreateWindow("Animasi");
    glutDisplayFunc(myDisplay);
    myInit();
    glutTimerFunc(0, Timer, 0);
    //Perulangan
    glutMainLoop();
    return 0;
}

【问题讨论】:

  • 错字/格式?ypos = -1,875*xpos + ;
  • 这个问题不是关于 OpenGL,而是关于动画的算法。

标签: c++ animation glut


猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
相关资源
最近更新 更多