0

Hello

I already posted this on opengl.org, but nobody seems to have a solution.
Basically I set up Opengl and when I want to draw 3D or say I want to use the z-axis by translating in this dimension, it doesn't have any effect.
What I can do, is moving my view in x and y axis, but not z.

I coded this with this
Here is my code :

(code is given chronologically)

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
				   LPSTR lpCmdLine, int iCmdShow)
{

        WNDCLASS wincl;
	HWND hWnd;
	MSG msg;

        wincl.hInstance = hInstance;
	wincl.lpszClassName = "GLEngine";
	wincl.lpfnWndProc = WndProc;
	wincl.style = 0;
	wincl.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MAINICON));
	wincl.hCursor = LoadCursor(NULL, IDI_APPLICATION);
	wincl.lpszMenuName = NULL;
	wincl.cbClsExtra = 0;
	wincl.cbWndExtra = 0;
	wincl.hbrBackground = NULL;
	if (!RegisterClass(&wincl)) return 0;


    app->setInstance(hInstance);

    if (!app->initAPI()) return 0;

    bool done = false;

    app->init();

    while (!app->isDone()) {

       //...

    }
}
bool OpenGLApp::initAPI()
{
    
    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 << "\n" << monInfo.rcMonitor.top << "\n";
        myfile << monInfo.rcMonitor.right << "\n" << monInfo.rcMonitor.bottom << "\n";
        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.\nBack 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;

}
bool OpenGLApp::init()
{
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL);

    return true;
}

And the action is done with the following code :

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    //glMatrixMode(GL_PROJECTION);
    //glLoadIdentity();
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    //m_Camera.Render(); // Apply Camera viewport

        static float t = 0;


        //glRotatef(t,1,1,1);
        //glTranslatef(0,0,0.05*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+=1;

        if (t > 360)
        {
            t = t - 360;
        }

    glFlush();
    SwapBuffers(hDC);

Now, as stated in the post at Opengl.org the polygon only appears when z is between -1 and 1.
When I do let it rotate it's shown 3D-like, but at some points there appears a black cut and a part of the quad isn't drawn.
Thats really odd what's happening.
If somebody could tell me what I'm missing to do, in order to draw 3D correctly, I'd be happy.

Here is my project if interested : www.megaupload.com/?d=DXLPV0BD

Edited by Dman01: n/a

2
Contributors
1
Reply
2
Views
5 Years
Discussion Span
Last Post by daviddoria
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.