   Why glOrtho don't work for me?
  I have put these code into my source file:glViewport(0, 0, 256, 256);glMatrixMode(GL_PROJECTION);glOrtho(0, 256, 256, 0, -1, 1);glMatrixMode(GL_MODELVIEW);glLoadIdentity();but it seem don't do anything! where is wrong? my full source code:/************************** * Includes * **************************/#include <windows.h>#include <gl/gl.h>#include <gl/glu.h>unsigned long image[16] = {0xFF0000FF, 0xFF0000FF, 0xFF0000FF, 0xFF0000FF,0xFF0000FF, 0xFF0000FF, 0xFF0000FF, 0xFF0000FF,0xFF0000FF, 0xFF0000FF, 0xFF0000FF, 0xFF0000FF,0xFF0000FF, 0xFF0000FF, 0xFF0000FF, 0xFF0000FF,};unsigned int texobj[1];/************************** * 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;    /* 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);glEnable(GL_BLEND);glEnable(GL_TEXTURE_2D);glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);glGenTextures(1, texobj);glBindTexture(GL_TEXTURE_2D, texobj[0]);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, image);glViewport(0, 0, 256, 256);glMatrixMode(GL_PROJECTION);glOrtho(0, 256, 256, 0, -1, 1);glMatrixMode(GL_MODELVIEW);glLoadIdentity();    /* 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);  glBegin (GL_QUADS);  glTexCoord2f(0.0, 0.0);glColor4f(1.0f, 1.0f, 1.0f, 1.0f);glVertex2f(0.0f, 0.0f);  glTexCoord2f(1.0, 0.0);glColor4f(1.0f, 1.0f, 1.0f, 1.0f);glVertex2f(0.5f, 0.0f);  glTexCoord2f(1.0, 1.0);glColor4f(1.0f, 1.0f, 1.0f, 1.0f);glVertex2f(0.5f, 0.5f);glTexCoord2f(0.0, 1.0);glColor4f(1.0f, 1.0f, 1.0f, 1.0f);glVertex2f(0.0f, 0.5f);  glEnd ();//  glBegin (GL_TRIANGLES);//  glColor4f (1.0f, 0.0f, 0.0f, 0.6f);   glVertex2f (0.0f, 1.0f);//  glColor4f (0.0f, 1.0f, 0.0f, 0.6f);   glVertex2f (0.87f, -0.5f);//  glColor4f (0.0f, 0.0f, 1.0f, 0.6f);   glVertex2f (-0.87f, -0.5f);//  glEnd ();  SwapBuffers (hDC);  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);}I have work on it for a long time but it just can't make it work...   
Quote:glBegin (GL_QUADS);glTexCoord2f(0.0, 0.0);glColor4f(1.0f, 1.0f, 1.0f, 1.0f);glVertex2f(0.0f, 0.0f);glTexCoord2f(1.0, 0.0);glColor4f(1.0f, 1.0f, 1.0f, 1.0f);glVertex2f(0.5f, 0.0f);glTexCoord2f(1.0, 1.0);glColor4f(1.0f, 1.0f, 1.0f, 1.0f);glVertex2f(0.5f, 0.5f);glTexCoord2f(0.0, 1.0);glColor4f(1.0f, 1.0f, 1.0f, 1.0f);glVertex2f(0.0f, 0.5f);glEnd ();You're setting your projection width and height to 256, each.  Your vertices, however, are much too close together.  Try replacing 0.5 with 256 in each of your Vertex2f calls.   ;Quote:Original post by mhamlinQuote:glBegin (GL_QUADS);glTexCoord2f(0.0, 0.0);glColor4f(1.0f, 1.0f, 1.0f, 1.0f);glVertex2f(0.0f, 0.0f);glTexCoord2f(1.0, 0.0);glColor4f(1.0f, 1.0f, 1.0f, 1.0f);glVertex2f(0.5f, 0.0f);glTexCoord2f(1.0, 1.0);glColor4f(1.0f, 1.0f, 1.0f, 1.0f);glVertex2f(0.5f, 0.5f);glTexCoord2f(0.0, 1.0);glColor4f(1.0f, 1.0f, 1.0f, 1.0f);glVertex2f(0.0f, 0.5f);glEnd ();You're setting your projection width and height to 256, each.  Your vertices, however, are much too close together.  Try replacing 0.5 with 256 in each of your Vertex2f calls.Yes, it display the rect and over the full window.Then replacing 0.5 with 25, but still noting displayed... then with 55, it display a small rectangle not the expected square at top-left corner of the window.Why?   ;Quote:Original post by was2_0Then replacing 0.5 with 25, but still noting displayed... then with 55, it display a small rectangle not the expected square at top-left corner of the window.Why?Of course it's a rectangle, you told GL yourself that 256 is width AND height and unless your screen/window happens to be square, than a rectangle is pretty much to be expected. 55,55 will always be about .2x the width and .2x the height of the window.Use glOrtho(0,256*aspectRatio,...) (which is 4:3 at most resolutions, but you really SHOULD use window width/window height).   ;  I delete the line:glViewport(0, 0, 256, 256);then everything be well!so, how to set the viewport to get the effect that I don't set it???   ;Quote:Original post by was2_0I delete the line:glViewport(0, 0, 256, 256);then everything be well!so, how to set the viewport to get the effect that I don't set it???Would you like to tell me what shall i do?I still can work it out...THANKS!   