如前所述,这个问题过于宽泛。但是您说您设法绘制了一个立方体,因此我可以假设您可以设置相机和窗口。这让我们知道如何渲染 8 个立方体。有很多方法可以做到这一点,但我会提到两种截然不同的方法。
经典:
您制作的函数需要 2 个参数 - 立方体的中心和大小。有了这两个,您可以像现在一样构建多维数据集,但您将使用这些变量而不是固定值。例如,正面将是:
glBegin(GL_TRIANGLE_STRIP);
glVertex3f(center.x-size/2, center.y-size/2, center.z+size/2);
glVertex3f(center.x+size/2, center.y-size/2, center.z+size/2);
glVertex3f(center.x-size/2, center.y+size/2, center.z+size/2);
glVertex3f(center.x+size/2, center.y+size/2, center.z+size/2);
glEnd();
这只是为了展示如何从变量中制作它,您可以按照现在的方式进行操作。
现在,您提到要使用着色器。着色器主题非常广泛,就像openGL本身一样,但我可以告诉你这个想法。在 openGL 3.2 中,添加了称为几何的特殊着色器。他们的目的是处理整个几何图形——相反,顶点着色器一次只处理一个顶点,或者片段着色器一次只处理一个片段——几何着色器一次只处理一个几何块。如果您正在渲染三角形,您将获得有关刚刚通过着色器的单个三角形的所有信息。这不会是什么严重的事情,但是这些着色器不仅可以修改这些几何图形,它们还可以创建新的几何图形!所以我在我的一个着色器程序中做,我在其中渲染点,但是当它们通过几何着色器时,这些点被转换为圆。同样,您可以只渲染点,但在几何着色器中,您可以渲染整个立方体。点位置将作为这些立方体的中心,您应该统一传递立方体的大小。如果立方体的大小可能不同,您还需要制作顶点着色器,它将大小从属性传递到变量,可以在几何着色器中读取。
至于颜色问题,如果你不实现片段着色器,你唯一需要做的就是glColor3f
在渲染立方体之前调用。它需要 3 个参数 - 红色、绿色和蓝色值。请注意,这些值的范围不是从 0 到 255,而是从 0 到 1。如果您使用白色背景,您可能会感到困惑,如果您使用白色背景并认为当您将颜色设置为 200、10、10 时,您应该看到红色立方体,但你什么也没看到。那是因为实际上你渲染了白色立方体。为避免此类错误,我建议将背景设置为 gray whit 之类的东西glClearColor
。