PDA

View Full Version : Texturing Quadrics



11-04-2003, 09:26 AM
I am making a bunch of quadric spheres that need to be textured. The problem is that the texture sometimes rotates with the camera, sometimes it is upside down, and there is a huge mess. I am trying to bind a texture of a person's face onto a ball, so it is asymmetrical from top to bottom. I'm pretty sure some strange call to glTexEnvf or glEnable or glTexParamteri would fix it, but I couldn't find one that works. Can anyone please help me?

Obli
11-05-2003, 05:05 AM
Originally posted by while(fork()):
I am making a bunch of quadric spheres that need to be textured. The problem is that the texture sometimes rotates with the camera...
What?


I am trying to bind a texture of a person's face onto a ball, so it is asymmetrical from top to bottom. I'm pretty sure some strange call to glTexEnvf or glEnable or glTexParamteri would fix it, but I couldn't find one that works.
I don't see the problem. If your texture is a shot of the whole face, then there should be no need to call any sort of GL function. Just generate the texcoords and here you are.

I am pretty sure I didn't understand the problem.

11-06-2003, 02:09 PM
When I try to generate the texture coordinates, the front half of the face is the texture I want, but the back of the face is the same texture inverted. Basically, the front side of the sphere has a face and the back side has an upside-down face. I want to be able to cover the entire sphere with a single texture.

cg-hci_novice
11-07-2003, 05:23 PM
I think you may have to rotate prior to do this.

Here is an example from a solar system project that may help:

GLubyte * loadTexture (char *fileName, int width, int height, int depth)
{
GLubyte *raw_bitmap, *reversed_bitmap;
FILE *texFile;

int byteSize, textureSize;
byteSize = sizeof(GLubyte);
textureSize = width * height * depth * byteSize;

texFile = fopen(fileName, "rb");

if (texFile == NULL)
{
printf ("Texture %s not found\n", fileName);
exit(1);
}

raw_bitmap = (GLubyte *) malloc (textureSize);
reversed_bitmap = (GLubyte *) malloc (textureSize);

if ((raw_bitmap == NULL) | | (reversed_bitmap == NULL))
{
printf("Cannot allocate memory for texture %s\n", fileName);
fclose(texFile);
exit(1);
}

fread (raw_bitmap , width * height * depth, 1 , texFile );
fclose (texFile);

/* need to reverse the texture horizontally here */
/************************************************/

int i, j, k;

for (i=0; i<height;i++)
for (j=0; j<width*depth;j+=depth)
for (k=0;k<depth;k++)
reversed_bitmap[i*width*depth + (j+k)] =
raw_bitmap[(i+1)*width*depth-(j+depth)+k];


glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );

free (raw_bitmap);

return (reversed_bitmap);
}

Sorry, if that wasn't useful. Am learning. Good luck.

cg-hci_novice
11-07-2003, 05:28 PM
Let me know if you would like to see the draw code too.

11-08-2003, 07:27 AM
I fixed the problem. You have to make the top half of the texture the front and the bottom half the upside down of the back. Thank you for posting.

huntc
11-18-2003, 01:21 AM
I also learnt that when I generated a sphere, I also had to setup a camera angle. It turned out that my camera was positioned smack bang in the middle of the sphere I'd created, and I was effectively looking outward and through the bottom of the sphere! Everything thus appeared inverted.

The problem was easily rectified by creating a camera positioned back on the z plane. A transform would also have fixed the problem.