如何最好地使用Python3将整数打包到位图纹理中,然后使用GLSL片段着色器在WebGL 1.0中解压缩它?

问题描述 投票:0回答:1

我正在尝试将32位整数保存到位图中的像素中。如何使用Python3将这个示例值98603205存储到每个0-255的rgba通道中? (大数字不是颜色,而是数据结构中的地址。)

然后从GLSL片段着色器中的像素解压缩值?

我希望在python3中提供一个小的代码示例,并在GLSL中提供一个解压缩的示例。

拆箱应尽可能快

最佳问候

python glsl pixel pack rgba
1个回答
0
投票

这是解决方案的第一部分,使用python中的按位运算将整数转换为4x255个颜色通道

    import random  
    # create random integer to test pack and unpack
    nrToUnpack = random.randint(0,4294967295)  

    # create bitwize masks for color channels  
    redMask = 0xFF000000  
    greenMask = 0xFF0000  
    blueMask = 0xFF00  
    alphaMask = 0xFF  
    print("not unpacked yet", nrToUnpack)  

    # bitwize mask the integer into 8-bits each  
    red = (nrToUnpack & redMask) >> 24  
    green = (nrToUnpack & greenMask) >> 16  
    blue = (nrToUnpack & blueMask) >> 8  
    alpha = (nrToUnpack & alphaMask)  

    # each channel 0-255  
    print("unpacked", red, green, blue, alpha)  

    # bitwize repack the integer  
    numberPacked = alpha | (blue << 8) | (green << 16) | (red << 24)  
    print("repacked again", numberPacked)   

要存储的最大值为4294967295下一部分是在GLSL中解压缩此文件。有什么建议吗?

© www.soinside.com 2019 - 2024. All rights reserved.