Soyez le premier à donner votre avis sur cette source.
Vue 9 935 fois - Téléchargée 500 fois
#include <windows.h> #include <gl/gl.h> #include <gl/glu.h> #include <gl/glaux.h> WNDCLASS wc; MSG msg; HWND hWnd; HDC DC; HGLRC RC; unsigned texture[2]; int x,z=-5,filt,tex=1,zbuff=1,fog,rot; float fogcolor[4] = {0.5f,0.5f,0.5f,1}; GLUquadricObj *Quadric1 = gluNewQuadric(); void LoadTexture() { AUX_RGBImageRec *texture1; texture1 = auxDIBImageLoad("machin.bmp"); glGenTextures (2, &texture[0]); glBindTexture (GL_TEXTURE_2D, texture[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, 3, texture1->sizeX, texture1->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, texture1->data); glBindTexture(GL_TEXTURE_2D, texture[1]); glTexParameteri (GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri (GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, 3, texture1->sizeX, texture1->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, texture1->data); }; void RePaint() { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode (GL_MODELVIEW); glLoadIdentity (); gluLookAt(x,0,z,x,0,z+10,0,1,0); if (zbuff) glEnable(GL_DEPTH_TEST); else glDisable(GL_DEPTH_TEST); if (tex) glEnable(GL_TEXTURE_2D); else glDisable(GL_TEXTURE_2D); if (fog) glEnable(GL_FOG); else glDisable(GL_FOG); glBindTexture(GL_TEXTURE_2D, texture[filt]); gluQuadricTexture(Quadric1, TRUE); gluQuadricDrawStyle(Quadric1, GLU_FILL); rot++; glRotated(rot,0,1,0); gluSphere(Quadric1,4,50,50); SwapBuffers (DC); } void InitPixelFormat (HDC hDC) { PIXELFORMATDESCRIPTOR pfd = { sizeof (PIXELFORMATDESCRIPTOR), 1, PFD_SUPPORT_OPENGL | PFD_TYPE_RGBA | PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0 }; SetPixelFormat (hDC, ChoosePixelFormat (hDC, &pfd), &pfd); } LRESULT CALLBACK WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CREATE: DC=GetDC (hwnd); InitPixelFormat (DC); RC = wglCreateContext (DC); wglMakeCurrent (DC, RC); glEnable (GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); glClearColor (0.5f,0.5f,0.5f,1); glFogfv(GL_FOG_COLOR, fogcolor); glFogi(GL_FOG_MODE, GL_EXP); glHint(GL_FOG_HINT, GL_NICEST); glFogf(GL_FOG_DENSITY, 0.3f); glFogf(GL_FOG_START, 1.0); glFogf(GL_FOG_END, 5.0); LoadTexture(); break; case WM_CLOSE: wglMakeCurrent (NULL, NULL); wglDeleteContext (RC); ReleaseDC (hwnd,DC); PostQuitMessage (0); break; case WM_SIZE: glViewport (0,0,LOWORD (lParam),HIWORD (lParam)); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective (45,(float)(LOWORD(lParam))/(float)(HIWORD(lParam)),1,100); break; case WM_PAINT: RePaint (); break; case WM_KEYDOWN: switch (wParam) { case VK_DOWN: z--; break; case VK_UP: z++; break; case VK_RIGHT: x--; break; case VK_LEFT: x++; break; case 'F': filt=!filt; break; case 'T': tex=!tex; break; case 'Z': zbuff=!zbuff; break; case 'B': fog=!fog; break; case 'A': rot++ +rot++ +rot++; } break; default: return DefWindowProc (hwnd,uMsg,wParam,lParam); break; } return 0; } int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int CmdShow) { wc.style = CS_OWNDC; wc.lpfnWndProc = WindowProc; 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(LTGRAY_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = "OGL"; RegisterClass(&wc); hWnd = CreateWindow ("OGL", "Fenetre OpenGL", WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE, 0, 0, 640, 480, NULL, NULL, hInstance, NULL ); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; }
2 nov. 2003 à 18:57
Tu nous facilites pas la tache a nous (noob comme tu nous appelles)
Erf, execellent pour faire du copier/coller, incomprehensible sinon
21 juin 2002 à 11:27
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.