Skip to main content
GameDev.net gamedev.net
🔒 Locked

weird rotation

Started by Infuscare Jul 11, 2003 at 4:32 PM 4 replies 350+ views
Original Post
Infuscare
Infuscare
in this simple program to just make a pyramid rotate, I get this weird sort of semi-transparency when it rotates... I''m not sure whether its because it actually becomes transparent or if its because one or more of the sides disappear temporarily... It only does that when I set the coordinates for the figures. When I use the coordinates from the NeHe tuts, it works fine, I don''t get it... some1 help me? _________________________________________ "Why, why why does everyone ask ''''why'''' when ''''how'''' is so much more fun" -Spawn 1997
___________"You're just jelous because the voices only talk to me"
Infuscare
Infuscare
I just edited the default program for the dev cpp new file...


#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);


/**************************
* 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 | GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_PROJECTION);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix ();
glDisable(GL_CULL_FACE);
glRotatef (theta, 0.1f, 0.0f, 0.1f);
glBegin (GL_TRIANGLES);

glColor3f (1.0f, 0.0f, 0.0f); glVertex3f (0.0f, 1.0f, 0.0f);
glColor3f (0.0f, 1.0f, 0.0f); glVertex3f (0.87f, -0.5f, 0.0f);
glColor3f (1.0f, 0.0f,1.0f); glVertex3f (-0.87f, -0.5f, 0.0f);
glColor3f (1.0f, 0.0f,1.0f); glVertex3f (-0.87f, -0.5f, 0.0f);
glColor3f (0.0f, 1.0f, 0.0f); glVertex3f (0.87f, -0.5f, 0.0f);
glColor3f (0.0f, 0.0f, 1.0f); glVertex3f (0.0f, 0.25f, 1.0f);
glColor3f (0.0f, 0.0f, 1.0f); glVertex3f (0.0f, 0.25f, 1.0f);
glColor3f (0.0f, 1.0f, 0.0f); glVertex3f (0.87f, -0.5f, 0.0f);
glColor3f (1.0f, 0.0f, 0.0f); glVertex3f (0.0f, 1.0f, 0.0f);
glColor3f (1.0f, 0.0f,1.0f); glVertex3f (-0.87f, -0.5f, 0.0f);
glColor3f (1.0f, 0.0f, 0.0f); glVertex3f (0.0f, 1.0f, 0.0f);
glColor3f (0.0f, 0.0f, 1.0f); glVertex3f (0.0f, 0.25f, 1.0f);


glEnd ();
glPopMatrix ();

SwapBuffers (hDC);

theta += 1.0f;
Sleep (1);
}
}

/* 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)
{
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 - Infuscare on July 11, 2003 5:33:56 PM]
___________"You're just jelous because the voices only talk to me"
Trienco
Trienco
where did you get this code? because it reminds me of some really terrible tutorials someone posted here...

glMatrixMode(GL_PROJECTION);
glMatrixMode(GL_MODELVIEW);

whats to point in changing the mode to projection, not doing anything and changing back to modelview? thats like someone walking to the door and opening and closing it for no reason.

glPushMatrix ();

usually good, but youre not doing anything else, so its also pointless.

glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
glDisable(GL_CULL_FACE);

do this once when you init opengl (backface if you really need to change it, but you dont)

glPopMatrix ();

together with push its pointless.. youre not doing anything with the restored matrix and in the next step its overwritten with the identity anyway.

numbers are giving me a headache, so id rather check it on paper.
edit: ok.. not quite the orientation i would want to specify the points, but looks ok.

[edited by - Trienco on July 12, 2003 3:14:57 AM]
f@dzhttp://festini.device-zero.de
angry
angry
I would try Luke''s suggestion, glEnable(GL_DEPTH_TEST); after you have enabled your render context.
Infuscare
Infuscare
excellent, thanks all
___________"You're just jelous because the voices only talk to me"

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.