gpt4 book ai didi

java - opengl java 加载 png 纹理无法正常工作

转载 作者:太空宇宙 更新时间:2023-11-04 08:26:10 26 4
gpt4 key购买 nike

我正在尝试加载一个 png 文件作为纹理,但是,即使我没有任何错误,我也看不到纹理。我得到的唯一东西是一种颜色的正方形。我已经搜索过示例,但我不明白我犯了什么错误。这是代码:

        final Image image = SWTImageFactory.getImage(ImageFactory.CROSS_SYMBOL_IMAGE);
final ImageData imageData = image.getImageData();

ByteBuffer buffer = ByteBuffer.allocate(4*imageData.width * imageData.height);
int p, r, g, b, a;

for (int y = 0; y<imageData.height; y++) {
for (int x = 0; x < imageData.width; x++) {

p = imageData.getPixel(x, y);
a = (p >> 24) & 0xFF; // get pixel bytes in ARGB order
r = (p >> 16) & 0xFF;
g = (p >> 8) & 0xFF;
b = (p >> 0) & 0xFF;

buffer.put((byte)r); // fill in bytes in RGBA order
buffer.put((byte)g);
buffer.put((byte)b);
buffer.put((byte)a);
}
}

buffer.rewind();
gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, 4,imageData.width, imageData.height,0,
GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, buffer);

gl.glEnable(GL.GL_TEXTURE_2D);
int [] textures = new int [1];
gl.glGenTextures(1, textures, 0);

gl.glBindTexture(GL.GL_TEXTURE_2D, textures[0]);

gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_S, GL.GL_REPEAT);
gl.glTexParameteri (GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_T, GL.GL_REPEAT);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER,GL.GL_LINEAR);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER,GL.GL_LINEAR);

gl.glTexEnvf(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_MODULATE);

gl.glBegin(GL.GL_QUADS);

gl.glTexCoord2f(0.0f, 0.0f);
gl.glVertex3f(100.0f, 100.0f, 0.0f);

gl.glTexCoord2f(0.0f, 1.0f);
gl.glVertex3f(100.0f, 200.0f, 0.0f);

gl.glTexCoord2f(1.0f, 1.0f);
gl.glVertex3f(200.0f, 200.0f, 0.0f);

gl.glTexCoord2f(1.0f, 0.0f);
gl.glVertex3f(200.0f, 100.0f, 0.0f);

gl.glEnd();
gl.glDisable(GL.GL_TEXTURE_2D);

最佳答案

您在绑定(bind)任何纹理(或者可能绑定(bind)其他纹理)之前调用gl.glTexImage2D,但此函数会更改当前绑定(bind)的纹理对象的纹理图像。因此,在您的代码中,您应该在 gl.glBindTexture(GL.GL_TEXTURE_2D,textures[0]) 之后调用它。

顺便说一句,我希望这段代码不会在每一帧被调用(绘制函数暗示),因为你不应该在每一帧创建一个新的纹理对象(更不用说从 HDD 读取图像)(更不用说你实际上并没有删除它)。实际上,您应该在某些初始化代码中创建纹理对象,将图像放入其中并调整其参数,以便在绘图代码中您只需调用 glBindTexture (也许还有 glEnable(GL_TEXTURE_2D) 或类似的东西)。

关于java - opengl java 加载 png 纹理无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8467203/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com