Autor Wątek: [c++] Opengl opakowany w obiekty, czy warto?  (Przeczytany 39901 razy)

Offline Q

  • Użytkownik

# Czerwiec 14, 2014, 09:27:38
Zdecydowałem się na podział geometrii na faces:

Geometry geo;

// tworzenie trójkata
Faces f1(position, color, texpos, normal);
Faces f2(position, color, texpos, normal);
Faces f3(position, color, texpos, normal);

// dodawanie do geometrii
geo.add(f1);
geo.add(f2);
geo.add(f3);
/* albo
geo.add(f1,f2,f3);

*/
// wyczytywanie pozycji pierwszego wierzchołka:
vec3 pos = geo.faces[0].position;


Co o tym sadzicie?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline koirat

  • Użytkownik

  • +1
# Czerwiec 14, 2014, 12:54:05
Konstruktor tych Faces to mi bardziej wygląda na Vertex.

Offline Q

  • Użytkownik

# Czerwiec 14, 2014, 14:18:38
Cytuj
wygląda na Vertex:
...

// tworzenie trójkata
Vertex f1(position, color, texpos, normal);
Vertex f2(position, color, texpos, normal);
Vertex f3(position, color, texpos, normal);

Face face(f1, f2, f3);

geo.add(face);
...

Lepiej?

Offline Xirdus

  • Redaktor

# Czerwiec 14, 2014, 14:43:01
Pytanie co chcesz osiągnąć. Bo taki interfejs jak zaprezentowałeś wydaje mi się tak samo toporny, jak nie jeszcze gorszy od gołego OGL-a. Biblioteki wrapuje się po to, by uprościć interfejs i przenieść bibliotekę na wyższy poziom abstrakcji - tutaj nie widzę ani pierwszego ani drugiego.

Offline Q

  • Użytkownik

# Czerwiec 14, 2014, 15:19:52
No dzięki temu do raz już zdefiniowanej geometrii będzie można łatwo dostać się do odpowiednich danych i je modyfikować:

geo. face[1].vertex[2].color = vec4(0.3, 0.2, 05. 1.0);
Chyba że znacie prostszy sposób.

Offline remz

  • Użytkownik

# Czerwiec 14, 2014, 15:42:59
Jeśli ma to tak wyglądać, to Face raczej nie powinien zawierać wierzchołków, tylko indeksy do ich tablicy.

geo.vertices[face[0].v1].color = ...
Tu jest to dość prosto wytłumaczone:
http://msdn.microsoft.com/en-us/library/windows/desktop/bb147325(v=vs.85).aspx
« Ostatnia zmiana: Czerwiec 14, 2014, 15:48:58 wysłana przez remz »

Offline Rokuzo

  • Użytkownik
    • Masz na sprzedaż klucze do cs go?

  • +2
# Czerwiec 14, 2014, 15:49:47
Nie chcę nic mówić ale to wszystko możesz sobie o kant d*** rozbić, generalnie nie wiem czy ktoś już tego nie pisał, ale takie myślenie nad wprowadzeniem abstrakcji nad jakiekolwiek API, bibliotekę itd. bez dokładnej znajomości owej rzeczy to strzał w stopę.

Nie raz coś takiego próbowałem sobie wprowadzić, jakiś biedny framework czy coś ale powiem jedno, chociaż dużego doświadczenia generalnie nie mam. Daj sobie spokój, bo widzę, że nie masz zielonego pojęcia co robisz i do czego Ci się to przyda. Pisz w gołym OGL, z czasem, czy to za pierwszą grą, czy kolejną sam zobaczysz, które elementy można sobie "schować" i jak to zrobić, albo które się powtarzają, a które trzeba mieć na tacy. Właściwie to bezwiednie i tak w końcu wyjdzie Tobie coś na wzór właśnie takiego frameworka.

Jak dalej chcesz filozofować i wolisz pisać bezsensowne właściwie rzeczy to bierz źródełka jakiegoś silnika i możesz sobie pomyśleć, jak oni to zrobili.
« Ostatnia zmiana: Czerwiec 14, 2014, 15:55:05 wysłana przez Rokuzo »

Offline Q

  • Użytkownik

# Czerwiec 14, 2014, 16:16:05
Cytuj
geo.vertices[face[0].v1].color = ...
wydaje mi się że zapis:
Cytuj
geo. face[1].vertex[2].color = ...
jest bardziej czytelny, poza tym można łatwo i przejrzyście modyfikować właściwości wszystkich wierzchołków dla face:
geo. face[1].color(jakis_kolor);
Cytuj
Nie raz coś takiego próbowałem sobie wprowadzić, jakiś biedny framework czy coś ale powiem jedno, chociaż dużego doświadczenia generalnie nie mam. Daj sobie spokój, bo widzę, że nie masz zielonego pojęcia co robisz i do czego Ci się to przyda. Pisz w gołym OGL, z czasem, czy to za pierwszą grą, czy kolejną sam zobaczysz, które elementy można sobie "schować" i jak to zrobić, albo które się powtarzają, a które trzeba mieć na tacy. Właściwie to bezwiednie i tak w końcu wyjdzie Tobie coś na wzór właśnie takiego frameworka.

Jak dalej chcesz filozofować i wolisz pisać bezsensowne właściwie rzeczy to bierz źródełka jakiegoś silnika i możesz sobie pomyśleć, jak oni to zrobili.
Po pierwsze to że tobie sie nie udało nie znaczy że i mi sie nie powiedzie.
Ja wole obiektowość bo zaczynałem od JS -> Java -> C++ dlatego męczy mnie goły opengl i wprowadza jakieś takie uczucie chaosu.
Po 2 to że ktoś napisał silnik nie znaczy że zrobił to dobrze, nie raz brałem kod który potem musiałem przerabiać bo był kiepsko napisany. Dlatego wole wszystko dobrze przemysleć. 
Po 3 ja już sie wzoruje na threejs Bo mi sie ta biblioteka podobała, ale chciałbym dodać większa konsekwencje tak jak w javie gdzie wszystko jest klasą.

Offline Xirdus

  • Redaktor

# Czerwiec 14, 2014, 18:12:35
wydaje mi się że zapis:
(...)
jest bardziej czytelny, poza tym można łatwo i przejrzyście modyfikować właściwości wszystkich wierzchołków dla face
Problem w tym, że po dodaniu vertexa do geometrii zazwyczaj NIE będziesz już go modyfikował.

Po 2 to że ktoś napisał silnik nie znaczy że zrobił to dobrze, nie raz brałem kod który potem musiałem przerabiać bo był kiepsko napisany. Dlatego wole wszystko dobrze przemysleć.
A skąd pewność że ty, dopiero raczkujący w OGL, zrobisz to lepiej niż oni?

Offline Xion

  • Redaktor
    • xion.log

  • +1
# Czerwiec 14, 2014, 18:27:13
Cytuj
Po pierwsze to że tobie sie nie udało nie znaczy że i mi sie nie powiedzie.
Cytuj
Ja wole obiektowość (...) dlatego męczy mnie goły opengl i wprowadza jakieś takie uczucie chaosu.
Cytuj
Po 2 to że ktoś napisał silnik nie znaczy że zrobił to dobrze, nie raz brałem kod który potem musiałem przerabiać bo był kiepsko napisany. Dlatego wole wszystko dobrze przemysleć.
Gratulacje, w tym jednym poście zdołałeś zawrzeć chyba wszystkie błędne przekonania, które charakteryzują domorosłych silnikologów na Warsztacie, klepiących fafnasty endżyn kolejną już dekadę, i nigdy niekończących żadnych gier :)

Offline Q

  • Użytkownik

# Czerwiec 14, 2014, 18:48:16
Cytuj
Problem w tym, że po dodaniu vertexa do geometrii zazwyczaj NIE będziesz już go modyfikował.
No tu się nie zgodzę, w threejs brałem standardową geometrie cuba i modyfikowałem ją do swoich potrzeb.
Więc możliwość łatwego i czytelnego modyfikowania bardzo mi się przyda. I zapewne nie tylko mi.
Cytuj
A skąd pewność że ty, dopiero raczkujący w OGL, zrobisz to lepiej niż oni?
Bo jestem geniuszem :D
A na serio to ostatnio ściągnąłem jakiś program z tutorialu na jakieś podstronie wikipedii, nie dość że się nie chciał skompilować to naszpikowany był błędami. Skoro coś z tak zaufanego źródła było napisane ot tak sobie to co z innymi rzeczami.
W dodatku biblioteka nad która pracuje to niejako efekt uboczny innego projektu który ma z niej korzystać więc w moim interesie jest by działało to szybko i sprawnie.
Cytuj
Gratulacje, w tym jednym poście zdołałeś zawrzeć chyba wszystkie błędne przekonania, które charakteryzują domorosłych silnikologów na Warsztacie, klepiących fafnasty endżyn kolejną już dekadę, i nigdy niekończących żadnych gier :)
Widzisz, ja już miałem napisany silnik ale postanowiłem przepisać go na c++
Tutaj masz wersje 1.5 https://www.youtube.com/watch?v=oXkiGrfIi_Y
Udało mi się go podciagnąć do wersji 9.* więc był bardzo zaawansowany, niestety bazował na JS, nie chciałem się zastanawiać czy dało by rade coś więcej z niego wyciągnąć i od razu skoczyłem do c++.
Może nie umiem za wielu rzeczy ale wszystkie te braki nadrabiam uporem i determinacją i jestem skłonny się  z Tobą założyć że do końca tego roku będziesz mógł już sobie pograć w moją gre.

Offline Xirdus

  • Redaktor

# Czerwiec 14, 2014, 21:24:16
No tu się nie zgodzę, w threejs brałem standardową geometrie cuba i modyfikowałem ją do swoich potrzeb.
Dla testów czy do gry? Jeśli do gry, to czy modyfikowałeś tego cube'a po wstępnym przygotowaniu sceny?

jakiś program z tutorialu na jakieś podstronie wikipedii
coś z tak zaufanego źródła
-.-
Miałem na myśli nie jakieś demka z tutoriali, tylko SFML, Ogre, Irrlicht czy inne "prawdziwożyciowe" rzeczy.

W dodatku biblioteka nad która pracuje to niejako efekt uboczny innego projektu który ma z niej korzystać więc w moim interesie jest by działało to szybko i sprawnie.
Bardzo dobre podejście - pisać bibliotekę razem z grą. Z tym że lepiej nie uogólniać - nie rób tej biblioteki jako osobnego tworu, tylko niech tworzy z grą spójną całość, i celem twoim niech nie będzie pisanie biblioteki, tylko pisanie gry - w sensie nie dodawaj do biblioteki żadnych elementów których w grze nie używasz. Potem jak skończysz możesz się zastanowić nad przerobieniem na osobną binarkę.

Offline Rokuzo

  • Użytkownik
    • Masz na sprzedaż klucze do cs go?

# Czerwiec 15, 2014, 01:00:56
Już dawno temu widziałem demko z AO w WebGL, który renderował 2x tyle klocków przy około 60 fpsach :) (tak three.js, jeżeli go tutaj użyłeś to jest to jakiś fail) No ale bez specyfikacji Twojego komputera, wersji przeglądarki itp. itd. wiele się tutaj wypowiadać nie będę.

Co do wiki to daj lepiej linka do tego kawałka kodu :) No i czekam na Twoją wypasioną grę.
« Ostatnia zmiana: Czerwiec 15, 2014, 01:07:57 wysłana przez Rokuzo »

Offline lethern

  • Użytkownik

  • +1
# Czerwiec 15, 2014, 06:32:03
Cytuj
Ja wole obiektowość bo zaczynałem od JS -> Java -> C++

javascript? A co ma obiektowość do javascript? Podobnie Java, widziałem tysiące linijek kodu STRUKTURALNEGO napisanego w Javie. C++ tu też niczego nie zmienia...
Kod obiektowy to nie znaczy kod z dużą ilością słówek "class", już pomijając fakt, że pisanie obiektowo nie zawsze jest najlepsze (co już było wyżej przez pewne osoby wspomniane).

Co do
Cytuj
jestem geniuszem
to się zgodzę, ale geniuszem zua ;)

Offline Q

  • Użytkownik

# Czerwiec 15, 2014, 08:31:05
Cytuj
Jeśli do gry, to czy modyfikowałeś tego cube'a po wstępnym przygotowaniu sceny?
Tak. Ze zmodyfikowanych cubów tworzyłem geometrie chunku i dołanczałem ją do sceny, w wersji 1.5 działalo to topornie, po wersji 8.* wyglądało to imponująco :) Szkoda że nie chciało mi sie nagrywać filmików :(
Cytuj
Już dawno temu widziałem demko z AO w WebGL, który renderował 2x tyle klocków przy około 60 fpsach :)
Na filmiku jest wersja 1.5, doszedłem do wersji 9.6 więc wyobraź obie postęp jakiego dokonałem.
Cytuj
(tak three.js, jeżeli go tutaj użyłeś to jest to jakiś fail)
Tak użyłem, dlaczego fail?
Tutaj masz maksymalny widok jaki dało mi sie wygenerować, poza ta granice miałem poniżej 25 fps
https://scontent-b-fra.xx.fbcdn.net/hphotos-xpa1/t1.0-9/1381938_389034134532549_1682444610_n.jpg
Nie wygląda imponująco ale widok odpowiada około 120%-140% standardowego w minecrafcie.
Cytuj
No ale bez specyfikacji Twojego komputera, wersji przeglądarki itp. itd. wiele się tutaj wypowiadać nie będę.
To było robione na 6-cio letnim komputerze, procesor intel pentium core 2 duo, karta jakaś nvidia z 512 mb (nic specjalnego)
Cytuj
Co do wiki to daj lepiej linka do tego kawałka kodu :)
Nie zachowałem strony, ja trzymam wszystko na kartach i nie zapisuje do zakładek. jak zamknę karte to po jakimś czasie trudno jest mi znaleźć to w histori ale obiecuje że jak się znów na niego natkne to dam ci linka
Cytuj
Cytuj
javascript? A co ma obiektowość do javascript? Podobnie Java, widziałem tysiące linijek kodu STRUKTURALNEGO napisanego w Javie
Może i widziałeś, a ja pisałem w tych językach. Samo używanie drzewa DOM jest zorientowane obiektowo, powiedz jak można pisać w JS nie posługując się DOM, no chyba że używasz czegoś z rodzaju nodejs, ale i tam wszystko kreci sie wokół obiektów. Co do javy to wszem można pisać strukturalnie ale nikt tego nie robi.
Cytuj
No i czekam na Twoją wypasioną grę.
hmm pewnie nie będzie wypasiona i pewnie nikt w nia nie bedzie grał poza mną bo zazwyczaj moje projekty przechodzą bez większego echa.
Robie to po to by sie czegoś nauczyć, zrozumieć jak to działa.