使多个形状以不同的位置、大小和颜色显示

Making more than one shape appear in different locations, sizes, and colours?

本文关键字:位置 显示 颜色      更新时间:2023-10-16

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

#include "includefreeglut.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();
}

OpenGL是一个低级API,因此需要用户手动做很多事情。有诸如glScale, glTransform, glTranslate之类的功能,但是这些功能会影响整个环境,因此需要放在glPushMatrix and glPopMatrix之间。例如,如果我推送矩阵创建对象,然后仅弹出矩阵,则在这 2 个函数调用中创建的对象将受到影响。

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中已被弃用,因此许多人试图避免使用它,转而使用体力劳动。手动方法涉及线性代数,您可以在此处找到更多信息。

希望对您有所帮助。