从纹理获取确切的像素
问题描述:
我有一个关于OpenGL纹理的问题。我正在尝试将它们用于GPGPU操作,但我陷入了开始阶段。我创建了这样的纹理(4x4 int矩阵)。从纹理获取确切的像素
OGLTexImageFloat dataTexImage = new OGLTexImageFloat(4, 4, 4);
dataTexImage.setPixel(0, 0, 0, 0);
dataTexImage.setPixel(0, 1, 0, 10);
dataTexImage.setPixel(0, 2, 0, 5);
dataTexImage.setPixel(0, 3, 0, 15);
dataTexImage.setPixel(1, 0, 0, 10);
dataTexImage.setPixel(1, 1, 0, 0);
dataTexImage.setPixel(1, 2, 0, 2);
dataTexImage.setPixel(1, 3, 0, 1000);
dataTexImage.setPixel(2, 0, 0, 5);
dataTexImage.setPixel(2, 1, 0, 2);
dataTexImage.setPixel(2, 2, 0, 0);
dataTexImage.setPixel(2, 3, 0, 2);
dataTexImage.setPixel(3, 0, 0, 15);
dataTexImage.setPixel(3, 1, 0, 1000);
dataTexImage.setPixel(3, 2, 0, 2);
dataTexImage.setPixel(3, 3, 0, 0);
texture = new OGLTexture2D(gl, dataTexImage);
现在我想从[1,1]矩阵位置增加值到每个像素(矩阵条目)的值。正如我在谈论每幅图片时,我应该在片段着色器中做这件事。但我不知道我怎么能得到确切的像素形式纹理(矩阵[1,1]条目)。有人可以解释我,如何做到这一点?
答
如果您试图向整个图像(渲染图像的每个像素)添加单个常量值(即[1,1]的值),则应该将该常量值作为单独的uniform
值进入你的着色器程序。
然后在片段着色器中,将此常量值添加到当前像素颜色。当前像素颜色作为来自顶点着色器的输入vec4
。
“*由于我正在谈论每张图片,所以我应该在片段着色器中做。*”您正在添加*** 16值。上传和下载数据到GPU所花费的时间将比实际添加花费的时间更长。只需使用CPU。 –
我想将它用于更大的数据集,但是从一开始我就有一个小矩阵,所以我更容易想象这个问题。 – Pogasta