制作多个形状会出现在不同的位置,大小和颜色?

时间:2017-11-05 20:24:39

标签: c++ opengl glut

我正在编写一个游戏,我希望使用glVertex2d绘制的形状在屏幕上以不同的位置,颜色和大小。我只需要显示6个宇宙飞船。我被告知要使用rand我搜索了它,但遗憾地找不到任何东西。

#include "include\freeglut.h"   // OpenGL toolkit - in the local shared folder
#include <iostream>


void spaceship(void);


int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(640, 400);
    glutCreateWindow("Spaceship");

    glutDisplayFunc(spaceship);

    glutMainLoop();
}

void spaceship(void) {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBegin(GL_TRIANGLES);
    glVertex2f(-0.5, -0.5);
    glVertex2f(0.5,-0.5);
    glVertex2f(0.0,0.5);
    glEnd();

    glutSwapBuffers();
}

1 个答案:

答案 0 :(得分:0)

OpenGL是一种低级API,因此需要用户手动完成。 有glScale, glTransform, glTranslate等函数,但这些函数会影响整个环境,因此需要放在glPushMatrix and glPopMatrix之间。例如,如果我推动矩阵创建对象然后只弹出矩阵,那么在这两个函数调用中创建的对象将受到影响。

glPushMatrix();
 glScalef(2.0f, 2.0f, 0.0f);
 glBegin(GL_QUADS);
  glVectex(-1.0f, 1.0f);
  glVectex(-1.0f, -1.0f);
  glVectex(1.0f, -1.0f);
  glVectex(1.0f, 1.0f);
 glEnd();
glPopMatrix();

因为在现代OpenGL中不推荐使用这种方法,所以很多人都试图避免使用它来支持手工劳动。手动方法涉及线性代数,您可以找到更多here

希望它有用。