Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 6 of 6

Thread: OPENGL and MFC CDC

  1. #1
    Junior Member Newbie
    Join Date
    Nov 2012
    Posts
    15

    OPENGL and MFC CDC

    I wrote a pretty big graphics program a while back that uses CDC for drawing.

    I wanted to do some 3D stuff among dozens of other things so, i installed OPENGL in replace of my CDCs

    I have more everything ironed out and its working great for the most part.

    My mouse points and any other point (example - ::OnMouseMove(nFlags, point)) are not 100% matching up with what OPENGL draws.

    For example, if you want to draw a line the further you go out from point 0,0 the bigger the difference in the mouse point and where it draws when you click.

    So if you draw a long from 0,0 to say 200,200 then it seems to draw properly. However, the more i zoom out the more the difference is visible.

    Im assuming its in my projection.... i really don't know. Im not sure what code to give you.

    Note, my ASPECT is 1 because i need to be able to change the size of the window and i don't want the image to lose that same aspect.

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    // Make the rendering context current
    wglMakeCurrent(m_myhDC,m_hRC);

    // Reset The Current Viewport And Perspective Transformation
    glViewport(0, 0, cx, cy);

    m_height= cy;
    m_width = cx;

    // Calculate The Aspect Ratio Of The Window
    gluPerspective(90.0f,
    aspect,
    0.001f,
    100.0f);

  2. #2
    Senior Member OpenGL Pro
    Join Date
    Jan 2012
    Location
    Australia
    Posts
    1,098
    Are you drawing a 2D or 3D line? Is your world coordinate system for the line object the same as the window coordinate system?

  3. #3
    Junior Member Newbie
    Join Date
    Nov 2012
    Posts
    15
    Im doing 3D which is why i choose OpenGl but, my problem is with the 2D world. Im not concerned with 3D because i use 3D only to display the image and at that point, the matching coordinates do not matter. The lines that are having problems are the 2D lines. The further from the 0,0 point the further off they are. I think its because one is using metric coordinates and the other another in another coordinate. Im really not sure if my coordinates are the same as the window coordinates which is probably where the problem lies and im not sure what to do from there.

  4. #4
    Senior Member OpenGL Pro Aleksandar's Avatar
    Join Date
    Jul 2009
    Posts
    1,067
    You have made at least two mistakes:
    1. Aspect depends on the window size and should not be 1.
    2. Use Ortho projection to achieve what you need, not Perspective.

  5. #5
    Junior Member Newbie
    Join Date
    Nov 2012
    Posts
    15
    Sorry. I provided you the wrong code. All that code above i went ahead removed from the program because i wasn't calling it anymore.

    I set ASPECT to 1 because i did not want the window size to be a factor in drawing but, that's irrelevant now.

    This is what i am calling

    GetClientRect(&m_WorkingRect);
    pDC->DPtoLP(&m_WorkingRect);

    wglMakeCurrent(m_myhDC,m_hRC);

    // Reset the model matrix
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    // This Will Clear The Background Color To Screen
    glClearColor(
    GetRValue(pDoc->m_cScreenColor) / 255.0f,
    GetGValue(pDoc->m_cScreenColor) / 255.0f,
    GetBValue(pDoc->m_cScreenColor) / 255.0f,
    0.0f);

    // Clear the screen and the depth buffer
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


    glOrtho(m_WorkingRect.left, m_WorkingRect.right, m_WorkingRect.bottom, m_WorkingRect.top,-10, 4000);

    // Translate to a suitable position
    glScalef(1.0f * m_fZoomScale,1.0f * m_fZoomScale,1.0f * m_fZoomScale);

    glRotatef(m_fPercentRotate,m_fXpercentRotate,m_fYp ercentRotate,m_fZpercentRotate);

    glTranslatef(m_pWindowOrg.x,m_pWindowOrg.y,0);//Check Z

    I think the problem is either with WORKINGRECT or the zoom because when i zoom in and out, the problem gets progressively worse but at 100% works perfectly fine. I think its just a conversion issue one way or another.

  6. #6
    Junior Member Newbie
    Join Date
    Nov 2012
    Posts
    15
    PROBLEM SOLVED.....

    1 - i didnt realize that glOthro does the scaling for me. I originally had the glscale there because i was using projection (i think) like the old code i posted.

    2 - What i really think solved the problem was just either a loose glPOPmatrix or glPUSHmatrix. I think adding or removing one of those ended up fixing the problem....

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •