OPEN GL pracownia 1

vertex - obliczenia na krawedziach

Drugi - obliczenia na pixelach

Cyzczenie buforow

-----

glClearColor(0.0f, 0.0f, 0.0f, 0.0f); <- wyczysc bufor tym kolorem()

glClear(GL_COLOR_BUFFER_BIT);

---

uzyj programu o nazwie the program

glUseProgram(theProgram);

____

Dane do wystartowania programu

glBindBuffer(GL_ARRAY_BUFFER, positionBufferObject); <- dane zwiazane z wiercholkami ( obiekt)

glEnableVertexAttribArray(0); <- atrybut numer 0, uruchamiamy go

glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0); <- wypelniamy go, mowi co to jest za atrybut.

4 floaty mowia o polozeniu wierzcholka

^^^^^^^^^^

Bufory- cos do przechowywania atrybutow o wierzcholakach i pizelach?

glGen -> towrzymy pudelko

glBind -> otwieramy to pudelko [ mozna tez laczyc elementy]

glData -> wypelniamy pudelko

np stworzymy kilka pudelek, wybieramty jedno i uzyjemty komendy bind do wybrania konretnie jednego pudelka, mozna tezs uzyc go ponownie do otwarcia innego pudelka a te poprzednie bedzie zamkniete, jeli po prostu checmy je zamknac to bindujemy do zera.

glBindBuffer(GL_ARRAY_BUFFER, positionBufferObject); <- pozycje wierzcholkoow

glBufferData(GL_ARRAY_BUFFER, sizeof(vertexPositions), vertexPositions, GL_STATIC_DRAW);

^^

Odwolujemy sie do podelka i wprowadzamy dane, wkladamy do pudelka np wielkos, VertexPosition -> tablica jednowymiarowa

Z poprzedniego

glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0); informacje o tablicy

( grupujemy w czworki grupuy zero, floaty, od poczatku, bez przerw)

_______

Zamiast 3 danych xyz mamy w opengl 4y dane

XYZW- ta czwarta dana jest do macierzy. wspolrzedne jednorodne.

xyz-> przestrzen 3d,

W-> sprawia ze sa to dane jednorodne, mozna latwiej operowac wtedy na macierzach

W ma jedynki na poczatku obecnie, na koncu trzeba sie go pozbyc, nie zawsze bedzie 1, wplywa na xyz.

Taki iz po przejscu z jednego shadera na drugi, dane nam sie zamieniaja na dane 3d w postaci x/w, y/w , z/w. Tego nie ttrzeba juz dzielic.

Open gl musi sobie przez 4ta zmeinna podzielic.

____

jak juz mamy wypelniony bufor czyli

,,glEnableVertexAttribArray(0);

glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);

"

Mozna narysowac trojkat

,,glDrawArrays(GL_TRIANGLES, 0, 3);" bierze 3 wierzcholki i utworzy z nich trojkaty, mozna tez rysowac inne rzeczy.

____

glDisableVertexAttribArray(0); usuniecie atrybutow

glUseProgram(0); usuniecie programu

___

openggl uzywa 2ch buforwov

glutSwapBuffers();

jeden ktory liczy drugi ktory wyswietla? WTF?

______________

Shader, 1.3

#version 330 -> wersja jezyka

layout(location = 0)

in vec4 position;

//szereg danych wejsciowych i wyjsciowych.

//tu mamy tylko wejsciowe

//In na wejscie

//out wyjsciowe

//Tu mamy wejscie z bufora

//pobieramy jako dane wejsciowe dane z atrybutu zero, czyli nasze czworki floatow

void main()

{

gl_Position = position;

}

//Tu przepisujemy dane na wyjscie

gl_Position -> to wyjsciowa pozycja, czyli nasze x,y,z czyli wpisanie naszych danych na wierzchołki

Fragment shader

Tu wchodzą wszystkie dane z shadera, nadaje on tu kolory w najprostszej wersji.

#version 330

Wersja

out vec4 outputColor;

4o wymiarowe dane o kolorze

outputColor = vec4(1.0f, 1.0f, 1.0f, 1.0f);

Stworzenie z 4 floatow jednej danej typu vec 4.

_______
Jak zrobić by shadery dzialaly na karcie

------ROZDZIAŁ 2 ____------

out vec4 outputColor;

jedna zmienna ywjsciowa

outputColor = mix(vec4(1.0f, 1.0f, 1.0f, 1.0f),

vec4(0.2f, 0.2f, 0.2f, 1.0f), lerpValue);

Zmienna wyjsciowa jest bardziej skomplikowna,m używamy funkcji mix która zsluzy do wymieszania

(1.0f, 1.0f, 1.0f, 1.0f),

Kolor biały

vec4(0.2f, 0.2f, 0.2f, 1.0f),

Szary

lerpValue);

Teta? Wtf?

[ odwolywanie się do wektrowo 4o wymiarowych vec 4. Można bezpośrednio do jednego wymiaru typu vector.x lub vector.xy]

gl_FragCoord.y

To już nie sa nasze wspolzedne typu -1/ 1. To sa już wspolzedne fragment position, wspolzedne okna.

Jest to konieczne.

Ze znormalizowanych ( -1 do 1) na wspolrzedne okna-> na pixele

gl_FragCoord.y / 500.0f

Jeśli mielsmy okno o szerokości 500 to dzieląc przez 500.0f uzyskamy wartości z przedzialu 0<->1 WTF?

Oprocz wspolrzednych możemy tez podawac kolory.

const float vertexData[] = {

0.0f, 0.5f, 0.0f, 1.0f,

0.5f, -0.366f, 0.0f, 1.0f,

-0.5f, -0.366f, 0.0f, 1.0f,

1.0f, 0.0f, 0.0f, 1.0f,

0.0f, 1.0f, 0.0f, 1.0f,

0.0f, 0.0f, 1.0f, 1.0f,

Dla każdego wierzchołka mamy inny kolor.

____

Pierwsze 3 czworki to wierzchołki , reszta to kolory. Trzeba to openglowi powiedzieć

glEnableVertexAttribArray(0);

glEnableVertexAttribArray(1);

Atrybu zero polozenie wierzchołka

Attrybuy 1 kolloory

glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);

glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, (void*)48);

Artrybut zero, jedziemy bez przerw.

Dla atrybutu 1, jest przesuniecie o 48, czyli informacja o tym co jest kolorami.

glDisableVertexAttribArray(0);

glDisableVertexAttribArray(1);

Wyczyszczenie atrybutow pierwszego i drugiego.

glutPostRedisplay();

Wymus odswierzenie obrazu? Wtf

Vertex shader pobiera dane z buforw

Fragment shader pobiera info z Vertexa

smooth out vec4 theColor;

definiujemy tak dane wyjściowe

theColor = color;

w ten sposób informujemy fragment shadera ze ma pobrać dane z vertexa.

smooth

To rodzaj interpolacji, gładkie przejście z jednego koloru na drugi


Wyszukiwarka

Podobne podstrony:
Open GL Pierwszy program
Open GL Podstawy
Open GL pomoc Zapis
kurs open gl
Open GL Pierwszy program
Open GL Podstawy
Jak pracowac z dzieckiem niedowidzacym
Czy rekrutacja pracowników za pomocą Internetu jest
29 Zdolność pracownicza
organizacja ucząca się­ szkolenia pracowników
Chory pracownik
Pracownicy wobec pracy
Motywowanie pracownikow
3Zaocz Człowiek na rynku pracy zespół pracowniczy

więcej podobnych podstron