Anyone know how to cube-map?

Started by
10 comments, last by hooded_paladin 20 years, 4 months ago
I have been looking all over the net for a cube-mapping tutorial, and all I have found are Developer demos using extensions, slide shows (?) that don''t help, and un-commented example source code in GLUT and DirectX. Does anyone know how to or can refer me to a good site? Maybe when I''m done I should write the ONLY TUTORIAL ABOUT IT ON THE NET! Pleeeze help.
______________________________Pretty guy for a white fly.
Advertisement
try http://nehe.gamedev.net
great site for both beginners and more advanced programmers. look in the tutorials section and you''ll find one that teaches you how to map textures onto a cube
No, not the same thing. That is texture-mapping, I know that! Cube mapping is a way of doing reflections (among other things) by specifying six views and using them to draw reflections on a mirrored object, like a sphere. Sorry, wrong idea.
______________________________Pretty guy for a white fly.
The only way I have seen cubemapping done is with an extension. Here''s some source code from NitroGLs code. You can go to his website at http://www.nitrogl.cjb.net

  // Uploads six images as a cube mapunsigned int TGA_UploadCube(char *right, char *left, char *top, char *bottom, char *front, char *back){	unsigned int TextureID;	TGA_t TGA_right, TGA_left, TGA_top, TGA_bottom, TGA_front, TGA_back;	if(!TGA_GetData(right, &TGA_right))	{		free(TGA_right.Data);		return 0;	}	if(!TGA_GetData(left, &TGA_left))	{		free(TGA_left.Data);		return 0;	}	if(!TGA_GetData(top, &TGA_top))	{		free(TGA_top.Data);		return 0;	}	if(!TGA_GetData(bottom, &TGA_bottom))	{		free(TGA_bottom.Data);		return 0;	}	if(!TGA_GetData(front, &TGA_front))	{		free(TGA_front.Data);		return 0;	}	if(!TGA_GetData(back, &TGA_back))	{		free(TGA_back.Data);		return 0;	}	glPixelStorei(GL_UNPACK_ALIGNMENT, 1);	glGenTextures(1, &TextureID);	glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, TextureID);	if(!IsExtensionSupported("GL_EXT_texture_edge_clamp"))	{		glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP);		glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP);	}	else	{		glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE_EXT);		glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE_EXT);	}	glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);	glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);	glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);	glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, 0, GL_RGB8, TGA_right.ImageSpec.Width, TGA_right.ImageSpec.Height, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, TGA_right.Data);	glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB, 0, GL_RGB8, TGA_left.ImageSpec.Width, TGA_left.ImageSpec.Height, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, TGA_left.Data);	glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB, 0, GL_RGB8, TGA_top.ImageSpec.Width, TGA_top.ImageSpec.Height, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, TGA_top.Data);	glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB, 0, GL_RGB8, TGA_bottom.ImageSpec.Width, TGA_bottom.ImageSpec.Height, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, TGA_bottom.Data);	glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB, 0, GL_RGB8, TGA_front.ImageSpec.Width, TGA_front.ImageSpec.Height, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, TGA_front.Data);	glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB, 0, GL_RGB8, TGA_back.ImageSpec.Width, TGA_back.ImageSpec.Height, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, TGA_back.Data);	free(TGA_right.Data);	free(TGA_left.Data);	free(TGA_top.Data);	free(TGA_bottom.Data);	free(TGA_front.Data);	free(TGA_back.Data);	return TextureID;}  
Thanks, I already got this answered from another post. I just got my real-time cube-mapped sphere into place, and now I just need a little more tinkering to make it work! I am excited- this is a neat effect and doesn''t run too slowly on my machine. Thanks to all (this post and others) that helped me.
______________________________Pretty guy for a white fly.
Thanks, I already got this answered from another post. I just got my real-time cube-mapped sphere into place, and now I just need a little more tinkering to make it work! I am excited- this is a neat effect and doesn''t run too slowly on my machine. Thanks to all (this post and others) that helped me.
______________________________Pretty guy for a white fly.
Oops stupid 56k modem...
______________________________Pretty guy for a white fly.
quote:Original post by WhatEver
The only way I have seen cubemapping done is with an extension.


Is there no way to impliment cube mapping without extensions? My graphics card doesn''t support the cube mapping extension, but I really want to have this feature in my program.
______________________________________________There are only 10 types of people in the world: Those who understand binary, and those who don't.
Sphere mapping should get the desired effect if your card doesn''t support cube mapping, although the quality isn''t quite as good. A quick google search turned up many results, including this Nehe tutorial:

http://nehe.gamedev.net/lesson.asp?index=05

Hope that helps.

----------------
Interesting quote deleted at request of owner
----------------Amusing quote deleted at request of owner
Another pre-cubemapping approach is dual paraboloid mapping. This avoids the singularity in sphere mapping.

This topic is closed to new replies.

Advertisement