Jump to content
  • Advertisement
Sign in to follow this  
havythoai

OpenGL problem CSG in OpenGL using MFC ( SDI) ?

This topic is 3883 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Dear everybody, I got a problem that I don't know where to fix, I use MFC (SDI) for rendering. I execute CSG successfully, but the image looks like no depth. If I don't execute CSG, it's look like normal. here is the picture that has no CSG: http://upload.tinhco.net/thoai/csg3.JPG here is the picture that has CSG: http://upload.tinhco.net/thoai/csg4.JPG The code that has no CSG, it render like normal,(there's depth)
Quote:
void CMaSimView:Render() { glEnable(GL_DEPTH_TEST); RenderCutter(); RenderObject(); glDisable(GL_DEPTH_TEST); }
If I replace the codes above with the CSG code below, then it looks like no depth
Quote:
void CMaSimView:Render() { glEnable(GL_DEPTH_TEST); glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); glCullFace(GL_FRONT); /* controls which face of a to use */ RenderCutter(); /* draw a face of a into depth buffer */ /* use stencil plane to find parts of a in b */ glDepthMask(GL_FALSE); glEnable(GL_STENCIL_TEST); glStencilFunc(GL_ALWAYS, 0, 0); glStencilOp(GL_KEEP, GL_KEEP, GL_INCR); glCullFace(GL_BACK); RenderObject(); /* increment the stencil where the front face of b is drawn */ glStencilOp(GL_KEEP, GL_KEEP, GL_DECR); glCullFace(GL_FRONT); RenderObject(); /* decrement the stencil buffer where the back face of b is drawn */ glDepthMask(GL_TRUE); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glStencilFunc(GL_NOTEQUAL, 0, 1); glDisable(GL_DEPTH_TEST); glCullFace(GL_FRONT); RenderCutter(); //////////////////// glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); glEnable(GL_DEPTH_TEST); glDisable(GL_STENCIL_TEST); glDepthFunc(GL_ALWAYS); RenderObject(); /* draw the front face of a, fixing the depth buffer */ glDepthFunc(GL_LESS); ///////////////// glEnable(GL_DEPTH_TEST); glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); glCullFace(GL_BACK); /* controls which face of a to use */ RenderObject(); /* draw a face of a into depth buffer */ /* use stencil plane to find parts of a in b */ glDepthMask(GL_FALSE); glEnable(GL_STENCIL_TEST); glStencilFunc(GL_ALWAYS, 0, 0); glStencilOp(GL_KEEP, GL_KEEP, GL_INCR); glCullFace(GL_BACK); RenderCutter(); /* increment the stencil where the front face of b is drawn */ glStencilOp(GL_KEEP, GL_KEEP, GL_DECR); glCullFace(GL_FRONT); RenderCutter(); /* decrement the stencil buffer where the back face of b is drawn */ glDepthMask(GL_TRUE); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glStencilFunc(GL_EQUAL, 0, 1); glDisable(GL_DEPTH_TEST); glCullFace(GL_BACK); RenderObject(); glDisable(GL_STENCIL_TEST); }
Is there any wrong with my function SetupPixelFormat in MFC
Quote:
bool CMaSimView::SetupPixelFormat() { static PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, PFD_TYPE_RGBA, 24, // 24-bit color depth 0, 0, 0, 0, 0, 0, // color bits ignored 0, // no alpha buffer 0, // shift bit ignored 0, // no accumulation buffer 0, 0, 0, 0, // accumulation bits ignored 16, // 16-bit z-buffer 1, // 1-bit stencil buffer 0, // no auxiliary buffer PFD_MAIN_PLANE, // main layer 0, // reserved 0, 0, 0 // layer masks ignored }; .... return true; }
here is my InitializeOpenGL()
Quote:
bool CMaSimView::InitializeOpenGL() { //Get a DC for the Client Area m_pDC = new CClientDC(this) //Failure to Get DC if(m_pDC == NULL) { MessageBox("Error Obtaining DC"); return FALSE; } //Failure to set the pixel format if(!SetupPixelFormat()) { return FALSE; } //Create Rendering Context m_hRC = ::wglCreateContext (m_pDC->GetSafeHdc ()); //Failure to Create Rendering Context if(m_hRC == 0) { MessageBox("Error Creating RC"); return FALSE; } //Make the RC Current if(::wglMakeCurrent (m_pDC->GetSafeHdc (), m_hRC)==FALSE) { MessageBox("Error making RC Current"); return FALSE; } //Specify Black as the clear color ::glClearColor(0.0f,0.0f,0.0f,0.0f); ::glEnable(GL_CULL_FACE); //Specify the back of the buffer as clear depth ::glClearDepth(1.0f); //Enable Depth Testing ::glEnable(GL_DEPTH_TEST); return true; }
I have to do what to fix this problem, please help me http://upload.tinhco.net/thoai/csg4.JPG

Share this post


Link to post
Share on other sites
Advertisement
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!