Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Prosty studencki program graficzny
- kodowany w jezyku C z uzyciem OpenGL
- */
- #include "szescian.h"
- #include<math.h>
- #include <float.h>
- #include<stdio.h>
- LONG WINAPI WndProc( HWND, UINT, WPARAM, LPARAM );
- HGLRC SetUpOpenGL( HWND hWnd );
- //do poruszania
- GLfloat porusz_y=0;
- GLfloat porusz_x=0;
- GLfloat porusz_z=0;
- //dane swietlika
- GLfloat swietlik_x;
- GLfloat swietlik_z;
- //Kolory
- GLfloat red[] = {0.45f, 0.f, 0.f};
- GLfloat green[] = {0.f, 1.f, 0.17f};
- GLfloat blue[] = {0.f, 0.f, 0.8f};
- GLfloat black[] = {0.f, 0.f, 0.f};
- GLfloat white[] = {1.f, 1.f, 1.f};
- GLfloat grey[] = {0.8f, 0.8f, 0.8f};
- GLfloat orange[] = {0.8f, 0.4f, 0.f};
- GLfloat yellow[] = {1.f, 1.f, 0.f};
- GLfloat brown[] = {0.24f, 0.08f, 0.f};
- GLfloat pink[] = {1.f, 0.6f, 0.8f};
- //takietam
- char key;
- // Wartosci poczatkowe
- #define DEFAULT_Z_DIST 150
- #define DEFAULT_PIVOT_VERT_ANGLE 0
- #define DEFAULT_PIVOT_HORIZ_ANGLE 0
- #define DEFAULT_PIVOT_X 0
- #define DEFAULT_PIVOT_Y 0
- #define FULL_ANGLE_RADIANS 6.2832
- #define M_PI 3.14
- #define SQRT_3 1.73205080757;
- float z_dist=DEFAULT_Z_DIST; // INSERT, PAGE UP
- float pivot_vert_angle=DEFAULT_PIVOT_VERT_ANGLE; // UP, DOWN
- float pivot_horiz_angle=DEFAULT_PIVOT_HORIZ_ANGLE; // LEFT, RIGHT
- float pivot_x=DEFAULT_PIVOT_X; // DELETE, PAGE DOWN
- float pivot_y=DEFAULT_PIVOT_Y; // HOME, END
- // ************ Deklaracje funkcji ************************
- void DrawOpenGLScene( void ); // glowna funkcja rysujaca
- // Skladowe funkcje obiektu graficznego
- void szescian(void);
- // ..............................
- //******** Fukcje skladowe ********************************
- void narysujKule(GLfloat r, GLfloat color[3], GLfloat x, GLfloat y, GLfloat z)
- {
- int i, j,k;
- GLfloat kat=0.35;
- k=19;
- //h=h+r;
- //
- for (i = 0; i < k; ++i) {
- GLfloat dol = (i - 1) * kat;
- GLfloat z0 = sin(dol);
- GLfloat zr0 = cos(dol);
- GLfloat gora = i * kat;
- GLfloat z1 = sin(gora);
- GLfloat zr1 = cos(gora);
- glColor3fv(color);
- glBegin(GL_QUAD_STRIP);
- for (j = 0; j <k ; ++j) {
- GLfloat lng = j * kat;
- GLfloat x0 = cos(lng);
- GLfloat y0 =sin(lng);
- glNormal3f(r*x0 * zr0+x, r*y0* zr0+y,r*z0+z);
- glVertex3f(r*x0 * zr0+x, r*y0* zr0+y,r*z0+z);
- glNormal3f(r*x0 * zr1+x, r*y0 * zr1+y,r*z1+z);
- glVertex3f(r*x0 * zr1+x, r*y0 * zr1+y,r*z1+z);
- }
- glEnd();
- }
- }
- void kolko(GLfloat x,GLfloat y, GLfloat z, GLfloat r, GLfloat c[3])
- {
- int i;
- GLfloat srodek[] = {x,y, z};
- glColor3fv(c);
- //glPointSize(20);
- glBegin(GL_TRIANGLE_FAN);
- glVertex3fv(srodek);
- for(i = 0;i<19;i++) {
- GLfloat x0= r*cos(i*0.35);
- GLfloat z0= r*sin(i*0.35);
- GLfloat punkt[]={x+x0,y,z+z0};
- glVertex3fv(punkt);
- }
- glEnd();
- }
- //void walec(void)
- //{
- /*
- GLfloat red[] = {0.8f, 0.14f, 0.14f};
- GLfloat green[] = {0.f, 1.f, 0.17f};
- GLfloat a[3]={0,0,0};
- GLfloat b[3]={0,1,0};
- GLfloat d[3]={1,0,0};
- GLfloat c[3]={1,1,0};
- GLfloat e[3]={2,1,0};
- GLfloat f[3]={2,0,0};
- GLfloat g[3]={2,1,0};
- GLfloat h[3]={2,0,0};
- kolko(0,2, red);
- kolko(2,2, green);
- glBegin(GL_QUADS);
- glVertex3fv(a);
- glVertex3fv(b);
- glVertex3fv(c);
- glVertex3fv(d);
- glVertex3fv(e);
- //glVertex3fv();
- glEnd();
- //const GLfloat r= 2;
- //int i=0;
- //GLfloat srodek[] = {.0f,.0f, .0f};
- // //GLfloat x1= r*cos(i*0.35);
- // //GLfloat z1= r*sin(i*0.35);
- // //GLfloat punkt1[3]={x1,0.f,z1};
- // //GLfloat x2= r*cos((i+1)*0.35);
- // //GLfloat z2= r*sin((i+1)*0.35);
- // //GLfloat punkt2[3]={x2,0.f,z2};
- // glColor3f(1.0f, 0.0f, 0.0f);
- // glBegin(GL_TRIANGLE_FAN);
- // glVertex3fv(srodek);
- // for(;i<19;i++) {
- // GLfloat x= r*cos(i*0.35);
- // GLfloat z= r*sin(i*0.35);
- // GLfloat punkt[]={x,0.f,z};
- // glVertex3fv(punkt);
- // }
- // glEnd();*/
- void walec(GLfloat r, GLfloat x, GLfloat y, GLfloat z, GLfloat h, GLfloat color[3]) // x,y,z wspolrzedne gornej podstawy
- {
- int i;
- kolko(x,y,z,r,color);
- kolko(x,y-h,z,r,color);
- glBegin(GL_QUAD_STRIP);
- for (i = 0; i < 19; i++)
- {
- GLfloat kat = (i-0.5f)*0.35f;
- GLfloat x0 = r * cos(i * 0.35);
- GLfloat z0 = r * sin(i * 0.35);
- GLfloat dol[] = {x+x0, y, z+z0};
- GLfloat gora[] = {x+x0, y-h, z+z0};
- glNormal3f(cos(kat), 0, sin(kat));
- glVertex3fv(dol);
- glVertex3fv(gora);
- }
- glEnd();
- }
- void szescian(void)
- {
- glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
- {
- // Parametry wierzcholkow
- GLfloat sa[3]={0.0f,0.0f,0.0f};
- GLfloat sb[3]={3.0f,0.0f,0.0f};
- GLfloat sc[3]={3.0f,1.0f,0.0f};
- GLfloat sd[3]={0.0f,1.0f,0.0f};
- GLfloat se[3]={0.0f,0.0f,-1.0f};
- GLfloat sf[3]={3.0f,0.0f,-1.0f};
- GLfloat sg[3]={3.0f,1.0f,-1.0f};
- GLfloat sh[3]={0.0f,1.0f,-1.0f};
- // Sciany skladowe
- glColor3f(1.0f, 0.0f, 0.0f);
- glBegin(GL_POLYGON);
- glVertex3fv(sa);
- glVertex3fv(sb);
- glVertex3fv(sc);
- glVertex3fv(sd);
- glEnd();
- glColor3f(0.0f, 1.0f, 0.0f);
- glBegin(GL_POLYGON);
- glVertex3fv(sb);
- glVertex3fv(sf);
- glVertex3fv(sg);
- glVertex3fv(sc);
- glEnd();
- glColor3f(0.0f, 0.0f, 1.0f);
- glBegin(GL_POLYGON);
- glVertex3fv(sf);
- glVertex3fv(se);
- glVertex3fv(sh);
- glVertex3fv(sg);
- glEnd();
- glColor3f(1.0f, 1.0f, 0.0f);
- glBegin(GL_POLYGON);
- glVertex3fv(se);
- glVertex3fv(sa);
- glVertex3fv(sd);
- glVertex3fv(sh);
- glEnd();
- glColor3f(0.0f, 1.0f, 1.0f);
- glBegin(GL_POLYGON);
- glVertex3fv(sd);
- glVertex3fv(sc);
- glVertex3fv(sg);
- glVertex3fv(sh);
- glEnd();
- glColor3f(1.0f, 0.0f, 1.0f);
- glBegin(GL_POLYGON);
- glVertex3fv(sa);
- glVertex3fv(sb);
- glVertex3fv(sf);
- glVertex3fv(se);
- glEnd();
- }
- }
- void prostopadloscian(GLfloat x, GLfloat y, GLfloat z, GLfloat xl, GLfloat yl, GLfloat zl,GLfloat color [3])
- {
- glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
- {
- GLfloat sa[3]={x,y,z};
- GLfloat sb[3]={x,y+yl,z};
- GLfloat sc[3]={x+xl,y+yl,z};
- GLfloat sd[3]={x+xl,y,z};
- GLfloat se[3]={x,y,z-zl};
- GLfloat sf[3]={x,y+yl,z-zl};
- GLfloat sg[3]={x+xl,y+yl,z-zl};
- GLfloat sh[3]={x+xl,y,z-zl};
- glColor3fv(color);
- glBegin(GL_POLYGON);
- glVertex3fv(sa);
- glVertex3fv(sb);
- glVertex3fv(sc);
- glVertex3fv(sd);
- glEnd();
- glColor3fv(color);
- glBegin(GL_POLYGON);
- glVertex3fv(sb);
- glVertex3fv(sf);
- glVertex3fv(sg);
- glVertex3fv(sc);
- glEnd();
- glColor3fv(color);
- glBegin(GL_POLYGON);
- glVertex3fv(sf);
- glVertex3fv(se);
- glVertex3fv(sh);
- glVertex3fv(sg);
- glEnd();
- glColor3fv(color);
- glBegin(GL_POLYGON);
- glVertex3fv(se);
- glVertex3fv(sa);
- glVertex3fv(sd);
- glVertex3fv(sh);
- glEnd();
- glColor3fv(color);
- glBegin(GL_POLYGON);
- glVertex3fv(sd);
- glVertex3fv(sc);
- glVertex3fv(sg);
- glVertex3fv(sh);
- glEnd();
- glColor3fv(color);
- glBegin(GL_POLYGON);
- glVertex3fv(sa);
- glVertex3fv(sb);
- glVertex3fv(sf);
- glVertex3fv(se);
- glEnd();
- }
- }
- /*
- void litera()
- {
- szescian2(0,0,0,2,5,1);
- szescian2(-1.5,5,0,5,2,1);
- }*/
- void skrzydla(GLfloat color[3],GLfloat x, GLfloat y, GLfloat z, GLfloat skala)
- {
- //prawo gora
- glPolygonMode(GL_FRONT,GL_FILL);
- {
- // Parametry wierzcholkow
- GLfloat sa[3]={x-10.f*skala,y,z};
- GLfloat sb[3]={x,y,z};
- GLfloat sc[3]={x-8.0f*skala,y+4.0f*skala,z};
- GLfloat sd[3]={x-10.5f*skala,y+0.75f*skala,z};
- // Sciany skladowe
- glColor3fv(color);
- glBegin(GL_LINE_STRIP);
- glVertex3fv(sa);
- glVertex3fv(sb);
- glVertex3fv(sc);
- glVertex3fv(sd);
- glVertex3fv(sa);
- glEnd();
- //lewo gora
- }
- glPolygonMode(GL_FRONT,GL_FILL);
- {
- // Parametry wierzcholkow
- GLfloat sa[3]={x+10.f*skala,y,z};
- GLfloat sb[3]={x,y,z};
- GLfloat sc[3]={x+8.0f*skala,y+4.0f*skala,z};
- GLfloat sd[3]={x+10.5f*skala,y+0.75f*skala,z};
- // Sciany skladowe
- glColor3fv(color);
- glBegin(GL_LINE_STRIP);
- glVertex3fv(sa);
- glVertex3fv(sb);
- glVertex3fv(sc);
- glVertex3fv(sd);
- glVertex3fv(sa);
- glEnd();
- }
- }
- /*
- void podloze(GLfloat x, GLfloat y, GLfloat z)
- {
- int i, j;
- glColor3fv(green);
- for(i = z; i < 40; ++i) {
- for(j = x; j < 40; ++j)
- {
- GLfloat one[3]={j * 2,y,i * 2};
- GLfloat two[3]={j * 2,y,i * 2 + 2};
- GLfloat three[3]={j * 2 + 2,y,i * 2};
- GLfloat four[3]={j * 2 + 2,y,i * 2 + 2};
- glBegin(GL_QUAD_STRIP);
- glVertex3fv(one);
- glVertex3fv(two);
- glVertex3fv(three);
- glVertex3fv(four);
- glEnd();
- }
- }
- }*/
- void podloze(GLfloat x, GLfloat y, GLfloat z, GLfloat bok)
- {
- const GLfloat spec[]= {0.1, 0.1, 0.1};
- int i, j, k=0;
- glMaterialfv(GL_FRONT, GL_SPECULAR, spec);
- glMateriali(GL_FRONT, GL_SHININESS, 10);
- for(i = 0; i < 80; ++i) {
- for(j = 0; j < 80; ++j)
- {
- GLfloat one[3]={x + j*bok ,y, z + i*bok };
- GLfloat two[3]={x + j*bok ,y,z+i*bok + bok};
- GLfloat three[3]={x + j*bok +bok,y,z+i*bok };
- GLfloat four[3]={x+j*bok +bok,y,z + i* bok +bok};
- glColor3fv(green);
- if((x+j*bok==swietlik_x)&&(z+i*bok==swietlik_z)) glColor3fv(black);
- glBegin(GL_QUAD_STRIP);
- glNormal3f(0.f, 1.f, 0.f);
- glVertex3fv(one);
- glVertex3fv(two);
- glVertex3fv(three);
- glVertex3fv(four);
- glEnd();
- }
- }
- }
- void swietlik(GLfloat x, GLfloat y, GLfloat z, GLfloat rk,GLfloat rw, GLfloat hw) //rk- promien kuli, rw- promien srodkowego walca
- {
- GLfloat ambient[] = {0.2f, 0.2f, 0.8f, .1f};
- GLfloat diffuse[]= {0.5f, 0.5f, 0, 0.5f};
- //GLfloat sw[]={x,y-(rk+7*hw)+0.1,z};
- GLfloat specref[] = {1.f, 1.f, 1.f};
- //GLfloat sw[]={x,y-(rk+8.5*hw)+0.1,z};
- GLfloat sw[]={-40,-24,-40};
- swietlik_x=x;
- swietlik_z=z;
- glMaterialfv(GL_FRONT, GL_SPECULAR, specref);
- glMateriali(GL_FRONT, GL_SHININESS, 0);
- narysujKule(rk, brown,x,y,z);
- walec(rw-0.4,x,y-rk,z,hw,red);
- walec(rw-0.3,x,y-(rk+hw)+0.1,z, hw, brown);
- walec(rw-0.2,x,y-(rk+2*hw)+0.1,z, hw, brown);
- walec(rw-0.1,x,y-(rk+3*hw)+0.1,z, hw, brown);
- walec(rw,x,y-(rk+4*hw)+0.1,z, hw, brown);
- walec(rw-0.1,x,y-(rk+5*hw)+0.1,z, hw,brown);
- walec(rw-0.2,x,y-(rk+6*hw)+0.1,z, hw, brown);
- glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
- glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
- glLightfv(GL_LIGHT0, GL_POSITION, sw);
- glLightfv(GL_LIGHT0, GL_SPOT_CUTOFF, 60.f);
- glLightfv(GL_LIGHT0,
- //glEnable(GL_LIGHT0);
- //glEnable(GL_LIGHTING);
- walec(rw-0.3,x,y-(rk+7*hw)+0.1,z, hw, yellow);
- walec(rw-0.4,x,y-(rk+8*hw)+0.1,z, hw, yellow);
- skrzydla(black,x,y-(rk+hw),z+rw-0.3,0.8);
- skrzydla(black,x,y-(rk+3*hw),z+rw-0.1,1);
- }
- void scena()
- {
- //glLoadIdentity();
- //}
- /*swietlik(0,30,30,2.5,2,2);
- swietlik(30,30,30,2.5,2,2);
- swietlik(-15,45,45,2.5,2,2);
- swietlik(15,45,45,2.5,2,2);
- swietlik(45,45,45,2.5,2,2);*/
- //prostopadloscian(-1000,-24,1000,10000,0,100000, green);
- podloze(-40, - 24, -40,1);
- }
- //********************************************************
- // Glowna funkcja WINDOWS
- //********************************************************
- int WINAPI WinMain (HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPSTR lpszCmdLine,
- int nCmdShow)
- {
- static char szAppName[] = "OpenGL";
- static char szTitle[]= "SZESCIAN"; // Nazwa okna
- WNDCLASS wc; // zmienna klasy okna
- MSG msg; // zmienna komunikatu
- HWND hWnd; // uchwyt okna
- // wypelnianie klasy okna
- wc.style =
- CS_HREDRAW | CS_VREDRAW;// styl okna
- wc.lpfnWndProc =
- (WNDPROC)WndProc; // procedura okna
- wc.cbClsExtra = 0; // dodatkowe dane
- wc.cbWndExtra = 0;
- wc.hInstance =
- hInstance; // instancja
- wc.hIcon = NULL; // nazwa ikony
- wc.hCursor =
- LoadCursor(NULL, IDC_ARROW);// kursor
- wc.hbrBackground =
- (HBRUSH)(COLOR_WINDOW+1);// domyslny kolor okna
- wc.lpszMenuName = NULL;
- wc.lpszClassName =
- szAppName; // nazwa klasy
- // Rejestracja klasy okna
- RegisterClass( &wc );
- // Konstrukcja glownego okna
- hWnd = CreateWindow(
- szAppName, // app name
- szTitle, // Text for window title bar
- WS_OVERLAPPEDWINDOW// Window style
- // NEED THESE for OpenGL calls to work!
- | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
- CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
- NULL, // no parent window
- NULL, // Use the window class menu.
- hInstance,// This instance owns this window
- NULL // We don't use any extra data
- );
- // Jezeli okno nie zostanie utworzone, zwrot 0
- if ( !hWnd )
- {
- return( 0 );
- }
- ShowWindow( hWnd, nCmdShow );// Wyswietlanie okna
- UpdateWindow( hWnd ); // Aktualizacja okna
- // Uruchiomienie petli komunikatow
- while (GetMessage(&msg, NULL, 0, 0))
- {
- TranslateMessage( &msg ); // Przetwarzanie wiadomosci
- DispatchMessage( &msg ); // Zwolnienie wiadomosci
- }
- return( msg.wParam );
- }
- //********************************************************
- // Procedura okna
- //********************************************************
- LONG WINAPI WndProc(HWND hWnd,
- UINT msg,
- WPARAM wParam,
- LPARAM lParam)
- {
- HDC hDC;
- static HGLRC hRC; // Note this is STATIC!
- PAINTSTRUCT ps;
- GLdouble gldAspect;
- GLsizei glnWidth, glnHeight;
- float change;
- // Petla komunikatow
- switch (msg)
- {
- case WM_CREATE:
- hRC = SetUpOpenGL( hWnd ); // Inicjalizacja OpenGL
- return 0;
- case WM_SIZE:
- hDC = GetDC (hWnd); // Kontekst urzadzenia
- wglMakeCurrent (hDC, hRC);
- // Usawienie rozmiarow okna graficznego
- glnWidth = (GLsizei) LOWORD (lParam);
- glnHeight = (GLsizei) HIWORD (lParam);
- // Aspekt DC
- gldAspect = (GLdouble)glnWidth/(GLdouble)glnHeight;
- glMatrixMode( GL_PROJECTION );// Ustawienie macierzy projekcji
- glLoadIdentity();
- // Rodzaj transformacji ekranowej
- gluPerspective(
- 30.0, // kat
- gldAspect, // aspekt
- 1.0, // polozenie plaszczyzny blizszej
- 1000.0 ); // polozenie plaszczyzny dalszej
- glViewport( 0, 0, glnWidth, glnHeight );
- // czyszczenie
- glClearColor(0.5f,0.5f,0.5f,1.0f);
- glEnable(GL_COLOR_MATERIAL);
- wglMakeCurrent( NULL, NULL );
- ReleaseDC( hWnd, hDC );
- return 0;
- case WM_PAINT:
- // rysowanie sceny
- hDC = BeginPaint( hWnd, &ps );
- wglMakeCurrent( hDC, hRC );
- DrawOpenGLScene();
- SwapBuffers(hDC);
- wglMakeCurrent( NULL, NULL );
- EndPaint( hWnd, &ps );
- return 0;
- case WM_DESTROY:
- // zamykanie
- wglDeleteContext( hRC );
- PostQuitMessage( 0 );
- return 0;
- case WM_KEYDOWN: //************ OBSLUGA KLAWISZY ***********************
- if (GetAsyncKeyState(VK_SHIFT) & 0x8000)
- change=1.0f;
- else
- change=0.1f;
- switch ((int)wParam)
- {
- // obrot w pionie
- case VK_UP:
- pivot_vert_angle+=5;
- if (pivot_vert_angle>=360)
- pivot_vert_angle-=360;
- InvalidateRect(hWnd, NULL, FALSE);
- break;
- case VK_DOWN:
- pivot_vert_angle-=5;
- if (pivot_vert_angle<0)
- pivot_vert_angle+=360;
- InvalidateRect(hWnd, NULL, FALSE);
- break;
- // obrot w poziomie
- case VK_RIGHT:
- pivot_horiz_angle+=5;
- if (pivot_horiz_angle>=360)
- pivot_horiz_angle-=360;
- InvalidateRect(hWnd, NULL, FALSE);
- break;
- case VK_LEFT:
- pivot_horiz_angle-=5;
- if (pivot_horiz_angle<0)
- pivot_horiz_angle+=360;
- InvalidateRect(hWnd, NULL, FALSE);
- break;
- // przesuniecia w poziomie
- case VK_NEXT:
- if ((pivot_x+change)<400)
- pivot_x+=change;
- InvalidateRect(hWnd, NULL, FALSE);
- break;
- case VK_DELETE:
- if ((pivot_x-change)>-400)
- pivot_x-=change;
- InvalidateRect(hWnd, NULL, FALSE);
- break;
- // przesuniecia w pionie
- case VK_HOME:
- if ((pivot_y+change)<400)
- pivot_y+=change;
- InvalidateRect(hWnd, NULL, FALSE);
- break;
- case VK_END:
- if ((pivot_y-change)>-400)
- pivot_y-=change;
- InvalidateRect(hWnd, NULL, FALSE);
- break;
- // odleglosc
- case VK_INSERT:
- if ((z_dist+change)<600)
- z_dist+=change;
- InvalidateRect(hWnd, NULL, FALSE);
- break;
- case VK_PRIOR:
- if ((z_dist-change)>1)
- z_dist-=change;
- InvalidateRect(hWnd, NULL, FALSE);
- break;
- // wyjscie z programu
- case VK_ESCAPE:
- PostMessage(hWnd, WM_CLOSE, 0, 0);
- return 0;
- // tutaj obsluga wazki g
- case VK_NUMPAD8:
- porusz_y=porusz_y+1;
- InvalidateRect(hWnd, NULL, FALSE);
- break;
- case VK_NUMPAD2:
- porusz_y=porusz_y-1;
- InvalidateRect(hWnd, NULL, FALSE);
- break;
- case VK_NUMPAD6:
- porusz_x=porusz_x+1;
- InvalidateRect(hWnd, NULL, FALSE);
- break;
- case VK_NUMPAD4:
- porusz_x=porusz_x-1;
- InvalidateRect(hWnd, NULL, FALSE);
- break;
- case VK_NUMPAD7:
- porusz_z=porusz_z-1;
- InvalidateRect(hWnd, NULL, FALSE);
- break;
- case VK_NUMPAD9:
- porusz_z=porusz_z+1;
- InvalidateRect(hWnd, NULL, FALSE);
- break;
- }
- }
- return DefWindowProc( hWnd, msg, wParam, lParam );
- }
- //*******************************************************
- // Uruchomienie OpenGL w srodowisku Windows wymaga
- // wlaczenie trybu pikselowego oraz ustawienia
- // kontekstu renderowania
- //*******************************************************
- HGLRC SetUpOpenGL( HWND hWnd )
- {
- static PIXELFORMATDESCRIPTOR pfd =
- {
- sizeof (PIXELFORMATDESCRIPTOR), // rozmiar struktury
- 1, // numer wersji
- PFD_DRAW_TO_WINDOW | // flaga rysowania w oknie,
- PFD_SUPPORT_OPENGL | // uzycie OpenGL
- PFD_DOUBLEBUFFER, // uzycie podwojnego buforowania
- PFD_TYPE_RGBA, // model kolorow - RGBA
- 24, // kolor 24-bitowy
- 0, 0, 0,
- 0, 0, 0, // trezerwa
- 0, 0, // brak bufora alpha
- 0, 0, 0, 0, 0, // brak bufora akumulacji
- 32, // bufor glebokosci 32-bitowy
- 0, // brak bufora szablonu
- 0, // brak bufora pomocniczego
- PFD_MAIN_PLANE, // warstwa
- 0, // rezerwa - 0
- 0, // maska
- 0, // maska widoczna
- 0 // maska bledow
- };
- // zmienne
- int nMyPixelFormatID;
- HDC hDC;
- HGLRC hRC;
- hDC = GetDC( hWnd );
- // Inicjalizacja trybu pikselowego
- nMyPixelFormatID = ChoosePixelFormat( hDC, &pfd );
- SetPixelFormat( hDC, nMyPixelFormatID, &pfd );
- // Inicjalizacja kontekstu renderowania
- hRC = wglCreateContext( hDC );
- ReleaseDC( hWnd, hDC );
- return hRC;
- }
- //********************************************************
- // Glowna funkcja rysujaca.
- //********************************************************
- void DrawOpenGLScene( )
- {
- int i;
- //GLfloat position[4]={10.0f, 10.0, 100.0f, 0.0f};
- GLfloat position[4]={.1f, .1, .1f, .1f};
- // flagi czynnosci pomocniczych
- glEnable( GL_DEPTH_TEST );
- // czyszczenie buforow
- glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
- //glEnable(GL_CULL_FACE);
- glEnable(GL_COLOR_MATERIAL);
- auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);
- // wlaczenie oswietlenia
- //glLightfv(GL_LIGHT0, GL_POSITION, position);
- glEnable(GL_LIGHT0);
- glEnable(GL_LIGHTING);
- //tonasze
- //glLightModelf(GL_LIGHT_MODEL_AMBIENT, 1.f/*, 1.f, 1.f, 1.f*/);
- // transformacja obserwacji
- glMatrixMode( GL_MODELVIEW );
- glLoadIdentity();
- // umiejscowienie kamery w odleglym miejscu
- glTranslatef( pivot_x, pivot_y, -z_dist );
- glRotatef(pivot_vert_angle, 1, 0, 0);
- glRotatef(pivot_horiz_angle, 0, 1, 0);
- glPushMatrix();
- //hehe
- //walec(5,0,0,0,5,red);
- //swietlik(15,15,15,2.5,2,2);
- //RenderScene();
- scena();
- glPopMatrix();
- glPushMatrix();
- glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE);
- glTranslatef(porusz_x,porusz_y,porusz_z);
- //glRotatef(-30,1,0,0);
- swietlik(0,0,0,2.5,2,2);
- swietlik_x=swietlik_x+porusz_x;
- swietlik_z=swietlik_z+porusz_z;
- glPopMatrix();
- glFlush ();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement