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