hi folks.
i must have an error in reasoning about the coord stuff in my scene.
this scene simply consists of a reflecting sphere that should be placed at the origin (0.0f,0.0f,0.0f) but since i wanted to move through the scene with my camera, i used xtrans, ytrans and ztrans instead, like i learned from nehe.gamedev.net
then next to the sphere should be a cube which should be reflected by the sphere. but somehow i don’t get correct reflections.
here’s my code:
void initCubePos(int cpos, GLfloat xtrans, GLfloat ytrans, GLfloat ztrans)
{
switch (cpos)
{
case 0:
{
glLoadIdentity();
glRotatef(-90.0f, 1.0f, 0.0f, 0.0f);
glRotatef( 90.0f, 0.0f, 0.0f, 1.0f);
glRotatef(-90.0f, 1.0f, 0.0f, 0.0f);
glTranslatef(xtrans, ytrans, ztrans);
}
case 1:
{
glLoadIdentity();
glRotatef(-90.0f, 1.0f, 0.0f, 0.0f);
glRotatef(-90.0f, 0.0f, 0.0f, 1.0f);
glRotatef(-90.0f, 1.0f, 0.0f, 0.0f);
glTranslatef(xtrans, ytrans, ztrans);
}
case 2:
{
glLoadIdentity();
glRotatef(-90.0f, 1.0f, 0.0f, 0.0f);
glTranslatef(xtrans, ytrans, ztrans);
}
case 3:
{
glLoadIdentity();
glRotatef( 90.0f, 1.0f, 0.0f, 0.0f);
glTranslatef(xtrans, ytrans, ztrans);
}
case 4:
{
glLoadIdentity();
glRotatef(180.0f, 1.0f, 0.0f, 0.0f);
glTranslatef(xtrans, ytrans, ztrans);
}
case 5:
{
glLoadIdentity();
glRotatef(180.0f, 1.0f, 0.0f, 0.0f);
glTranslatef(xtrans, ytrans, ztrans);
}
}
}
int DrawGLScene(GLvoid)
{
GLfloat xtrans = -xpos;
GLfloat ztrans = -zpos;
GLfloat ytrans = -0.25f;
GLfloat sceneroty = 360.0f - ymrot;
GLUquadricObj* quadric = gluNewQuadric();
glMatrixMode(GL_MODELVIEW);
for (int i=0; i<6; i++)
{
// init camera
initCubePos(i, xtrans, ytrans, ztrans);
// render scene without sphere
glClear(GL_COLOR_BUFFER_BIT);
glClear(GL_DEPTH_BUFFER_BIT);
glTranslatef(sp_pos[0], sp_pos[1], sp_pos[2]);
DrawGLCube();
glBindTexture(faceTarget[i], texsphere);
glCopyTexSubImage2D(faceTarget[i], 0, 0, 0, 0, 0, 256, 256);
}
glLoadIdentity();
// set up camera at viewing position
glTranslatef(xtrans, ytrans, ztrans-10.0f);
glClear(GL_COLOR_BUFFER_BIT);
glClear(GL_DEPTH_BUFFER_BIT);
// render scene with sphere
glTranslatef(sp_pos[0], sp_pos[1], sp_pos[2]);
DrawGLCube();
glLoadIdentity();
glBindTexture(GL_TEXTURE_CUBE_MAP_EXT, texsphere);
glEnable(GL_TEXTURE_CUBE_MAP_EXT);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glEnable(GL_TEXTURE_GEN_R);
glRotatef(sceneroty, 0, 1.0f, 0);
glPushMatrix();
glTranslatef(xtrans, ytrans, ztrans-10.0f);
glRotatef(xrot, 1.0f, 0.0f, 0.0f);
glRotatef(yrot, 1.0f, 0.0f, 0.0f);
gluSphere(quadric, 2.0f, 128, 128);
glDisable(GL_TEXTURE_CUBE_MAP_EXT);
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glDisable(GL_TEXTURE_GEN_R);
glPopMatrix();
gluDeleteQuadric(quadric);
xrot+=xspeed;
yrot+=yspeed;
return TRUE;
}
i know that the code after the for-while is a bit chaotic, which is because i did some experimenting and got confused about when i have to use glLoadIdentity() and glTranslatef(…).
I hope i was able to explain what i wanted to achieve.
any ideas what i have to do?
thanx