我是OpenGL和着色器的新手。我有一个涉及使用着色器显示多维数据集的项目。
所以基本上我应该使用不同颜色的原点(+ -10,+ - 10,+ - 10)处的透视投影显示八个立方体。换句话说,将有一个以(10,10,10)为中心的立方体,另一个以(10,10,-10)为中心的立方体,依此类推。 (+ -10,+ -10,+ -10)有8种组合。然后我应该提供一个键命令'c',每次按下键都会改变所有立方体的颜色。
到目前为止,我能够在原点制作一个立方体。我知道我应该使用这个立方体并将其转换为创建八个立方体,但我不确定如何做到这一点。有谁知道我会怎么做呢?
答案 0 :(得分:0)
如上所述,这个问题过于宽泛。但是你说你设法绘制了一个立方体,所以我可以假设你可以设置相机和你的窗口。这让我们知道如何渲染8个立方体。有很多方法可以做到这一点,但我会提到两个非常不同的方法。
<强>经典:强> 你创建了两个参数的函数 - 立方体的中心和大小。使用这两个方法你可以像现在一样建立立方体,但是你将使用这些变量代替固定值。例如,正面将是:
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();
这只是为了展示如何从变量中创建它,你可以像现在这样做。
现在,您提到要使用着色器。 Shader主题非常广泛,就像openGL本身一样,但我可以告诉你这个想法。在openGL 3.2中添加了称为几何的特殊着色器。它们的目的是将几何体作为整体使用 - 相反,顶点着色器在时间上仅用于1个顶点,或者片段着色器在时间上仅用于一个片段 - 几何着色器在时间上对一个几何体块起作用。如果您正在渲染三角形,则会获得有关仅通过着色器的单个三角形的所有信息。这不会是严重的,但这些着色器不仅可以修改这些几何形状,还可以创建新的几何形状!所以我在我的一个着色器程序中进行渲染,但是当它们通过几何着色器时,这些点将转换为圆形。类似地,您可以只渲染点,但在几何着色器内部,您可以渲染整个立方体。点位置将作为这些立方体的中心,您应该以均匀的方式传递立方体的大小。如果立方体的大小可能不同,您还需要创建顶点着色器,将大小从属性传递到变量,可以在几何着色器中读取。
至于颜色问题,如果你没有实现片段着色器,那么你只需要在渲染立方体之前调用glColor3f
。它需要3个参数 - 红色,绿色和蓝色值。请注意,这些值的范围不是0到255,而是从0到1.如果您使用白色背景并且认为当您将颜色设置为200,10,10时,您可能会感到困惑,您不应渲染多维数据集看到红色的立方体,但你没有看到任何东西。那是因为实际上你渲染了白色立方体。为避免此类错误,我建议将背景设置为灰色白色glClearColor
。