我正在尝试在我的游戏中实现调色板索引的纹理(在学习OpenGL的同时),并且取得了一些成功,但是我注意到在计算颜色图行时似乎存在舍入问题。
< p>基本上我有3个参数:顶点着色器
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个,即,需要花费很多这个增量才能看到颜色图行的变化。
有人知道更好的处理方法吗?这个?我认为要么需要提高精度,要么需要通过颜色映射行索引而不是我现在正在做的事情。