【发布时间】:2020-08-18 07:16:14
【问题描述】:
我正在做一个我的家庭作业项目。我需要旋转汽车(不完全是,但就像汽车一样,我认为这并不重要)。我的车2d。我用 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。当我说“我不能把它变成二维的”时,我的意思是我没有得到这段代码的算法和逻辑。这是 3d quads 代码,我可以用 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 像素的二维四边形),我需要将它在 y 轴上转动 180 度。我想像编写我的第一个代码一样创建它。
【问题讨论】:
-
我没有看到你在使用
glRotate。在glEnd之前使用它 -
再看一遍,已经有
glRotatef(rotate_y, 0.0, 1.0, 0.0);码了。