PDA

View Full Version : depth-mapped cube maps



Siliconfig
06-06-2004, 04:59 AM
Hi there.

I'm trying to make a depth-mapped cube map but it doesn't work well.
Here's some part of code:


/* cube map setup part... */

glEnable(GL_TEXTURE_CUBE_MAP_ARB);
glGenTextures(1, &g_DepthCubeMap);
glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, g_DepthCubeMap);
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE_SGIS);
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE_SGIS);
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE_SGIS);
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

for (int face=0; face<6; face++)
{
glTexImage2D(g_RenderTarget[face], 0, GL_DEPTH_COMPONENT, CUBE_MAP_SIZE,
CUBE_MAP_SIZE, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL);
}

glDisable(GL_TEXTURE_CUBE_MAP_ARB);

----------------------------------------------------

/* cube map generation part... */

glEnable(GL_TEXTURE_CUBE_MAP_ARB);
glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, g_DepthCubeMap);
glCopyTexSubImage2D(g_RenderTarget[face], 0, 0, 0, 0, 0, CUBE_MAP_SIZE, CUBE_MAP_SIZE);
glDisable(GL_TEXTURE_CUBE_MAP_ARB);I heard that GL_DEPTH_COMPONENT format is available for the GL_TEXTURE_CUBE_MAP_ARB,
but looks like both glTexImage2D() and glCopyTexSubImage2D don't support it.
Anyone give me a hint please?

thx.

Jan
06-06-2004, 05:32 AM
AFAIK that is not possible. GL_DEPTH_COMPONENT can only be used for 2D textures, because it uses the r-texture-coordinate for some comparison-stuff, which makes it impossible to use it with cubemaps (which need the r-component for texture-accesses).

Someone told me, the solution would be to use float-textures (cubemaps) and do the depth-comparison manually in a fragment program. However this is still a pain in the butt, since for rendering to float textures you need to use pbuffers, etc.

Thatīs the reason, why i didnīt do that yet, still waiting for the EXT_render_target extension to make my life easier.

Jan.

Siliconfig
06-06-2004, 05:53 AM
Oh, GL_DEPTH_COMPONENT is only for 2D textures!?
Sigh... :(

And thx for your info.

NitroGL
06-06-2004, 09:37 AM
Which is really kind of stupid, since the R coord stuff should be a part of the shadow extension, not the texture extension. Since the depth texture extension itself doesn't do the actual compare.

idr
06-14-2004, 07:48 AM
I see nothing in the OpenGL 1.5 spec in either the section on TexImage2D (page 145 of the PDF) or the section on depth component textures (page 156 of the PDF) to indicate that depth textures cannot be used with cubic texturing. That said,

I have a couple questions.

Are any of the GL calls in your code generating an error (returned by glGetError)? Are you trying to use the cubic texture for shadow operations or normal texturing? What is the behavior you are seeing? "Doesn't work well" is pretty vague. :) Have you tried querying the textures's parameters to see what the internal format is (i.e., query GL_DEPTH_BITS)? Are you sure the texture has non-zero data? You don't say if the texture is copied from your depth buffer, read from disk, etc.

Jan
06-14-2004, 08:48 AM
Originally posted by idr:
I see nothing in the OpenGL 1.5 spec in either the section on TexImage2D (page 145 of the PDF) or the section on depth component textures (page 156 of the PDF) to indicate that depth textures cannot be used with cubic texturing.
[/LIST]Take a look at the spec of ARB_depth_texture:



(5) What about 1D, 3D and cube maps textures? Should depth textures be supported?

RESOLVED: For 1D textures, yes, for orthogonality. For 3D and cube map
textures, no. In both cases, the R coordinate that would be ordinarily
be used for a shadow comparison is needed for texture lookup and won't
contain a useful value. In theory, the shadow functionality could be
extended to provide useful behavior for such targets, but this
enhancement is left to a future extension.
Jan.

evanGLizr
06-14-2004, 08:49 AM
Originally posted by idr:
I see nothing in the OpenGL 1.5 spec in either the section on TexImage2D (page 145 of the PDF) or the section on depth component textures (page 156 of the PDF) to indicate that depth textures cannot be used with cubic texturing.

Hummmmm ...


(5) What about 1D, 3D and cube maps textures? Should depth textures
be supported?

RESOLVED: For 1D textures, yes, for orthogonality. For 3D and cube map
textures, no. In both cases, the R coordinate that would be ordinarily
be used for a shadow comparison is needed for texture lookup and won't
contain a useful value. In theory, the shadow functionality could be
extended to provide useful behavior for such targets, but this
enhancement is left to a future extension.
From <a href="http://oss.sgi.com/projects/ogl-sample/registry/ARB/depth_texture.txt" target="_blank">GL_ARB_depth_texture
</a> spec

and


Textures with a base internal format of DEPTH COMPONENT are supported by
texture image specification commands only if target is TEXTURE 1D, TEXTURE 2D,
PROXY TEXTURE 1D or PROXY TEXTURE 2D. Using this format in conjunction
with any other target will result in an INVALID OPERATION error.
(from OpenGL 1.5 spec, pg 127)

Jan
06-14-2004, 10:43 AM
You were a minute too late (literaly) ;-)

Jan.

evanGLizr
06-14-2004, 12:09 PM
Originally posted by Jan:
You were a minute too late (literaly) ;-)

Jan.Because I wrote more text :-P (I saw your comment after posting mine, I decided to leave mine because it adds the relevant part from the OpenGL 1.5 spec :) ).

idr
06-17-2004, 03:29 PM
Ah. So, then the calls to glTexImage2D should generate an INVALID_OPERATION error. The moral of that story is, if your code isn't working, add calls to glGetError. :)