Autor Wątek: Mozliwość tworzenia siatki brył i ich edycja  (Przeczytany 2895 razy)

Offline Reeevas

  • Użytkownik

# Październik 28, 2011, 17:25:33
Witam

Mam o to takie pytanie, czy używając Ogre3d mogę stworzyc siatkę brył np. kuli, sześcianu, czworościanu itp. i powiedzmy za pomocą myszy, wybrać jakiś punkt i przesunąc ten punkt gdzie w tym momencie bryła by się edytowała, zmieniając kształt? Poczytałem conieco o tym silniku i wiem, że mogę np. siatki wczytać z blendera, chodzi mi o stworzenie prostego "edytora siatki brył". Czy sam silnik posiada możliwość tworzenia siatek brył czy moze np. rozwiązaniem byłoby stworzenie siatek brył np. w blenderze i wczytanie ich do silnka, tylko czy później mógłbym je edytować już w mojej aplikacji (przy użyciu myszy) bez użycia blendera?

Offline Mr. Spam

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

Offline Kuba D.

  • Użytkownik

# Październik 28, 2011, 17:45:58
Skoro masz geometrie wczytana to mozesz z nia robic co chcesz - dodawac, usuwac, przesuwac, edytowac wierzcholki. Silnik graficzny zajmuje sie tylko wyswietlaniem tych danych - co Ty z nimi zrobisz to juz inna sprawa. Mozesz takze dynamicznie tworzyc geometrie ( np. proceduralnie ) czy nawet dynamicznie zmiejszac/zwiekszac jej szczegolowosc ( np. uzyteczne przy lod). A czy ona bedzie wczytana z blendera czy utworzona recznei w notatniku, zupelnie losowa - to Ogra nie interesuje - on ma dostac dane w odpowiednim formacie i ktore to dane nastepnie wyswietli.

Offline Reeevas

  • Użytkownik

# Październik 28, 2011, 18:07:56
Ok, ale czy sam silnik ma możliwość tworzenia geometrii, np. chciałbym stworzyć sitakę sześcianu i móc ją zagęszczać. Czy muszę tą siatkę (geometrię) stworzyć gdzie indziej, ewentualnie urzywając np. OpenGL. Chodzmi o to czy silnik ma możliwość tworzenia prymitywów.

Offline Liosan

  • Redaktor

# Październik 28, 2011, 18:16:54
Nie jest to hop-siup, ale za pomocą tego tutoriala udało mi się wygenerować siatkę sześcianu.

Liosan

Offline Reeevas

  • Użytkownik

# Październik 28, 2011, 18:23:04
Dzięki za szybkie podpowiedzi, docelowo miałby to być mini edytor siatek brył. Zaraz poczytam tutoriala, mam rozumiec że w takim razie będzie możńa tą siatkę również zagęszczać.

Offline Liosan

  • Redaktor

# Październik 28, 2011, 18:29:49
Ja nie wiem czy zagęszczanie on-the-fly będzie łatwe - to jest tutorial jak napisać własny resource loader (w moim i Twoim przypadku - proceduralny). Bardzo możliwe, że Ogre3d nie ma wsparcia do modyfikacji załadowanej siatki - co może oznaczać, że każda zmiana punktu będzie oznaczać odładowanie mesha z pamięci i załadowanie od nowa. Może to być problem, a może nie być - nie wiem. Wiem że ten tutorial pokaże Ci też, jak manipulować wewnętrznymi strukturami Ogre'a - a to Ci się tak czy siak przyda, jeśli się uparłeś na ten silnik :)

Liosan

Offline Kuba D.

  • Użytkownik

# Październik 28, 2011, 18:30:46
Jesli chcesz miec mozliwosc edycji bezposrednio kazdego wierzcholka ( jak sam nazwales - mini-edytor siatek) to nie ma co Ogra do tego zaprzegac bo to jest przerost formy nad trescia - znacznie szybciej i prosciej bedzie napisac to w openGL - jesli beda same wierzcholki ( bez texcoordow czy smoothing groups) to jest to wrecz bardzo proste.

Offline Reeevas

  • Użytkownik

# Październik 28, 2011, 18:39:53
Jesli chcesz miec mozliwosc edycji bezposrednio kazdego wierzcholka ( jak sam nazwales - mini-edytor siatek) to nie ma co Ogra do tego zaprzegac bo to jest przerost formy nad trescia - znacznie szybciej i prosciej bedzie napisac to w openGL - jesli beda same wierzcholki ( bez texcoordow czy smoothing groups) to jest to wrecz bardzo proste.

Wiem, że to nie ten dział, ale czy mógłbyś Kuba D. przybliżyc ten temat opengl podstawy jakieś mam, nie jestem ekspertem, ale jakieś prymitywy zrobie. W jaki sposób wykonać to? Jakieś podpowiedzi i co jest texcoord bo nie bardzo wiem? Hmm same wierzchołki no nie do końca mniej więcej mialoby to wyglądać tak jak na tym rysunku, z tymże bez wypełnienia, ale akurat to nie problem w opengl:

i później chciałbym móc edytować tą siatkę łapiąc za któreś "przecięcie"(vertex)może być wierzchołek ale docelowo bez róznicy i wyciągnąć dany fragment np. w bok przy czym zmienia się kształt figury.

Offline Kuba D.

  • Użytkownik

# Październik 28, 2011, 19:32:54
W openGL najprostsze podejscie mniej wiecej by to wygladalo tak :masz tablice wierzcholkow ( tutaj smialo mozna zastosowac dynamiczna strukture jaka jest np. std::vector i tablice indeksow - bo to ma byc siatka. i tylko na niej bedziesz operowac. Posiadajac wspolrzedne wierzcholka w latwy sposob mozesz sprawdzic ktory akurat jest pod kursorem myszy ( gluUnproject tutaj sie przyda - wtedy otrzymasz dwa punkty dla prostej o poczatku w punkcie kursora myszy na przedniej i tylnej plaszczyznie widoku) - jedziesz po calej tablicy z wierzcholkami i sprawdzasz ktory jest w okreslonej odleglosci ( to bedzie np. wielkosc brusha) od tej prostej - oczywiscie interesuja nas ten tylko, ktore jest najblizej nas. I masz punkcik ktory mozesz przesuwac ( analogicznie z prostokacikiem zaznaczenia - wtedy bedziesz mial 6 plaszczyzn i interesuja nas tylko te punkty ktore sa po okreslonej ich stronie). Renderowac cala siatke mozesz przy pomocy VBO ( Vertex Buffer Object), czy nawet prymitywnie poprzez glBegin() - glEnd().

Jesli zas chcesz modyfikowac gestosc siatek to od tego sa algorytmy roznego rodzaju, mozna nawet znalesc kody zrodlowe ktore przyjmuja tablice wierzcholkow i indeksow i wypluwaja przerobione dane, nic nie stoi na przeszkodzie zeby samemu tez takie algorytmy napisac, w blizniaczym temacie byly podane hasla z ktorymi trzeba sie zapoznac - generalnie to fajna zabawa Cie czeka z takim edytorkiem.

A dane ktore bedziesz edytowac - tutaj trzeba dynamicznie tworzyc kilka takich bryl ( ot - zabawa w rozmieszczenie kilkunastu punktow w przestrzeni) - tak jak to jest np. w Blenderze czy 3ds max -
wybierasz tylko wielkosc takiej bryly czy promiec kuli i viola - mozna sie bawic.

A co to takiego TexCoord ? - to wspolrzedna tekstury - jesli obiekty nie beda teksturowane to mozesz smialo je odpuscic ( bo komplikuja troszke cale zagadnienie).

Offline voytech

  • Użytkownik

# Październik 28, 2011, 23:39:15
http://www.ogre3d.org/tikiwiki/Tutorials a następnie Intermediate Tutoriar 2 i 3. Może to nie do końca to co chcesz, ale warto się zainteresować tą metodą:
Ray Ogre::Camera::getCameraToViewportRay
W wyniku otrzymasz promień, który pewnie można później wykorzystać do testowania.

Obczaj jeszcze ten tutorial: http://www.ogre3d.org/tikiwiki/Raycasting+to+the+polygon+level


Inna technika to nadanie każdemu wierzchołkowi unikalnego koloru a następnie renderowanie tylko samych wierzchołków z najprostszym piksel shaderem (0 tekstur, 0 oświetlenia, tylko kolor). Potem wykrywa się pozycję kursora myszy i z bufora kolorów odczytuje się wycinek wielkości np. 50x50 pikseli wokół tej pozycji. Następnie szukamy czy jest tam jakiś inny kolor niż tło, i wybieramy ten najbliżej kursora. Po kolorze możemy odgadnąć, który to jest wierzchołek a rysowanie z włączonym z-buforem zostawi na wierzchu punktu, który jest najbliżej kamery.

Punkty najlepiej rysować wielkości 3-5 pikseli, wtedy są lepiej widoczne przy edytowaniu