Hi, guys
I want to implement a normalization cubemap which transforms the arbitary directional vectors into its normal form, and
I have studied the following reference sources:
paul's projects:
http://www.paulsprojects.net/tutoria...implebump.html
openGL cubemap specification:
http://oss.sgi.com/projects/ogl-samp...e_cube_map.txt
The problem is that I don't understand the following code snippet from paul's project for the construction of normalization cubemap:
normalization cubemap:
unsigned char * data=new unsigned char[32*32*3];
if(!data)
{
printf("Unable to allocate memory for texture data for cube map\n");
return false;
}
//some useful variables
int size=32;
float offset=0.5f;
float halfSize=16.0f;
VECTOR3D tempVector;
unsigned char * bytePtr;
//positive x
bytePtr=data;
for(int j=0; j<size; j++)
{
for(int i=0; i<size; i++)
{
tempVector.SetX(halfSize);
tempVector.SetY(-(j+offset-halfSize));
tempVector.SetZ(-(i+offset-halfSize));
tempVector.Normalize();
tempVector.PackTo01();
bytePtr[0]=(unsigned char)(tempVector.GetX()*255);
bytePtr[1]=(unsigned char)(tempVector.GetY()*255);
bytePtr[2]=(unsigned char)(tempVector.GetZ()*255);
bytePtr+=3;
}
}
glTexImage2D( GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB,
0, GL_RGBA8, 32, 32, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
I have two questions here:
1. We all know the first element of array which is supplied as texture data corresponds to the lower-left corner of texture image, but in this
case the for loop just start by adding the directional vector with x > 0 , y > 0 and z > 0 to the first element of array, and the direction pointed
by that vector is not the lower-left corner if when we think the face of cubemap as texture image and view it from positive x-axis to the
negative x-axis. Is this code error or do I misunderstand something?
2. Why do we need to add the offset to change the components of directional vector?
I got stuck for this problem about two days, any suggestions or reference source will be appreciated.