2016-12-29 56 views
-2

我有一个关于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]条目)。有人可以解释我,如何做到这一点?

+0

“*由于我正在谈论每张图片,所以我应该在片段着色器中做。*”您正在添加*** 16值。上传和下载数据到GPU所花费的时间将比实际添加花费的时间更长。只需使用CPU。 –

+0

我想将它用于更大的数据集,但是从一开始我就有一个小矩阵,所以我更容易想象这个问题。 – Pogasta

回答

0

如果您试图向整个图像(渲染图像的每个像素)添加单个常量值(即[1,1]的值),则应该将该常量值作为单独的uniform值进入你的着色器程序。

然后在片段着色器中,将此常量值添加到当前像素颜色。当前像素颜色作为来自顶点着色器的输入vec4