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>
- #include"AntTweakBar.h"
- LONG WINAPI WndProc( HWND, UINT, WPARAM, LPARAM );
- HGLRC SetUpOpenGL( HWND hWnd );
- GLfloat alfa=0;
- //do poruszania
- GLfloat porusz_y=0;
- GLfloat porusz_x=0;
- GLfloat porusz_z=0;
- float g_Zoom = 1.0f;
- TwBar *bar;
- //dane swietlika
- GLfloat swietlik_x;
- GLfloat swietlik_z;
- GLfloat swietlik_y;
- int swiatlo;
- //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);
- glVertex3f(r*x0 * zr0+x, r*y0* zr0+y,r*z0+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)
- {
- int i, j, k=0;
- for(i = z; i < 80; ++i) {
- for(j = x; j < 80; ++j)
- {
- GLfloat one[3]={j ,y,i };
- GLfloat two[3]={j ,y,i +1};
- GLfloat three[3]={j +1,y,i };
- GLfloat four[3]={j +1,y,i +1};
- glColor3fv(green);
- if((j==swietlik_x)&&(i==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
- {
- swietlik_x=x;
- swietlik_z=z;
- 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);
- 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);
- }
- //********************************************************
- // Glowna funkcja WINDOWS
- //********************************************************
- int WINAPI WinMain (HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPSTR lpszCmdLine,
- int nCmdShow)
- {
- static char szAppName[] = "OpenGL";
- static char szTitle[]= "WAZKA G"; // 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:
- swietlik_y++;
- alfa= 1.f - porusz_y/10.0;
- InvalidateRect(hWnd, NULL, FALSE);
- break;
- case VK_NUMPAD2:
- swietlik_y--;
- alfa=alfa-0.1;
- InvalidateRect(hWnd, NULL, FALSE);
- break;
- case VK_NUMPAD6:
- swietlik_x++;
- InvalidateRect(hWnd, NULL, FALSE);
- break;
- case VK_NUMPAD4:
- swietlik_x--;
- InvalidateRect(hWnd, NULL, FALSE);
- break;
- case VK_NUMPAD7:
- swietlik_z--;
- InvalidateRect(hWnd, NULL, FALSE);
- break;
- case VK_NUMPAD9:
- swietlik_z++;
- InvalidateRect(hWnd, NULL, FALSE);
- break;
- case 0x53:
- swiatlo++;
- if(swiatlo==5) swiatlo=0;
- 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 );
- TwInit(TW_OPENGL, NULL);
- TwWindowSize(600, 800);
- bar = TwNewBar("TweakBar");
- TwDefine(" GLOBAL help='This example shows how to integrate AntTweakBar with GLUT and OpenGL.' ");
- TwDefine(" TweakBar position='100 300' size='200 400' color='96 216 224' ");
- TwAddVarRO(bar, "X", TW_TYPE_FLOAT, &swietlik_x,
- " label='Os x' help='Width of the graphics window (in pixels)' ");
- return hRC;
- }
- //********************************************************
- // Glowna funkcja rysujaca.
- //********************************************************
- void DrawOpenGLScene( )
- {
- int i;
- /*GLfloat position[4]={10.0f, 10.0, 100.0f, 0.0f};
- //GLfloat position3[4]={5, 5, 5, 1};
- GLfloat position2[4]={0, -1 , 0};*/
- GLfloat position[4]={30.0f, 50.0, 15.0f, 1.0f};
- GLfloat position3[4]={15+porusz_x,15+porusz_y , 15+porusz_z, 1};
- GLfloat position2[4]={0, -1 , 0};
- GLfloat dookola[3]={1,1,1};
- GLfloat ambient[] = {.5f, .5f, .0f, alfa};
- GLfloat specular[] = {.5f, .5f, .0f, alfa};
- GLfloat rozchodzenie[]={0, 0, 0};
- GLfloat x;
- //tweak
- // 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, position3);
- glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, position2);
- glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 15);
- glEnable(GL_LIGHT0);
- glEnable(GL_LIGHTING);
- */
- // 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();
- glLightfv(GL_LIGHT0, GL_POSITION, position);
- glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, position);
- glLightfv(GL_LIGHT1, GL_POSITION, position3);
- glLightfv(GL_LIGHT1, GL_AMBIENT, ambient);
- glLightfv(GL_LIGHT1, GL_DIFFUSE, ambient);
- glLightfv(GL_LIGHT1, GL_SPECULAR, specular);
- glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, position2);
- glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 25);
- //glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, 0.0);
- glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 0.025);
- glTranslatef(porusz_x,porusz_y,porusz_z);
- glRotatef(-30,1,0,0);
- swietlik(15,15,15,2.5,2,2);
- swietlik_x=swietlik_x+porusz_x;
- swietlik_y=swietlik_y+porusz_y;
- swietlik_z=swietlik_z+porusz_z;
- //glEnable(GL_LIGHT0);
- glEnable(GL_LIGHT1);
- glEnable(GL_LIGHTING);
- //swiatlo sceny
- switch(swiatlo)
- {
- case 0:
- rozchodzenie[0]=0;
- rozchodzenie[2]=0;
- break;
- case 1:
- rozchodzenie[0]=-1;
- rozchodzenie[2]=1;
- break;
- case 2:
- rozchodzenie[0]=1;
- rozchodzenie[2]=-1;
- break;
- case 3:
- rozchodzenie[0]=1;
- rozchodzenie[2]=-1;
- break;
- }
- x=swietlik_x;
- glPopMatrix();
- TwDraw();
- glFlush ();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement