OpenGL вращающаяся функция glRectf ()? - PullRequest
0 голосов
/ 04 мая 2020

Я работаю над проектом, который мой домашнее задание. Мне нужно вращать машину (не совсем, но, как машина, я думаю, это не важно). Моя машина 2д. Я создаю его с помощью glReactf (); функция. Из-за этого я могу создать прямоугольник с этой функцией попиксельно. Как;


// Create a rectangle (0,0) to (30,30) :) Like a square, yeap :) I use it.
// Because I am working on a lot of rectangles and you know, squares are rectangles in math :)

    glRectf(0, 0, 30, 30);

Но у меня есть код. Это работает, но это 3d. Я не могу превратить это 2d. Вы можете помочь мне? Это не важно, я работаю над 2d. Хотя я говорю «я не могу включить 2d», я имею в виду, что я не получил алгоритм и лог c для этого кода. Это код для четырехугольников, и я могу повернуть его с помощью функции rotatef ();


#include <stdio.h>
#include <GL/glut.h>

double rotate_y = 0;


void display() {
       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
       glLoadIdentity();
glRotatef(rotate_y, 0.0, 1.0, 0.0);

    glBegin(GL_POLYGON);
    glColor3f(1.0, 1.0, 1.0);
    glVertex3f(0.5, -0.5, 0.5);

    glColor3f(1.0, 1.0, 0.0);
    glVertex3f(0.5, 0.5, 0.5);

    glColor3f(1.0, 0.0, 1.0);
    glVertex3f(-0.5, 0.5, 0.5);

    glColor3f(1.0, 1.0, 1.0);
    glVertex3f(-0.5, -0.5, 0.5);

    glEnd();
glFlush();
glutSwapBuffers();
}



void keyboard(int key, int x, int y) {
    if (key == GLUT_KEY_RIGHT) {rotate_y += 45;}
    else if (key == GLUT_KEY_LEFT) {rotate_y -= 45;}
glutPostRedisplay();
}



int main(int argc, char* argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
        glutInitWindowPosition(0, 0);
        glutInitWindowSize(800, 800);
glutCreateWindow("Rotating Test");
glutDisplayFunc(display);
glutSpecialFunc(keyboard);
glutMainLoop();
return 0;
    }

Мне нужна машина (например, квадрат 30x30 px в 2d), и мне нужно повернуть ее на 180 градусов по оси Y. Я хочу создать его, как написать мой первый код.

1 Ответ

0 голосов
/ 04 мая 2020

Я решаю это, как я это сделал, я не знаю, я серьезно, но это сделано. Это моя функция отображения;

void display() {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glLoadIdentity();
        glRotatef(rotate_y, 0.0, 1.0, 0.0);
        glColor3f(1.0, 1.0, 1.0);
        glRectf(1, 1, 11, 11);
        glFlush();
        glutSwapBuffers();
    }
...