PDA

View Full Version : Object on the box



phuongmaruko
12-13-2010, 02:12 AM
Hi all!

I drew a room by drawing a cube (funtion drawRoom()). this cube I didn't draw the front face in order to see the inner side. then I drew a smaller cube on the room (function drawcube())but it didn't appear. exactly they couldn't appear at the same time. when i removed drawRoom(), the cube appeared.

Anyone can help me! how can I make them appear together.

ZbuffeR
12-13-2010, 02:52 AM
Are you sure depth testing is enabled ?
Are sure the small cube is inside the big one, and not behind ?

phuongmaruko
12-13-2010, 06:55 AM
yeah I'm completely sure.
and moreover, I have just drawn the front face of the room, it didn't appear as well even though I don't use GL_CULL_FACE

ZbuffeR
12-13-2010, 07:06 AM
Does this change if you draw front face last ?
Then you have no depth test. Do you require a depth buffer, when asking for a GL context ?

phuongmaruko
12-13-2010, 07:25 AM
can you give me your email then i can show you more detail

phuongmaruko
12-13-2010, 07:56 AM
if I draw the front face last, and disable depth test, the screen is full with the color that I set to front face, nothing i can see except for that color

ZbuffeR
12-13-2010, 08:52 AM
You will have to provide your code, it sound you are doing several things wrong.


Try to post the smallest compilable code that still show the problem, and do not forget to enclose it in
... blocks

phuongmaruko
12-13-2010, 09:12 AM
// main.cpp

#include <windows.h>
#include "MyObject.h"

#pragma comment (lib,"opengl32.lib")
#pragma comment (lib,"glaux.lib")
#pragma comment (lib,"glu32.lib")
#pragma comment (lib,"glut32.lib")


MyObject MO;
COGLTexture *TextureList = new COGLTexture[2];
void InitTextures(void)
{
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);

TextureList[0].LoadFromFile("floor.bmp");
TextureList[1].LoadFromFile("tex2.bmp");

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

}


void Display(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

glTranslatef(0.0f,0.0f,-35.0f);

MO.drawRoom(TextureList);
glFlush(); //Finish rendering
glutSwapBuffers();
}

void Reshape(int x, int y)
{
if (y == 0 || x == 0) return; //Nothing is visible then, so return
//Set a new projection matrix
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//Angle of view:40 degrees
//Near clipping plane distance: 0.5
//Far clipping plane distance: 20.0
gluPerspective(40.0,(GLdouble)x/(GLdouble)y,0.0,20.0);
glMatrixMode(GL_MODELVIEW);
glViewport(0,0,x,y); //Use the whole window for rendering
}
int main (int argc, char **argv)
{
//Initialize GLUT
glutInit(&amp;argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB |GLUT_DEPTH);
glutInitWindowSize(1500,900);
//Create a window with rendering context and everything else we need
glutCreateWindow("Intro");
glClearColor(0.0,0.0,0.0,0.0);

glEnable(GL_DEPTH_TEST);
InitTextures();

glutDisplayFunc(Display);
glutReshapeFunc(Reshape);
glutMainLoop();

return 0;
}



then here is MyObject.cpp


#include "MyObject.h"
#include <iostream>
#pragma comment (lib,"opengl32.lib")
#pragma comment (lib,"glaux.lib")
#pragma comment (lib,"glu32.lib")
#pragma comment (lib,"glut32.lib")

void MyObject::drawRoom(COGLTexture *TextureList)
{
glEnable(GL_TEXTURE_2D);
// floor
TextureList[0].SetActive();
glBegin(GL_QUADS);
glTexCoord2f(1.0,0.0); glVertex3f(-20.0f,-12.0f,-14.0f); // Back Left
glTexCoord2f(1.0,1.0); glVertex3f(-20.0f,-12.0f, 14.0f); // Front Left
glTexCoord2f(0.0,1.0); glVertex3f( 20.0f,-12.0f, 14.0f); // Front Right
glTexCoord2f(0.0,0.0); glVertex3f( 20.0f,-12.0f,-14.0f); // Back Right
glEnd();

// ceiling
TextureList[1].SetActive();
glBegin(GL_QUADS);
glTexCoord2f(1.0,1.0); glVertex3f(-20.0f, 12.0f, 14.0f); // Front Left
glTexCoord2f(1.0,0.0); glVertex3f(-20.0f, 12.0f,-14.0f); // Back Left
glTexCoord2f(0.0,0.0); glVertex3f( 20.0f, 12.0f,-14.0f); // Back Right
glTexCoord2f(0.0,1.0); glVertex3f( 20.0f, 12.0f, 14.0f); // Front Right
glEnd();
glDisable(GL_TEXTURE_2D);

glBegin(GL_QUADS);
glColor3f(1.0, 0.95, 0.5);


glVertex3f(-20.0f, 12.0f,-14.0f); // Top Left
glVertex3f(-20.0f,-12.0f,-14.0f); // Bottom Left
glVertex3f( 20.0f,-12.0f,-14.0f); // Bottom Right
glVertex3f( 20.0f, 12.0f,-14.0f); // Top Right

glColor3f(0.93,0.85,0.45);

// Top Left

glVertex3f(-20.0f, 12.0f, 14.0f); // Top Front
glVertex3f(-20.0f,-12.0f, 14.0f); // Bottom Front
glVertex3f(-20.0f,-12.0f,-14.0f); // Bottom Back
glVertex3f(-20.0f, 12.0f,-14.0f); // Top Back

glVertex3f( 20.0f, 12.0f,-14.0f); // Top Back
glVertex3f( 20.0f,-12.0f,-14.0f); // Bottom Back
glVertex3f( 20.0f,-12.0f, 14.0f); // Bottom Front
glVertex3f( 20.0f, 12.0f, 14.0f); // Top Front

glVertex3f( 20.0f, 12.0f, 14.0f); // Top Right
glVertex3f( 20.0f,-12.0f, 14.0f); // Bottom Right
glVertex3f(-20.0f,-12.0f, 14.0f); // Bottom Left
glVertex3f(-20.0f, 12.0f, 14.0f);
glEnd();
// smaller face
glBegin(GL_QUADS);
glColor3f(0.0,0.0,1.0);
glVertex3f(-10.0f, 6.0f,-7.0f); // Top Left
glVertex3f(-10.0f,-6.0f,-7.0f); // Bottom Left
glVertex3f( 10.0f,-6.0f,-7.0f); // Bottom Right
glVertex3f( 10.0f, 6.0f,-7.0f);
glEnd();

}

MaxH
12-13-2010, 06:32 PM
Your problems lie in the call to gluPerspective in your reshape function. The last 2 parameters are supposed to specify the distance from the camera to the front and back clipping planes. You set the front value to 0.0. If you read the documention you'll see that this value must always be positive (i.e. greater than zero, zero causes undefined results). Set it to 1.0 and run your code. You'll probably get a black screen. This is because your back clipping plane is set to 20.0, but all the vertices on the back face of your cube have been translated way beyond to 20 units (to -14 + -35 = -49). Your smaller quad has been translated to -42 (= -7 + -35). So none of your quad vertices are in the viewing volume. Simplest fix is to set the back clipping plane value to -50 (out of the viewing volume).

Perhaps you thought that a rear clipping plane distance of 20 would be sufficient since the back wall of your room has vertices at -14? You must also remember that you translate the entire room by -35 in Z, which moves that back wall to Z = -49.