Advertisement

can't make a simple cube

Started by November 06, 2000 08:10 PM
4 comments, last by TapeWorm 24 years ago
// no clue on how to use z-buffering // someone please help me #include windows.h #include gl/gl.h // Function Declarations LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ); VOID EnableOpenGL( HWND hWnd, HDC * hDC, HGLRC * hRC ); VOID DisableOpenGL( HWND hWnd, HDC hDC, HGLRC hRC ); int LastTime,Ticks; // WinMain int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow ) { WNDCLASS wc; HWND hWnd; HDC hDC; HGLRC hRC; MSG msg; BOOL bQuit = FALSE; float theta = 0.0f; // register window class wc.style = CS_OWNDC; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hbrBackground = (HBRUSH)GetStockObject( BLACK_BRUSH ); wc.lpszMenuName = NULL; wc.lpszClassName = "GLSample"; RegisterClass( &wc ); // create main window hWnd = CreateWindow( "GLSample", "OpenGL Sample", WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE, 0, 0, 256, 256, NULL, NULL, hInstance, NULL ); // enable OpenGL for the window EnableOpenGL( hWnd, &hDC, &hRC ); // program main loop while ( !bQuit ) { // check for messages if ( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) { // handle or dispatch messages if ( msg.message == WM_QUIT ) { bQuit = TRUE; } else { TranslateMessage( &msg ); DispatchMessage( &msg ); } } else { // OpenGL animation code goes here glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); glClear(GL_COLOR_BUFFER_BIT); glPushMatrix(); glRotatef( theta, 0.3, 0.0f, 1.0f ); glBegin( GL_QUADS ); // top glColor3f( 1, 0, 0 ); glVertex3f(-.5,.5,.5); glVertex3f(.5,.5,.5); glVertex3f(.5,-.5,.5); glVertex3f(-.5,-.5,.5); //bottom glColor3f( 1, 0, 1 ); glVertex3f(-.5,.5,-.5); glVertex3f(.5,.5,-.5); glVertex3f(.5,-.5,-.5); glVertex3f(-.5,-.5,-.5); //front glColor3f( 1, 0, 0 ); glVertex3f(-.5,-.5,.5); glVertex3f(.5,-.5,.5); glVertex3f(.5,-.5,-.5); glVertex3f(-.5,-.5,-.5); //back glColor3f( 1, 1, 0 ); glVertex3f(.5,.5,.5); glVertex3f(-.5,.5,.5); glVertex3f(-.5,.5,-.5); glVertex3f(.5,.5,-.5); //left glColor3f( 0, 1, 1 ); glVertex3f(-.5,-.5,.5); glVertex3f(-.5,.5,.5); glVertex3f(-.5,.5,-.5); glVertex3f(-.5,-.5,-.5); //right glColor3f( 0, 1, 0 ); glVertex3f(.5,-.5,.5); glVertex3f(.5,.5,.5); glVertex3f(.5,.5,-.5); glVertex3f(.5,-.5,-.5); glEnd(); glPopMatrix(); SwapBuffers( hDC ); theta += 1.0f; } } // shutdown OpenGL DisableOpenGL( hWnd, hDC, hRC ); // destroy the window explicitly DestroyWindow( hWnd ); return msg.wParam; } // Window Procedure LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) { switch ( message ) { case WM_CREATE: return 0; case WM_CLOSE: PostQuitMessage( 0 ); return 0; case WM_DESTROY: return 0; case WM_KEYDOWN: switch ( wParam ) { case VK_ESCAPE: PostQuitMessage( 0 ); return 0; } return 0; default: return DefWindowProc( hWnd, message, wParam, lParam ); } } // Enable OpenGL VOID EnableOpenGL( HWND hWnd, HDC * hDC, HGLRC * hRC ) { glEnable(GL_DEPTH_TEST); PIXELFORMATDESCRIPTOR pfd; int iFormat; // get the device context (DC) *hDC = GetDC( hWnd ); // set the pixel format for the DC ZeroMemory( &pfd, sizeof( pfd ) ); pfd.nSize = sizeof( pfd ); pfd.nVersion = 1; pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; pfd.iPixelType = PFD_TYPE_RGBA; pfd.cColorBits = 24; pfd.cDepthBits = 16; pfd.iLayerType = PFD_MAIN_PLANE; iFormat = ChoosePixelFormat( *hDC, &pfd ); SetPixelFormat( *hDC, iFormat, &pfd ); // create and enable the render context (RC) *hRC = wglCreateContext( *hDC ); wglMakeCurrent( *hDC, *hRC ); } // Disable OpenGL VOID DisableOpenGL( HWND hWnd, HDC hDC, HGLRC hRC ) { wglMakeCurrent( NULL, NULL ); wglDeleteContext( hRC ); ReleaseDC( hWnd, hDC ); } Edited by - TapeWorm on 11/6/00 8:15:59 PM Edited by - TapeWorm on 11/6/00 10:19:40 PM
I didn''t see any viewport creation. That could be the problem, you also might want to translate your cube -5.0 into the Z-axis or something.... NeHe has a tutorial on how to make a rotating cube (and pyramid!). Try comparing code with his (nehe.gamdev.net)

Hope this helps!
~Dan~
Advertisement
everything works fine
but the zbuffering doesn''t work right
I had the same problem. I couldn''t find the problem(my code was almost identical). I just said heck with it and edited someone else''s code
Maybe it has something to do with the fact you are enabling depth testing before you even initialize OpenGL.
thanx alot
it works

This topic is closed to new replies.

Advertisement