gpt4 book ai didi

opengl - 浮点纹理到底是什么?

转载 作者:行者123 更新时间:2023-12-02 04:25:08 27 4
gpt4 key购买 nike

我尝试阅读 OpenGL ARB_texture_float 规范,但我仍然无法理解它..

float 据与我加载到纹理中的图像中的普通 8 位每 channel RGBA 或 RGB 数据有何关系?

最佳答案

这里有一点阅读here关于它。

基本上,浮点纹理是数据为浮点类型的纹理:)也就是说它没有被夹紧。因此,如果纹理中有 3.14f,您将在着色器中读取相同的值。

您可以使用不同数量的 channel 来创建它们。您还可以根据格式创建 16 或 32 位纹理。例如

// create 32bit 4 component texture, each component has type float    
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, 16, 16, 0, GL_RGBA, GL_FLOAT, data);

其中数据可能是这样的:

float data[16][16];
for(int i=0;i<16*16;++i) data[i] = sin(i*M_PI/180.0f); // whatever

然后在着色器中您可以获得完全相同的(如果您使用 FLOAT32 纹理)值。

例如

uniform sampler2D myFloatTex;
float value = texture2D(myFloatTex, texcoord.xy);

如果您使用 16 位格式,例如 GL_RGBA16F,那么每当您在着色器中读取时,您都会进行转换。因此,为了避免这种情况,您可以使用 half4 类型: half4值=texture2D(my16BitTex, texcoord.xy);

所以,基本上,标准化 8 位纹理和浮点纹理之间的区别在于,在第一种情况下,您的值将被带到 [0..1] 范围并被限制,而在后者中,您将按原样收到您的值(除了对于 16<->32 转换,请参阅上面的示例)。

并不是说您可能希望将它们与 FBO 一起用作渲染目标,在这种情况下,您需要知道并非所有格式都可以附加为渲染目标。例如。您无法附加亮度和强度格式。

此外,并非所有硬件都支持浮点纹理过滤,因此如果需要,您需要首先针对您的情况进行检查。

希望这有帮助。

关于opengl - 浮点纹理到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5709023/

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