Jak zrobić kostkę w opengl
OpenGL to narzędzie programowania 3D, które umożliwia tworzenie złożonych obrazów trójwymiarowych z prostych form. Z tego artykułu dowiesz się, jak rysować, pomoże prostym kostce, które można obrócić w trzech wymiarach!
Kroki
Część 1 z 3:
Instalacja wstępnajeden. Zainstaluj OpenGL. Uruchom S Opengl Installation Guides w Twoim komputerze. Jeśli opengl i kompilator z tobą już masz, możesz pominąć ten krok i przejść do następnego.
2. Utwórz dokument. Utwórz nowy plik w ulubionym edytorze kodu i zapisz go jako MyCube.DO
3. Dodaj #inCludes. Oto główne dyrektywy #include, których potrzebujesz. Ważne jest, aby pamiętać, że dyrektywy dla różnych systemów operacyjnych są różne, dlatego konieczne jest wybór wszystkiego, aby program był uniwersalny i można go uruchomić w dowolnym systemie.
// obejmuje # obejmuje#Zawierać #Zawierać #Define gl_gelxt_prototypy # ifdef __apple __ # obejmuje # inaczej # zawierać #dek
cztery. Dodaj prototypy funkcjonalne i zmienne globalne. Następny krok zadeklaruje prototypów funkcjonalnych.
// funkcjonalny wyświetlacz prototypesvoid () - Voide Specialkeys () - // Global VarialblesDeble Rotate_y = 0-Double Rotate_x = 0-
pięć. Ustaw funkcję główną ().
Int Główny (INT Argc, Char * Argv []) // Inicjalizuj użytkownika Glut i Process User ParametersGlutinit (& ARGC, ARGV) - // Poproś o podwójne okno buforujące, buforowanie i schemat kolorów True colorglutinitdisplayMode (glut_double
Część 2 z 3:
Funkcja wyświetlacza ()jeden. Zrozumieć przypisanie funkcji wyświetlacza (). Wszystkie prace na rysunku Kuby spadną na delikatne linie tej funkcji. Idea ogólnie jest następujący: rysujesz sześć oddzielnych twarzy kostki i umieść je w odpowiednich pozycjach.
- Dla każdej powierzchni zdefiniujesz cztery kąt, a OpenGL łączy je z liniami i wypełnij wybrany kolor. Poniżej powie, jak to zrobić.
2. Dodaj funkcję GlcCear (). Przede wszystkim pracuję z tą funkcją, potrzebujemy Wyczyść kolor i bufor. Bez tego, pod nowym wzorem będzie widoczny stary, a obiekty pobierane przez program zostaną nieprawidłowo ułożone.
Wyświetlacz Void () GL_DEPTH_Buffer_bit)-
3. Dodaj Gbegin () i Glend (). Obiekty OpenGL to kombinacje różnych wielokątów. Zespół GBEGIN () Pozwól nam narysować obiekt z tobą - to jak ołówek, który wyciągasz postać, nie rozrywając go z papieru. Rozerwać ołówek z arkusza i zacznij rysować coś nowego, potrzebujesz zespołu Blend (). W tym artykule będziemy używać GL_POLYGON do narysowania każdej krawędzi sześcianu, chociaż możliwe jest użycie innych parametrów, takich jak GL_LINE, GL_QUAD lub GL_TRIANGLE, aby utworzyć inne formy.
// Multicolor Side - Frontglbegin (GL_POLYGON) - // Wersety Dodaj w następnym steps ()-
cztery. Dodaj funkcję GLTTTEX3F (). Teraz, gdy wyjaśniłeś program, który chcesz zacząć rysować wielokąt, potrzebujesz Ustaw wierzchołki Obiekt. Funkcja GLENTEX ma kilka formularzy, z których korzystanie zależy od tego, co zamierzasz zrobić z obiektem.
// Multicolor Side - Frontglbegin (GL_POLYGON) -GlverTex3f (-0.pięćdziesiąt.pięćdziesiąt.5) - // p1glvertex3f (-0.5.0.pięćdziesiąt.5) - // p2glvertex3f (0.5.0.pięćdziesiąt.5) - // p3glvertex3f (0.pięćdziesiąt.pięćdziesiąt.5) - // P4GLEND ()-
pięć. Dodaj funkcję GloColor3f (). Współpracuje na wiele sposobów podobnych do GlverTex. Punkty Możesz ustawić typy danych krótkich, liczb całkowitych, podwójnych lub pływających. Każdy kolor ma wartość od 0 do 1. Wszystkie zer są czarne, wszystkie jednostki - odpowiednio, białe. Figura 3 w Glicor3f () wskazuje schemat kolorów RGB bez kanału alfa. Kolory kanału alfa są odpowiedzialne za jego przejrzystość. Aby zmienić wartość kanału alfa, użyj Glicor4f () z ostatnim parametrem od 0 do 1, czyli, od nieprzezroczystej do przezroczystości.
// Multicolor Side - Frontglbegin (GL_POLYGON) -glolor3f (1.0, 0.0, 0.0) -glververtex3f (0.pięćdziesiąt.pięćdziesiąt.5) - // P1 Redglolor3f (0.0, 1.0, 0.0) -glververtex3f (0.5.0.pięćdziesiąt.5) - // P2 Greenglolor3f (0.0, 0.0, 1.0) -gverTEx3f (-0.5.0.pięćdziesiąt.5) - // P3 Blueglolor3f (1.0, 0.0, 1.0) -gverTEx3f (-0.pięćdziesiąt.pięćdziesiąt.5) - // P4 PurpleGlend ()-
6. Narysuj inne twarze Kuba. Lepiej, oczywiście, jeśli sam znajdziesz lokalizację reszty kostki i każdego z wierzchołków, ale ze względu na prostotę, którą je obliczyliśmy dla Ciebie. Kodeks jest podany B Ostateczny wyświetlacz funkcji () poniżej.
// Biała strona - Zastosowanie się (GL_POLYGON) -glolor3f (1.0,1.0, 1.0) -glververtex3f (0.pięćdziesiąt.pięćdziesiąt.5) -glververtex3f (0.5.0.pięćdziesiąt.5) -gververtex3f (-0.5.0.pięćdziesiąt.5) -gververtex3f (-0.pięćdziesiąt.pięćdziesiąt.5) -glend () - // Violet Side - Ruralglbegin (GL_POLYGON) -glolor3f (1.0,0.0,1.0) -glververtex3f (0.pięćdziesiąt.pięćdziesiąt.5) -glververtex3f (0.5.0.pięćdziesiąt.5) -glververtex3f (0.5.0.5.0.5) -glververtex3f (0.pięćdziesiąt.5.0.5) -glusz () - // zielony - leveglbegin (gl_polygon) -glolor3f (0.0,1.0,0.0) -gverTEx3f (-0.pięćdziesiąt.5.0.5) -gververtex3f (-0.5.0.5.0.5) -gververtex3f (-0.5.0.pięćdziesiąt.5) -gververtex3f (-0.pięćdziesiąt.pięćdziesiąt.5) -Glend () - // Blue Side - UpperGlugin (GL_POLYGON) -glolor3f (0.0,0.0,1.0) -glververtex3f (0.5.0.5.0.5) -glververtex3f (0.5.0.pięćdziesiąt.5) -gververtex3f (-0.5.0.pięćdziesiąt.5) -gververtex3f (-0.5.0.5.0.5) -glend () - // Red Side - Nizhnyglbegin (GL_POLYGON) -glolor3f (1.0,0.0,0.0) -glververtex3f (0.pięćdziesiąt.pięćdziesiąt.5) -glververtex3f (0.pięćdziesiąt.5.0.5) -gververtex3f (-0.pięćdziesiąt.5.0.5) -gververtex3f (-0.pięćdziesiąt.pięćdziesiąt.5) -Glend () - Glflush () - Glutswapbuffers ()-
Część 3 z 3:
Program interaktywnyjeden. Dodaj funkcję Specialkeys (). Zasadniczo wszystko jest prawie gotowe, ale sześcian jest rysowany i nie obraca się. Zrobić to, stwórz Funkcja specjalkamy (), który obróci kostkę, naciskając klawisze strzałek!
- Było to dla tej funkcji, że ogłoszono zmienne globalne ROTATE_X i ROTATE_Y. Po naciśnięciu klawiszy strzałek "Left" i "Prawy", wartość ROTATE_Y wzrośnie lub zmniejszy się o pięć stopni. Podobnie zmienimy wartość ROTATE_X, ale już naciskając klawisze strzałek "w górę" i dół.
Voide Specialkeys (Int Key, Int X, Int Y) {// Strzałka w prawo - Zwiększenie obrotu 5 stopni (klawisz == glut_key_right) ROTATE_Y + = 5 - // Strzałka w lewo - Redukcja obrotu 5 stopni, jeśli (klawisz == glut_key_left) ROTATE_Y - = 5 - ELAY IF (klawisz == glut_key_up) ROTATE_X + = 5-ELUMY IF (Key == glut_key_down) ROTATE_X - = 5 - // Wniosek o aktualizację EkrantizpozieszkodedplayPlay () -}
2. Dodaj GLOTATE (). Ostatnią rzeczą, jaką zrobimy, to dodać ciąg, który pozwoli nam obrócić obiekt. Wróć do funkcji Wyświetlacz () I przed opisaniem frontu, dodaj:
// Resetowanie TransformationSgloNetIdenity () - // Obrót Podczas wymiany wartości Rotate_x i Rotate_yglrotatef (ROTATE_X, 1.0, 0.0, 0.0) -glotatef (Rotate_y, 0.0, 1.0, 0.0) - // Multicolor Side - Front....
3. Dodaj następujące polecenia do dwukrotnego skalowania kostki wzdłuż osi X i Y, aby obrócić sześcian 180 stopni wzdłuż osi osi, jak również przesuwać sześcianę o 0,1 wzdłuż osi X. Upewnij się, że wszystkie odpowiednie polecenia, w tym wcześniej określone polecenia GLOTATE (), są określone we właściwej kolejności. Jeśli boisz się mylić, zobacz ostateczną wersję programu na końcu artykułu.
// Inne transformacjeGltransLatef (0.10.0, 0.0) -glotatef (180, 0.0, 1.0, 0.0) -glscalef (2.0, 2.0, 0.0)-
cztery. Skompilować i uruchom kod. Załóżmy, że używasz GCC jako kompilatora, więc wprowadź następujące polecenia do terminala:
W Linux: GCC Cube.C -O CUBE -LGLUT -LGL./ Mycuben Mac: GCC -O Foo Foo.C -framework Glut -Framework OpenGL./ Windows MyCube: GCC -Wall -Fooo foo.C -LLUT32CU -LGLU32 -Lopengl32./ Mycube
pięć. Sprawdź ostateczny kod. Oto ostateczny kod utworzony przez autora artykułu, w którym uwagi nie zostały przetłumaczone.
//// Plik: MyCube.C // Autor: Matt Daisley // Utworzona: 4/25 / 2012 // Projekt: Kod źródłowy do tworzenia kostki w OpenGL // Opis: Tworzy okno OpenGL i rysuje kostkę 3D //, którą użytkownik może obracać, używając Klawisze strzałek // // Sterowanie: Strzałka w lewo - Obróć w lewo // Strzałka w prawo - Obróć w prawo // W górę strzałki - Obróć w górę // Down-Rotuj w dół // --------------- -------------------------------------------- // obejmuje // - ----------------------------------------------------- - -------- # obejmuje#Zawierać #Zawierać #Define gl_gelxt_prototypy # IFDEF __apple __ # Uwzględnij # inaczej # dołączyć # endif // -------------------------------------------------- - ------------------------ // Prototypy funkcji // --------------------- -------------------------------------------- Void Display () - Void Specialkeys () - // ------------------------------------------------- ------------ // Globalne zmienne // --------------------------------- ----------------------------- Podwójny Rotate_y = 0-Podwójny Rotate_x = 0 - // --------- ------------------------------------------------- / / Wyświetlacz () Funkcja zwrotna / / ------------------------------------------- ---------------- Void Display () // Clear Screen i Z-BufferGlear (GL_COLOR_Buffer_bit // ------------------ ----------------------------------------------- () Funkcja zwrotna // - --------------------------------------------------- --------- voide Specialkeys (Int Key, Int X, Int Y) {// Strzałka w prawo - Wzrost obrotów o 5 stopni (klawisz == glut_key_right) ROTATE_Y + = 5 - // Strzałka w lewo - Zmniejszenie obrotu O 5 stopni, jeśli (klawisz == glut_key_ W lewo) ROTATE_Y - = 5 - ELAY IF (Key == Glut_key_up) ROTATE_X + = 5 - ELAY IF (Key == glut_key_down) Rotate_x - = 5 --// żądanie Wyświetl UpdateGlutrodisplay () -} // ------ ----------------------------------------------------- - - // Główna () Funkcja // ----------------------------------------- --------------------- int Główny (int Argc, Char * Argv []) Glut_Depth) - // Utwórz WindowGlutCreatów ("Niesamowite kostka") - // Enable Z-Buffer Głębokość Testglable (GL_DEPTH_TEST) - // Funkcje CallbackGlutdisplayFunc (Display) -GlutSpecialfunc (Specialkeys) - // Pass Control To Glut dla EventsGlutMainloop () - // Powrót do OSReturnOop-