Java FloatBuffer 大小错误 OpenGL

标签 java opengl lwjgl light floatbuffer

使用 LWJGL 的 OpenGL 实现,并尝试使用照明功能。这需要创建 FloatBuffers 来传递给 OpenGL。相关代码如下:

GL11.glClearColor(0,0,0,0);

float[] ambientLight={(float).3,(float).5,(float).8,1};
FloatBuffer ambientLightB = FloatBuffer.allocate(4);
ambientLightB.put(ambientLight);

float[] diffuseLight={(float).25,(float).25,(float).25,1};
FloatBuffer diffuseLightB = FloatBuffer.allocate(4);
diffuseLightB.put(diffuseLight);

float[] lightPosition={0,0,1,1};
FloatBuffer lightPositionB = FloatBuffer.allocate(4);
lightPositionB.put(lightPosition);

float[] matAmbient={1,1,1,1};
FloatBuffer matAmbientB = FloatBuffer.allocate(4);
matAmbientB.put(matAmbient);

float[] matDiff={1,1,1,1};
FloatBuffer matDiffB = FloatBuffer.allocate(4);
matDiffB.put(matDiff);

GL11.glShadeModel(GL11.GL_SMOOTH);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glFrontFace(GL11.GL_CCW);
GL11.glEnable(GL11.GL_LIGHTING);

GL11.glMaterial(GL11.GL_FRONT,GL11.GL_AMBIENT,matAmbientB);
GL11.glMaterial(GL11.GL_FRONT, GL11.GL_DIFFUSE,matDiffB);
GL11.glLight(GL11.GL_LIGHT0,GL11.GL_AMBIENT,ambientLightB);
GL11.glLight(GL11.GL_LIGHT0,GL11.GL_DIFFUSE,diffuseLightB);
GL11.glLight(GL11.GL_LIGHT0,GL11.GL_POSITION,lightPositionB);
GL11.glEnable(GL11.GL_LIGHT0);

我对 glMaterial 的第一次调用出现以下错误:

线程“main”中出现异常 java.lang.IllegalArgumentException: 剩余缓冲区元素数为 0,必须至少为 4。因为最多可以返回 4 个元素,所以无论什么情况,都需要至少有 4 个元素的缓冲区实际返回的元素数

不太确定我在这里做错了什么,似乎是创建 FloatBuffer 时出现问题。

最佳答案

在 put() 之后翻转 () 缓冲区,或者使用 FloatBuffer.wrap(),这也会节省一些代码行。或者它可能需要另外 4 个槽,因此分配 8 个元素。

关于Java FloatBuffer 大小错误 OpenGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9541752/

相关文章:

opengl - glm四元数旋转合并

c++ - 读取 BMP BGR 值,传递给 glTexImage2D

java - Slick2d 光照与乘法

java - Libgdx |盒子2d |从 PolygonShape 创建圆

macos - glutPassiveMotionFunc和glutWarpMousePointer

java - 使用 jarsplice 导出到 exe

opengl中的Java vbo,索引纹理坐标,可能吗?

java - 针对外部模式文件验证 JSON 模式是否符合 Jackson

java - SplashScreen java 更改 alpha

java - AWS 使用 Hadoop API 增加映射和缩减器