将单个字节加载到LWJGL/LibGDX中的纹理

将单个字节加载到LWJGL/LibGDX中的纹理,libgdx,lwjgl,Libgdx,Lwjgl,我在LibGDX中有一个亮度贴图。我使用ByteBuffer加载像素,效果很好 Gdx.graphics.getGL20().glPixelStorei(GL20.GL_UNPACK_ALIGNMENT, 1); Gdx.graphics.getGL20().glTexImage2D(GL20.GL_TEXTURE_2D, 0, GL20.GL_LUMINANCE, overviewBlock.getWidth(), overviewBlock.getHeight(), 0,

我在LibGDX中有一个亮度贴图。我使用ByteBuffer加载像素,效果很好

    Gdx.graphics.getGL20().glPixelStorei(GL20.GL_UNPACK_ALIGNMENT, 1);
    Gdx.graphics.getGL20().glTexImage2D(GL20.GL_TEXTURE_2D, 0, GL20.GL_LUMINANCE, overviewBlock.getWidth(), overviewBlock.getHeight(), 0,
            GL20.GL_LUMINANCE,
            GL20.GL_UNSIGNED_BYTE, overviewBuffer);
但是,我很难理解如何将字节转换为GLSL中的浮点。对于基于整数的颜色,向ByteBuffer写入内容就像一个符咒。但我不知道如何使用单字节颜色来实现这一点

                    buffer.put((byte)255);

如果我没有弄错的话,这不会导致GLSL/OpenGL中的值为1.0。在GLSL中,从0到1.0之间获取值的正确方法是什么,比如说从0到255之间的整数?

我使用buffer.write((byte)(integer number&0xff))按照注释的建议写入字节。

Java中的
byte
是从[-128,127]范围内签名的。255不在该范围内(-1实际上是您所需要的),您将需要一段时间才能将该常数表示为1.0。您可以将升迁考虑为整数:<代码> Buff.PoT((字节)(255和0xFF));<将255提升为整数的code>只屏蔽低8位,然后将其转换回
字节。然后,您真的不必关心
字节的范围是多少,因为该常量被视为有符号整数;有符号整数中的符号位远远超出了最低顺序的8位,这很有帮助。事实上,想想看,这应该只适用于读取“无符号”字节,而不是写入一个。@AndonM.Coleman您不能用十六进制指定字节吗<代码>缓冲区.put((字节)0xff)用于255。我还没有测试过这个,但这是我首先要尝试的。好吧,它也有同样的问题——即第8位是符号位。数字0xff实际上是-1。但是,由于没有人在这里解释价值观,这真的不重要,我的想法是相反的。假设您有一个来自OpenGL的无符号字节,然后您想自己进行定点->浮点转换,那么0xff被解释为-1这一事实就很重要了。就我所知,你的方法似乎工作得很好。我还不太明白为什么-128在结尾位表示为0x00,但这是我自己对这个问题的无知。无论哪种方式,我使用(byte)(integer&0xff)和0xff表示255/1.0,0x00表示0/0.0。那部分对我来说很有意义。