2011-10-13 87 views
0

我是OpenGL和着色器的新手。我有一个涉及使用着色器来显示立方体的项目。用着色器在OpenGL中显示多个立方体

所以基本上我应该在原点(+ -10,+ - 10,+ - 10)处使用不同颜色的透视投影显示八个立方体。换句话说,会有一个以(10,10,10)为中心的立方体,另一个以(10,10,10)为中心的立方体等等。 (+ -10,+ -10,+ -10)有8种组合。然后,我应该提供一个键盘命令'c',每按一次键就会改变所有立方体的颜色。

到目前为止,我能够在原点制作一个立方体。我知道我应该使用这个立方体并将其翻译成八个立方体,但我不知道我会怎么做。有谁知道我会怎么处理这个问题?

+0

对于Stack Overflow,这个问题太宽泛了,但我保留了一系列可以使用的教程。您将通过教程7了解所需的全部内容。 –

+0

您只需将矩阵传递给顶点着色器即可。更改要绘制(翻译)的每个立方体的矩阵。另外,如果你想改变颜色,那么你还需要一个颜色变量来传递给顶点着色器。正如尼科尔所说,有很多教程可用于这种事情。 – Robinson

回答

0

如上所述,这个问题太广泛了。但是你说你设法绘制一个立方体,所以我可以假设你可以设置相机和窗口。这给我们提供了如何渲染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