Hey there.
I took a look into a few tutorials on how to set up Opengl manually.
Mostly I followed this tut with some help by Humus Framework (Framework 3).
I got this far :
bool OpenGLApp::initAPI()
{
// Before calling this function a window class was already registered
if (width < 640)
width = 640;
if (height < 480)
height = 480;
int monitorCounter = screen;
EnumDisplayMonitors(NULL, NULL, MonitorEnumProc, (LPARAM) &monitorCounter);
int x, y;
x = monInfo.rcMonitor.left;
y = monInfo.rcMonitor.top;
#ifdef DEBUG // For testing only
std::ofstream myfile ("Info.txt");
if (myfile.is_open())
{
myfile << monInfo.rcMonitor.left << "
" << monInfo.rcMonitor.top << "
";
myfile << monInfo.rcMonitor.right << "
" << monInfo.rcMonitor.bottom << "
";
myfile.close();
}
#endif
DWORD flags = WS_CLIPCHILDREN | WS_CLIPSIBLINGS; ///< Set only one render-target
if (Fullscreen)
{
flags = WS_POPUP;
x = 0;
y = 0;
width = monInfo.rcMonitor.right;
height = monInfo.rcMonitor.bottom;
// change resolution before the window is created
DEVMODE dmode;
memset(&dmode, 0, sizeof(DEVMODE));// clear all memory
dmode.dmSize=sizeof(DEVMODE); // it's required to specify the size of this struct
dmode.dmPelsWidth = width; // width and height of desired resolution
dmode.dmPelsHeight = height;
dmode.dmBitsPerPel = cBits; // color depth; 8/16/32 bit
dmode.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
// change resolution, if possible
if (ChangeDisplaySettings(&dmode, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
{
// if not... failed to change resolution
flags = WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_OVERLAPPEDWINDOW;
MessageBox(hWnd, "No Fullscreen mode is avaible.
Back to windowed",
"Error", MB_OK);
}
}
if (!Fullscreen)
{
flags |= WS_OVERLAPPEDWINDOW;
}
// create main window
hWnd = CreateWindow(
"GLEngine", getTitle(),
flags,
x, y, getWidth(), getHeight(),
HWND_DESKTOP, NULL, hInstance, NULL );
// number of available formats
int indexPixelFormat = 0;
PIXELFORMATDESCRIPTOR pfd =
{
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA, cBits,
0,0,0,0,0,0,0,0,0,0,0,0,0, // useles parameters
depthBits, stencilBits,
0, PFD_MAIN_PLANE,0,0,0,0
};
hDC = GetDC( hWnd );
if (hDC == 0)
{
MessageBox(hWnd, "Failed to Get the Window Device Context",
"Device Context Error", MB_OK);
return false;
}
// Choose the closest pixel format available
indexPixelFormat = ChoosePixelFormat(hDC, &pfd);
// Set the pixel format for the provided window DC
SetPixelFormat(hDC, indexPixelFormat, &pfd);
// create and enable the render context (RC)
glContext = wglCreateContext( hDC );
if (glContext == 0)
{
MessageBox(hWnd, "Failed to Create the OpenGL Rendering Context",
"OpenGL Rendering Context Error", MB_OK);
return false;
}
wglMakeCurrent( hDC, glContext );
glEnable(GL_DEPTH_TEST);
return true;
}
Than I set up the viewing plane with :
void Application::setView()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0, (double)width/(double)height, 0.1, 50000.0);
glMatrixMode(GL_MODELVIEW);
}
And finaly I try draw things :
void drawFrame()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
static float t = -2;
//glRotatef(t,0,1,0);
glTranslatef(0,0,t);
glBegin(GL_QUADS);
glNormal3f(0.0, 1.0f, 0.0f);
glColor3f(1.0,0.0,0.0); glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 0.0f, 0.0f);
glVertex3f(1.0f, -1.0f, 0.0f);
glColor3f(0.0,1.0,0.0); glVertex3f(0.0f, -1.0f, 0.0f);
glEnd();
t+=0.01;
if (t > 2)
{
t = -2;
}
glFlush();
SwapBuffers(hDC);
}
I noticed that the translation in z axis doesn’t work really.
When t is between -1 and 1 The polygon is visible , but when it’s out of that range it disappears.
Plus there is no zoom effect when the polygon is visible and t is changing.
It’s somehow as if opengl would draw like when you use the glOrtho for only that range for z-axis : (
Thanks in advance.