gpt4 book ai didi

java - JOGL 的纹理加载

转载 作者:行者123 更新时间:2023-11-30 12:00:19 28 4
gpt4 key购买 nike

我一直在尝试加载一个 bmp 图片以在我的程序中将其用作纹理 我使用了一个 IOStream 类来扩展 DataInputStream 以读取像素在照片中,此代码基于 C++ 的纹理加载器代码:

//class Data members
public static int BMPtextures[];
public static int BMPtexCount = 30;
public static int currentTextureID = 0;
//loading methode
static int loadBMPTexture(int index, String fileName, GL gl)
{
try
{
IOStream wdis = new IOStream(fileName);
wdis.skipBytes(18);
int width = wdis.readIntW();
int height = wdis.readIntW();
wdis.skipBytes(28);
byte buf[] = new byte[wdis.available()];
wdis.read(buf);
wdis.close();
gl.glBindTexture(GL.GL_TEXTURE_2D, BMPtextures[index]);
gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, 3, width, height, 0, GL.GL_BGR, GL.GL_UNSIGNED_BYTE, buf);
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);
currentTextureID = index;
return currentTextureID;
}
catch (IOException ex)
{
// Utils.msgBox("File Error\n" + fileName, "Error", Utils.MSG_WARN);
return -1;
}
}

和 IOStream 代码:​​

public class IOStream extends DataInputStream {

public IOStream(String file) throws FileNotFoundException {
super(new FileInputStream(file));
}

public short readShortW() throws IOException {
return (short)(readUnsignedByte() + readUnsignedByte() * 256);
}

public int readIntW() throws IOException {
return readShortW() + readShortW() * 256 * 256;
}

void read(Buffer[] buf) {

}
}

和调用:

GTexture.loadBMPTexture(1,"/BasicJOGL/src/basicjogl/data/Font.bmp",gl);

经过调试我发现当涉及到这一行时:

IOStream wdis = new IOStream(fileName);

发生了 IOExeption,这是一个 DispatchException 这是什么意思,我该如何解决?

我尝试过:

  1. 使用\\\///
  2. 改变照片的路径,取c:\photoname.bmp的所有路径
  3. 使用 1.bmp 等数字重命名照片

没有效果。

最佳答案

根据您的最新评论判断,您不再收到 IOException,但仍然无法实际渲染纹理(只是得到一个白色方 block )。

我注意到您在此处发布的代码中没有以下内容(但可能在其他地方):

gl.glGenTextures 

您需要generate在绑定(bind)它们之前放置你的纹理。另外,请确保您已启用纹理:

gl.glEnable(GL.GL_TEXTURE2D);

有关开始使用 OpenGL 纹理的更多信息/教程,我建议阅读 NeHe Productions: OpenGL Lesson #06 .此外,在页面底部,您将找到 JOGL 示例代码,以帮助您将概念从 C 转换为 Java。

无论如何,希望这能带来一些新的尝试。

关于java - JOGL 的纹理加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2109046/

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