GLSL / LibGDX调色板索引纹理精度

时间:2018-06-20 00:22:08

标签: opengl libgdx glsl

我正在尝试在我的游戏中实现调色板索引的纹理(在学习OpenGL的同时),并且取得了一些成功,但是我注意到在计算颜色图行时似乎存在舍入问题。

< p>基本上我有3个参数:

  • 纹理(包含调色板索引)
  • 颜色图(这是我的问题所在,纹理中有1700多个行,其中行代表不同的颜色图)
  • 调色板

顶点着色器

attribute vec4 a_position;
attribute vec4 a_color;
attribute vec2 a_texCoord0;

uniform mat4 u_projTrans;

varying vec2 v_texCoords;
varying float colormapIndex;

void main() {
  colormapIndex = a_color.r;
  v_texCoords = a_texCoord0;
  gl_Position = u_projTrans * a_position;
}

片段着色器

uniform sampler2D ColorTable; //256 x 1 pixels
uniform sampler2D ColorMap;   //256 x 1727 pixels (this many maps)
uniform sampler2D MyIndexTexture;
varying vec2 v_texCoords;
varying float colormapIndex;

void main() {
  vec4 color       = texture2D(MyIndexTexture, v_texCoords);
  vec2 mappedIndex = vec2(color.r, colormapIndex);
  vec4 mapping     = texture2D(ColorMap, mappedIndex);
  vec4 texel       = texture2D(ColorTable, mapping.xy);
  gl_FragColor = texel;
}

我正在使用(在Java代码中)计算颜色图行:

float colormapIndex = (32 + 0.5f) / colorMap.getHeight();

,然后将其设置为批处理颜色的r(顶点着色器中的a_color.r)参数。在上面的示例中,32是我需要的颜色图行。但是,我注意到没有显示6个值中的5个,即,需要花费很多这个增量才能看到颜色图行的变化。

有人知道更好的处理方法吗?这个?我认为要么需要提高精度,要么需要通过颜色映射行索引而不是我现在正在做的事情。

0 个答案:

没有答案