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: using mouse in NeHe programs

  1. #1
    Newbie Newbie
    Join Date
    Aug 2017
    Posts
    2

    using mouse in NeHe programs

    Please how can i use mouse in the programs for opengl provided by NeHe site in vc++

  2. #2
    Member Regular Contributor
    Join Date
    Apr 2012
    Location
    Los Angeles
    Posts
    385
    Mouse functionality is provided by the utilities used to open the graphics window.
    Have you been able to get any of the NeHe tutorials to work?
    If so, how did you open the graphics window?
    Look at the documentation for the software used to open the window.
    It should provide routines that let you interface with the mouse, keyboard, etc.

  3. #3
    Newbie Newbie
    Join Date
    Aug 2017
    Posts
    2

    NeHe example need mouse

    Quote Originally Posted by Carmine View Post
    Mouse functionality is provided by the utilities used to open the graphics window.
    Have you been able to get any of the NeHe tutorials to work?
    If so, how did you open the graphics window?
    Look at the documentation for the software used to open the window.
    It should provide routines that let you interface with the mouse, keyboard, etc.

    I can use keyboard as in the follow example to rotating the triangle
    But how can i rotate it by using mouse in this example?
    Please can you learn my ?


    #include <windows.h>
    #include <gl.h>
    #include <glu.h>
    #include <glut.h>
    #include <glaux.h>

    HDC hDC=NULL;
    HGLRC hRC=NULL;
    HWND hWnd=NULL;
    HINSTANCE hInstance;
    bool keys[256];
    bool active=TRUE;
    bool fullscreen=TRUE;
    GLfloat r;

    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

    GLvoid ReSizeGLScene(GLsizei width, GLsizei height)
    {
    if (height==0)
    {
    height=1;
    }

    glViewport(0,0,width,height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    }

    int InitGL(GLvoid)
    {
    glShadeModel(GL_SMOOTH);
    glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
    glClearDepth(1.0f);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
    return TRUE;
    }

    int DrawGLScene(GLvoid)
    {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glTranslatef(0.0f,0.0f,-6.0f);
    glRotatef(r,0,1,0);
    glBegin(GL_TRIANGLES);
    glVertex3f( 0.0f, 1.0f, 0.0f);
    glVertex3f(-1.0f,-1.0f, 0.0f);
    glVertex3f( 1.0f,-1.0f, 0.0f);
    glEnd();
    return TRUE;
    }

    GLvoid KillGLWindow(GLvoid)
    {
    if (fullscreen)
    {
    ChangeDisplaySettings(NULL,0);
    ShowCursor(TRUE);
    }

    if (hRC)
    {
    if (!wglMakeCurrent(NULL,NULL))
    {
    MessageBox(NULL,"Release Of DC And RC Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
    }

    if (!wglDeleteContext(hRC))
    {
    MessageBox(NULL,"Release Rendering Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
    }
    hRC=NULL;
    }

    if (hDC && !ReleaseDC(hWnd,hDC))
    {
    MessageBox(NULL,"Release Device Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
    hDC=NULL;
    }

    if (hWnd && !DestroyWindow(hWnd))
    {
    MessageBox(NULL,"Could Not Release hWnd.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
    hWnd=NULL;
    }

    if (!UnregisterClass("OpenGL",hInstance))
    {
    MessageBox(NULL,"Could Not Unregister Class.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
    hInstance=NULL;
    }
    }

    BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag)
    {
    GLuint PixelFormat;
    WNDCLASS wc;
    DWORD dwExStyle;
    DWORD dwStyle;
    RECT WindowRect;
    WindowRect.left=(long)0;
    WindowRect.right=(long)width;
    WindowRect.top=(long)0;
    WindowRect.bottom=(long)height;

    fullscreen=fullscreenflag;

    hInstance = GetModuleHandle(NULL);
    wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
    wc.lpfnWndProc = (WNDPROC) WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = NULL;
    wc.lpszMenuName = NULL;
    wc.lpszClassName = "OpenGL";

    if (!RegisterClass(&wc))
    {
    MessageBox(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    return FALSE;
    }

    if (fullscreen)
    {
    DEVMODE dmScreenSettings;
    memset(&dmScreenSettings,0,sizeof(dmScreenSettings ));
    dmScreenSettings.dmSize=sizeof(dmScreenSettings);
    dmScreenSettings.dmPelsWidth = width;
    dmScreenSettings.dmPelsHeight = height;
    dmScreenSettings.dmBitsPerPel = bits;
    dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWID TH|DM_PELSHEIGHT;
    if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLS CREEN)!=DISP_CHANGE_SUCCESSFUL)
    {
    if (MessageBox(NULL,"The Requested Fullscreen Mode Is Not Supported By\nYour Video Card. Use Windowed Mode Instead?","NeHe GL",MB_YESNO|MB_ICONEXCLAMATION)==IDYES)
    {
    fullscreen=FALSE;
    }
    else
    {
    else
    {
    MessageBox(NULL,"Program Will Now Close.","ERROR",MB_OK|MB_ICONSTOP);
    return FALSE;
    }
    }
    }

    if (fullscreen)
    {
    dwExStyle=WS_EX_APPWINDOW;
    dwStyle=WS_POPUP;
    ShowCursor(FALSE);
    }
    else
    {
    dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
    dwStyle=WS_OVERLAPPEDWINDOW;
    }

    AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle);
    if (!(hWnd=CreateWindowEx( dwExStyle,
    "OpenGL",
    title,
    dwStyle |
    WS_CLIPSIBLINGS |
    WS_CLIPCHILDREN,
    0, 0,
    WindowRect.right-WindowRect.left,
    WindowRect.bottom-WindowRect.top,
    NULL,
    NULL,
    hInstance,
    NULL)))
    {
    KillGLWindow();
    MessageBox(NULL,"Window Creation Error.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    return FALSE;
    }

    static PIXELFORMATDESCRIPTOR pfd=
    {
    sizeof(PIXELFORMATDESCRIPTOR),
    1,
    PFD_DRAW_TO_WINDOW |
    PFD_SUPPORT_OPENGL |
    PFD_DOUBLEBUFFER,
    PFD_TYPE_RGBA,
    bits,
    0, 0, 0, 0, 0, 0,
    0,
    0,
    0,
    0, 0, 0, 0,
    16,
    0,
    0,
    PFD_MAIN_PLANE,
    0,
    0, 0, 0
    };

    if (!(hDC=GetDC(hWnd)))
    {
    KillGLWindow();
    MessageBox(NULL,"Can't Create A GL Device Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    return FALSE;
    }

    if (!(PixelFormat=ChoosePixelFormat(hDC,&pfd)))
    {
    KillGLWindow();
    MessageBox(NULL,"Can't Find A Suitable PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    return FALSE;
    }

    if(!SetPixelFormat(hDC,PixelFormat,&pfd))
    {
    KillGLWindow();
    MessageBox(NULL,"Can't Set The PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    return FALSE;
    }

    if (!(hRC=wglCreateContext(hDC)))
    {
    KillGLWindow();
    MessageBox(NULL,"Can't Create A GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    return FALSE;
    }

    if(!wglMakeCurrent(hDC,hRC))
    {
    KillGLWindow();
    MessageBox(NULL,"Can't Activate The GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    return FALSE;
    }

    ShowWindow(hWnd,SW_SHOW);
    SetForegroundWindow(hWnd);
    SetFocus(hWnd);
    ReSizeGLScene(width, height);

    if (!InitGL())
    {
    KillGLWindow();
    MessageBox(NULL,"Initialization Failed.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    return FALSE;
    }

    return TRUE;
    }

    LRESULT CALLBACK WndProc( HWND hWnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam)
    {
    switch (uMsg)
    {
    case WM_ACTIVATE:
    {
    if (!HIWORD(wParam))
    {
    active=TRUE;
    }
    else
    {
    active=FALSE;
    }

    return 0;
    }

    case WM_SYSCOMMAND:
    {
    switch (wParam)
    {
    case SC_SCREENSAVE:
    case SC_MONITORPOWER:
    return 0;
    }
    break;
    }

    case WM_CLOSE:
    {
    PostQuitMessage(0);
    return 0;
    }

    case WM_KEYDOWN:
    {
    keys[wParam] = TRUE;
    return 0;
    }

    case WM_KEYUP:
    {
    keys[wParam] = FALSE;
    return 0;
    }

    case WM_SIZE:
    {
    ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));
    return 0;
    }
    }
    return DefWindowProc(hWnd,uMsg,wParam,lParam);
    }

    int WINAPI WinMain( HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow)
    {
    MSG msg;
    BOOL done=FALSE;
    if (MessageBox(NULL,"Would You Like To Run In Fullscreen Mode?", "Start FullScreen?",MB_YESNO|MB_ICONQUESTION)==IDNO)
    {
    fullscreen=FALSE;
    }
    if (!CreateGLWindow("NeHe's First Polygon Tutorial",640,480,16,fullscreen))
    {
    return 0;
    }

    while(!done)
    {
    if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
    {
    if (msg.message==WM_QUIT)
    {
    done=TRUE;
    }
    else
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    }
    else
    {
    if ((active && !DrawGLScene()) || keys[VK_ESCAPE])
    {
    done=TRUE;
    }
    else
    {
    SwapBuffers(hDC);
    }
    if(keys['A'])r-=1;
    if(keys['D'])r+=1;

    if (keys[VK_F1])
    {
    keys[VK_F1]=FALSE;
    KillGLWindow();
    fullscreen=!fullscreen;
    if (!CreateGLWindow("NeHe's First Polygon Tutorial",640,480,16,fullscreen))
    {
    return 0;
    }
    }
    }
    }
    KillGLWindow();
    return (msg.wParam);
    }

  4. #4
    Member Regular Contributor
    Join Date
    Jul 2012
    Location
    France
    Posts
    376
    Nehe are very old tutorials.
    glaux is completely deprecated.
    If your intent is to learn OpenGL, then use glut instead of managing the window yourself with the native API.
    For a more up-to-date OpenGL tutorial, this one might help you, at least more than nehe's one.

  5. #5
    Junior Member Regular Contributor
    Join Date
    Jan 2017
    Posts
    107
    Quote Originally Posted by Silence View Post
    Nehe are very old tutorials.
    glaux is completely deprecated.
    If your intent is to learn OpenGL, then use glut instead of managing the window yourself with the native API.
    For a more up-to-date OpenGL tutorial, this one might help you, at least more than nehe's one.
    Or https://learnopengl.com/

    Looking back at this and speaking generally and not at you specifically, it seems you're trying to fly before you can walk. General programming ability is a must before computer graphics programming as your soon be starting again from scratch because you have learnt something new like inheritance or interface, or get to a stage that it's easier to start again than continue because of your programs design flaws.
    You're only a few years away though. , unfortunately check my signature link below.(Programming is just like electronic servicing, you're always keeping up, always something new... ... .. .)
    When I was very young it was copying very poorly printed code from magazines(,or . 0 or O) and buying games like manic minor, then elite in lined 3D, I created a 3D lined maze game(at least it looked 3D, but no maths), then sega without a keyboard... god knows how's a 10 years old handling it today?... https://learnopengl.com/
    Last edited by paul_g_griffiths; 08-13-2017 at 02:41 PM.
    http://strong-grip.com Strong-Grip Future Technologies.

  6. #6
    Member Regular Contributor
    Join Date
    Apr 2012
    Location
    Los Angeles
    Posts
    385
    When you post code, it would help a lot if you use indentation to clarify the logic, AND put the code between [ code] and [/ code] tags (without the spaces). You'll get more helpful responses that way. Maybe this link to documentation will help you?

    https://social.msdn.microsoft.com/se...refinement=183
    Last edited by Carmine; 08-13-2017 at 03:14 PM.

Posting Permissions

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