是否可以将FP16值存储在RGBA8纹理中,存储在RG和BA中,就像在此图像中一样? 如何在具有渲染纹理和FBO的OpenGL 3.3+中实现?

在此输入图像描述

===============>>#1 票数:4 已采纳

这只是我的头脑,但你不能乘以255并取整数部分和小数部分? 像这样的东西:

vec2 normal = vec2(normalizedX, normalizedY);
normal = normal / 2.0 + 0.5; // <- This gets all values to be between 0 and 1
vec4 intNormal;
intNormal.r = (int)(normal.x * 255.0);
intNormal.g = (int)(fract(normal.x * 255.0) * 255.0);
intNormal.b = (int)(normal.y * 255.0);
intNormal.a = (int)(fract(normal.y * 255.0) * 255.0);

那么你可以像这样重建它们,我想:

vec4 intNormal = texture2D (gBuffer, coord); // Or wherever you get it from
vec2 normal;
normal.x = (float)intNormal.r / 255.0 + ((float)intNormal.g / 255.0) / 255.0;
normal.y = (float)intNormal.b / 255.0 + ((float)intNormal.a / 255.0) / 255.0;
normal = normal * 2.0 - 1.0; // <- this gets us back to -1.0 to 1.0 for the normal

  ask by Soapy translate from so

未解决问题?本站智能推荐:

1回复

从SSBO读取rgba8

我需要传递〜1 Mb的1D图像数据(rgba8)以计算着色器。 我尝试使用2D纹理,一切正常。 现在,我对如何使用SSBO实现这一目标很感兴趣。 我可以使用glBufferData将任何数据作为void * glBufferData 。 但是如何从着色器中的该SSBO中以vec4读取
2回复

设置GL_RGBA16F纹理格式时获取不完整的FBO

我正在使用Java包装器进行OpenGL(LWJGL) 如果我将FBO纹理附件格式设置为GL_RGBA16F,则状态。实际上除GL_RGBA之外的任何内容都会导致此错误。 这是我的FBO纹理设置: 这是深度附件: 更新: 事实上,如果我交换内部格式和格式的地方如下
1回复

动态更改Alpha值以获得3D RGBA纹理

我正在使用3D纹理对原始数据进行体积渲染。 原始数据可以是Alpha亮度或RGBA。 当前,我读取原始数据并设置alpha值,以使最远的行(或切片)不透明(Alpha = 1),而最接近的切片为“透明”(例如alpha = 0.1),并且对alpha值进行插值。 在opengl中有
1回复

使用glTexSubImage2D修改纹理的像素RGBA值不会更新纹理

我有一个OpenGL纹理,我想在运行中更改纹理中像素的RGBA值。 我想在CPU端进行修改。 我想创建一个函数,以将选定坐标中纹理的像素更改为选定RGBA值。 我尝试了以下方法: 其中x和y是修改像素的坐标, data是红色,绿色,蓝色和alpha的整数数组。 但是我不确定是
2回复

使用GL_RGBA16F_ARB纹理时,它仅包含废话,但没有收到错误消息

我生成这样的纹理: 我将其附加到帧缓冲区对象(FBO)进行渲染。 当我将内部格式设置为GL_RGBA16时,所有这些工作都像一个魅力。 但是,我需要更高的动态范围,并认为GL_RGBA16F_ARB可以解决问题。 不幸的是,如果我在上面给出的代码GL_RGBA16 GL_RGB
1回复

将RGBA像素图与纹理混合

我有一个RGBA像素图(例如抗锯齿的圆形4x4点),我想以类似于笔触的方式在纹理上绘制。 使用glTexSubImage2D的明显解决方案只是覆盖了一个矩形区域,而与alpha值无关。 有没有比在本地RAM中维护纹理的镜像版本,在此处进行混合然后使用glTexSubImage2D上载文件(最
3回复

RGBA整数值到OpenGL纹理

我正在用C ++写一个射线投射器,它将其结果输出到常规图像文件中。 现在,我想将内部RGBA表示(4个整数)呈现到GLUT提供的OpenGL窗口中。 我已经知道我必须使用glTexImage2D生成纹理,将该纹理分配给一个四边形,然后在相机前面渲染该四边形。 http://www.
1回复

rgba数组到OpenGL纹理

对于游戏的gui,我有一个自定义纹理对象,用于存储纹理的rgba数据。 我的游戏注册的每个GUI元素都会添加到最终的GUI纹理,然后在后期处理之后将该纹理覆盖到帧缓冲区上。 我无法将我的Texture对象转换为openGL纹理。 首先,我创建一个一维的int数组,该数组rgbarg
1回复

在GLSL中读取32位RGBA浮点值

我尝试了一些32位浮点数据发送到着色器,但效果不稳定。 如果我用全白(1,1,1,1)测试,则所有值均为零。 这是我创建纹理的代码: 并从GLSL中读取: 如果我将纹理设置为随机值,则会显示某些内容,但这是不正确的。 这是从RGBA32F纹理读取或我思念的东西正确的方法是什
1回复

在顶点着色器中将4个以上的组件打包到RGBA_32纹理中

问题 : 顶点着色器只能从未映射的RGBA_32图像(128位浮点)中提取纹理像素 每个顶点我需要四个以上的值 使用多个RGBA_32图像是过大的(我想),至少我不需要每个组件的精度很高) 因此,我需要一种在4个RGBA值中打包4个以上组件的方法,当然也需要在V