1
虽然材料数据传递到OpenGL的(在着色器中使用):的OpenGL glMaterialfv VS glMaterialiv
float white[4] ={1.0f,1.0f,1.0f,1.0f};
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, white);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, white);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, white);
int whitei[4] = {255,255,255,255};
glMaterialiv(GL_FRONT_AND_BACK, GL_AMBIENT, whitei);
glMaterialiv(GL_FRONT_AND_BACK, GL_DIFFUSE, whitei);
glMaterialiv(GL_FRONT_AND_BACK, GL_SPECULAR, whitei);
第一个工程漂亮,但第二个只给出了一个黑色网格。两者在完全相同的背景下使用(基本上我写了第一个,然后第二个替换了第一个)。
有没有人知道这是为什么? glMaterialiv真的会让我的生活变得更轻松(如果我可以让它工作),因为我将我的颜色保持为rgba字节,而我不确定是否想让它们变大4倍以将它们转换为浮动。
我明白了。关于你的表现你是对的:这些值最终被用作着色器中的浮点数,所以转换应该在某个地方完成。虽然不知道[0,INT_MAX]范围。这解释了一切。我只是假设,如果我通过整数,他们将被视为0 - 黑色,255 - 白色等。我会改变为花车,再次感谢解释! – cantrem 2011-05-15 09:37:15
@cantrem:如果您使用着色器,而不是使用glMaterial,则可以使用glUniformi,如果您需要它们作为着色器中的整数值,则glUniformi会传递整数而无需事先进行范围转换。 – datenwolf 2011-05-15 10:19:35