0

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

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

到目前为止,我能够在原点制作一个立方体。我知道我应该使用这个立方体并翻译它来创建八个立方体,但我不确定我会怎么做。有谁知道我会怎么做?

4

1 回答 1

0

如前所述,这个问题过于宽泛。但是您说您设法绘制了一个立方体,因此我可以假设您可以设置相机和窗口。这让我们知道如何渲染 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

于 2011-10-14T12:24:45.697 回答