2013-05-09 42 views
0

我需要使用现有纹理渲染对象,并且需要在渲染过程中更改颜色。 (如将红色通道乘以0.5)。现有的纹理不是单色的。我需要这样做,而不启用照明和没有着色器,所以我不打扰我正在工作的应用程序。我无法在渲染过程中尽早工作,以便可以直接读取/写入缓冲区。在不使用光照或着色器的情况下改变OpenGL渲染的颜色

实际上,我希望某种颜色转换矩阵或过滤器在正常渲染过程中起作用。

+0

请勿打扰应用程序,这是什么意思?你在做某种类型的DLL注入吗? – 2013-05-09 20:03:03

+0

您还定位了哪个API版本(OpenGL)? – Trax 2013-05-09 20:33:26

+0

OpenGL 2或更低版本,它是在带有用户指导的Java程序中注入代码。 GPU内存很高,但GPU处理利用率不高,因此计算而不是附加纹理更好。该程序使用讨厌的黑客而不是适当的照明代码,因此它不容易被替换。 – JAKJ 2013-05-09 21:34:17

回答

1

基于有限的信息,我会承担一些事情。

我假设你正在使用固定管道。 我假设你没有使用像glBitmap或glDrawPixels这样的低级像素函数。如果你是你不应该的。

为了解决你的问题请尝试以下操作: 绘制纹理四,使用在glBegin,glEnd,glVertex2f,glTexCoord2f 要改变只是在glBegin之后和任何其他战平指令之前的颜色使用glColor。 您应该在cpu中执行颜色转换矩阵,并使用glColor使用该结果。

图像将被相应地混合。 WHITE不会更改图像颜色。 确保GL_LIGHTING未启用。

+0

这听起来很有趣,今晚我会试试。该程序使用固定管道而不是正确的代码,是的,它只是绘制纹理四边形。 – JAKJ 2013-05-09 21:35:37

0

OpenGL有一个可以像GL_MODELVIEW或GL_PROJECTION一样访问和修改的颜色转换矩阵(GL_COLOR)(您很可能需要glLoadMatrix或glMultMatrix,因为glRotate等对颜色没有多大意义)。它需要扩展GL_ARB_imaging。

+0

我被告知只能在直接像素传输过程中工作,而不能在正常渲染过程中使用。 – JAKJ 2013-05-09 22:36:34

相关问题