gpt4 book ai didi

java - LWJGL Assimp : Loading Textures

转载 作者:行者123 更新时间:2023-11-30 06:45:54 25 4
gpt4 key购买 nike

我正在使用 assimp 的 LWJGL 3 版本,并且我在加载模型时遇到了困难。我遇到的问题是加载纹理的实际像素数据。使用AIMaterial对象加载这些纹理的过程是怎样的?

最佳答案

当我进行快速演示测试时,我只使用了 Java 中的常规图像 IO。它并不那么花哨,但它确实有效,并且可能会让您继续前进:

   public static ByteBuffer decodePng( BufferedImage image )
throws IOException
{

int width = image.getWidth();
int height = image.getHeight();

// Load texture contents into a byte buffer
ByteBuffer buf = ByteBuffer.allocateDirect(
4 * width * height );

// decode image
// ARGB format to -> RGBA
for( int h = 0; h < height; h++ )
for( int w = 0; w < width; w++ ) {
int argb = image.getRGB( w, h );
buf.put( (byte) ( 0xFF & ( argb >> 16 ) ) );
buf.put( (byte) ( 0xFF & ( argb >> 8 ) ) );
buf.put( (byte) ( 0xFF & ( argb ) ) );
buf.put( (byte) ( 0xFF & ( argb >> 24 ) ) );
}
buf.flip();
return buf;
}

图像作为另一个例程的一部分加载的位置:

    public Texture(InputStream is) throws Exception {
try {
// Load Texture file

BufferedImage image = ImageIO.read(is);

this.width = image.getWidth();
this.height = image.getHeight();

// Load texture contents into a byte buffer

ByteBuffer buf = xogl.utils.TextureUtils.decodePng(image);

// Create a new OpenGL texture
this.id = glGenTextures();
// Bind the texture
glBindTexture(GL_TEXTURE_2D, this.id);

// Tell OpenGL how to unpack the RGBA bytes. Each component is 1 byte size
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
// Upload the texture data
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, this.width, this.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, buf);

关于java - LWJGL Assimp : Loading Textures,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43690732/

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