当前位置: 首页 > 知识库问答 >
问题:

使用OpenGL进行纹理颜色操作(使用LWJGL和Java)

齐财
2023-03-14

我是OpenGL新手。我将Java与LWJGL和Slick一起使用。到目前为止,我可以绘制多个纹理,使用缓冲区,我可以将屏幕上显示的图像复制到一个纹理,以便进行后处理。使用glColor3f()可以使屏幕具有所需的颜色(仅蓝色、仅红色、仅显示蓝色和绿色通道等)。

但是glColor3f(r, g, b)所做的只是将r, g, b的值乘以当前像素。如果R,G,B是像素的当前值,那么glColor对所有像素做的是(R*r,G*g,B*b)。

我要做的是使用当前值R、G、B,例如,我可以将红色通道交换为蓝色通道:

(B、R、G)

或者将这些值和新值用于算术运算

(RG*R,(BG)/5,B*0.2)

我的目的是制作一个灰度纹理,改变所有像素的颜色(R,G,B)

color = (R*0.5 + G*0.5 + B*0.5)/3
functionThatChangesColor(color, color, color);

我怎样才能做到这一点呢?

谢谢!

共有1个答案

朱风史
2023-03-14

使用着色器实现组件swizzle。使用更高版本的OpenGL,您还可以将纹理的组件切换设置为纹理参数。看http://www.opengl.org/wiki/Texture#Swizzle_mask

而GLSL着色器完全能够对vec4进行重新排序​ 通过纹理函数返回的值,通常更方便地控制从纹理从代码中获取的数据的顺序。这是通过swizzle参数完成的。

纹理对象可以具有旋转参数。这仅适用于具有彩色图像格式的纹理。四个输出组件RGBA中的每一个都可以设置为来自特定的颜色通道。无论是通过纹理采样器还是图像加载存储,所有读取访问都遵循swizzle掩码。

要设置组件的输出,您需要设置GL_TEXTURE_SWIZZLE_C纹理参数,其中C为R、G、B或A。这些参数可以设置为以下值:

  • GL_红色:此组件的值来自

还可以使用GL_纹理_SWIZZLE_RGBA参数将所有四个设置为

//Bind the texture 2D.
GLint swizzleMask[] = {GL_ZERO, GL_ZERO, GL_ZERO, GL_RED};
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask);

这将有效地将图像中的红色通道映射到alpha

 类似资料:
  • 假设我有一个金字塔…我知道如何绘制它,我知道如何为整个金字塔设置纹理,但如何为每面墙设置不同的纹理? 我通过在 我试图通过添加<code>GL11.glBindTexture(GL11.GL_TEXTURE_2D,TEXTURE.getTextureID())来绑定纹理 后,但

  • 我正在绘制一个纹理四边形,但使用的纹理是以前绑定的纹理,即使我试图绑定一个新纹理。 在GuiHandler中创建纹理。Java语言 渲染代码 有人知道为什么使用先前绑定的纹理而不是正确的纹理吗?P、 我正在使用LWJGL

  • 我想在FBO中加载两个纹理,其中一个纹理包含HDR图像,我的第一个目标是将图像从第一个纹理“复制”到第二个纹理(该纹理为空),并称为“下采样纹理”。 所以我创建FBO,加载我想用颜色_附件_0书写的纹理,并绑定它;然后初始化我的着色器程序并渲染一个四边形,其中包含我要在GL\u texture\u 0中读取的纹理。 然后我解开FBO并绑定“DownSamplingTex”,然后画一个四元组。 我不

  • 我有以下片段着色器: 如果我运行我的程序,我得到opengl错误1282,这是无效操作。如果我不使用texture(),那么我就写texCoord=vec4(...)它工作得很完美。我总是把tid(纹理ID)作为0(没有纹理)传入,所以这个部分甚至不应该运行。我已经将纹理统一设置为某个占位符,但据我所知,这应该无关紧要。那么什么会导致无效操作呢?

  • 我试图用lwjgl创建一个简单的OpenGL程序,但目前我还停留在创建纹理渲染上。 我得到的错误是一个分段错误: 机器信息: 有问题的JVM线程堆栈: 最后是我处理纹理创建的代码: 我创建的图像类工作得很好,我使用的示例图像是2 x 2像素,并且具有12字节长度的内部缓冲区,因此segvault不应该由太短的缓冲区引起。

  • 我正在尝试在OpenGL/LWJGL中制作一个简单的按钮, 我可以正确地渲染我的2D四边形,但是当我实现纹理时,整个四边形只有大约3/4的部分得到了纹理,就像这样:https://dl.dropboxusercontent.com/u/60223805/glerror1.png 如果我删除纹理坐标,我得到这个:https://dl.dropboxusercontent.com/u/60223805