如上所述,这个问题太广泛了。但是你说你设法绘制一个立方体,所以我可以假设你可以设置相机和窗口。这给我们提供了如何渲染8个立方体。有很多方法可以做到这一点,但我会提到两种截然不同的方法。
经典: 您制作的功能需要2个参数 - 立方体的中心和大小。用这些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时应该看到红色的立方体,但你什么都看不到。这是因为实际上你渲染了白色的立方体。为了避免这样的错误,我建议将背景设置为灰色白色glClearColor
。
对于Stack Overflow,这个问题太宽泛了,但我保留了一系列可以使用的教程。您将通过教程7了解所需的全部内容。 –
您只需将矩阵传递给顶点着色器即可。更改要绘制(翻译)的每个立方体的矩阵。另外,如果你想改变颜色,那么你还需要一个颜色变量来传递给顶点着色器。正如尼科尔所说,有很多教程可用于这种事情。 – Robinson