PDA

View Full Version : transfer function RGBA



laetitia
10-21-2011, 08:53 AM
Hi,
I am trying to make a volume renderer in color. To do that, I implemented a shader :

#define EPSILON (0.001)

half4 main(
half3 uvw : TEXCOORD0,
half4 col : COLOR,

uniform sampler3D data,
uniform sampler1D colortable) : COLOR
{
half4 value = tex3D(data, uvw);
half4 color = tex1D(colortable, value.a);
return color;
}

I can see my volume but it in grayscale and not in color.
The variable data refers to my volume :
gl.glTexImage3D(GL.GL_TEXTURE_3D, 0, GL.GL_RGBA, width, height, depth, 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, data);
The variable colortable refers to the transferfunction :
gl.glTexImage1D(GL.GL_TEXTURE_1D, 0, GL.GL_RGBA, TF_TABLE_SIZE, 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, m_pColorTable);
and this is how I build my transfer function :

int[][] colorTable = new int[4][256];

for (int j = 0; j < seuil1; j++) {
colorTable[0][j] = j;
colorTable[1][j] = 0;
colorTable[2][j] = 0;
colorTable[3][j] = j;
}
for (int j = seuil1; j < seuil2; j++) {
colorTable[0][j] = 0;
colorTable[1][j] = 0;
colorTable[2][j] = 0;
colorTable[3][j] = 0;
}
for (int j = seuil2; j < 256; j++) {
colorTable[0][j] = j;
colorTable[1][j] = 0;
colorTable[2][j] = 0;
colorTable[3][j] = j;
}

int tmp = 0;
for (int i = 0; i < 256; i++) {
m_pColorTableR.put((byte) colorTable[0][i]);
m_pColorTableR.put((byte) colorTable[1][i]);
m_pColorTableR.put((byte) colorTable[2][i]);
m_pColorTableR.put((byte) colorTable[3][i]);
}
m_pColorTableR.rewind();

Does somebody have an idea ?
Thank you

mobeen
10-22-2011, 12:27 PM
Hi,
What filtering mode have u setup for the transfer function texture. And you should check the tf by drawing the transfer function on screen.

laetitia
10-24-2011, 12:17 AM
Hi,
for the transfer function texture, I have setup :
gl.glTexParameteri(GL.GL_TEXTURE_1D, GL.GL_TEXTURE_WRAP_S, GL.GL_CLAMP);
gl.glTexParameteri(GL.GL_TEXTURE_1D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR);
gl.glTexParameteri(GL.GL_TEXTURE_1D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR);
gl.glTexImage1D(GL.GL_TEXTURE_1D, 0, GL.GL_RGBA, TF_TABLE_SIZE, 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, m_pColorTable);

mobeen
10-24-2011, 12:24 AM
OK. Have u tried rendering the tf directly?
Another thing that I want to ask is does you volume data contain 4bytes per voxel because u r using GL_RGBA? The only reason I can think of using this is to store precomputed gradient in RGB and density in A. Are u doing this?