有光泽的错误

时间:2014-06-21 08:37:49

标签: java opengl minecraft

我正在开发一个Minecraft mod,我正试图在特定的人登录时制作枪金。除了光泽本身外,我已经解决了所有问题。我使用this site中的代码来获取Gold的Ambient,Specular,Diffuse和Shininess,但是当我运行游戏时,我收到了这个错误:

GL11.glMaterialf(GL11.GL_FRONT, GL11.GL_AMBIENT, 0.24725f);
GL11.glMaterialf(GL11.GL_FRONT, GL11.GL_DIFFUSE, 0.75164f);
GL11.glMaterialf(GL11.GL_FRONT, GL11.GL_SPECULAR, 0.628281f);
GL11.glMaterialf(GL11.GL_FRONT, GL11.GL_SHININESS, 0.4f);

我从网站上复制了代码,但我不想使用着色器,所以我尝试将其写为OpenGL代码(如上所示)。然而,当枪渲染时,它会着色金色(因为我写了颜色代码),但它没有发光,并且这个错误被打印到控制台中:

2014-06-21 18:27:36 [SEVERE] [Minecraft-Client] ########## GL ERROR ##########
2014-06-21 18:27:36 [SEVERE] [Minecraft-Client] @ Post render
2014-06-21 18:27:36 [SEVERE] [Minecraft-Client] 1280: Invalid enum

有没有人有任何想法?这显然不是关于Minecraft modding的问题,而是关于OpenGL渲染的更多问题。

(顺便说一下,它是用LWJGL和Java 6渲染的)

1 个答案:

答案 0 :(得分:2)

发生错误是因为GL_AMBIENTGL_DIFFUSEGL_SPECULAR不是glMaterialf()的有效参数。那些定义了材料系数的 RGBA向量,而不仅仅是你尝试设置的单个标量值。您必须使用glMaterialfv(),并为每个参数指定4个组件。您链接的表已经非常明确,每个参数有3个值(RGB),它们只是忽略了alpha组件,这对于材料本身并不是真正相关的,但是您仍然必须指定一个。

但是我还要警告你,除非使用一些反射技术,否则结果看起来仍然不太现实,例如环境贴图。