C# opengl nałożenie siatki na bryłę i edycja

0

Witam

1: Chciałbym aby ktos podpowiedział, w jaki sposób mogę nałożyć siatkę np. na kulę, sześcian w opengl. Wiem jak wyrysować sześcian, kulę itd. Chodzi o to, że po nałożeniu siatki chciałbym konkretny punkt (przecięcie linii pionowej i poziomej) edytować na tej bryle (czyli np. łapię kursorem za jakis punkt i go przesuwam wzdłuż osi x,y,z). Czy istnieją jakieś szybkie posoby na utworzenie takiej "edytowalnej siatki"? czy trzeba stworzyć powiedzmy VBO.
2: Czy jest możliwość wykorzystująć np. glurWireCube, glutWireCone, itd.... edycji konkretnego puntu, np. łapiąc go kursorem i wyciągnąć w zdłuż osi x,y,z.
Prosze o wyrozumiałość dopiero się uczę...
Środowisko visual studio 2008 c#, tao framework, scgl, freeglut.

1

1: Chciałbym aby ktos podpowiedział, w jaki sposób mogę nałożyć siatkę np. na kulę, sześcian w opengl. Wiem jak wyrysować sześcian, kulę itd. Chodzi o to, że po nałożeniu siatki chciałbym konkretny punkt (przecięcie linii pionowej i poziomej) edytować na tej bryle (czyli np. łapię kursorem za jakis punkt i go przesuwam wzdłuż osi x,y,z). Czy istnieją jakieś szybkie posoby na utworzenie takiej "edytowalnej siatki"? czy trzeba stworzyć powiedzmy VBO.

VBO nie jest sposobem na narysowanie siatki, jest tym od czego powinieneś zacząć... Jeśli te kule rysujesz sobie jakimś gluTeapot() to możesz zapomnieć o edytowaniu.
Kiedy masz już wszystkie vertexy w VBO (ew. Vertex Array które jest prostsze ale wolniejsze od VBO) To w momencie kiedy użytkownik naciska przycisk myszy sprawdzasz na którym vertexie jest kursor i zapisujesz. Następnie przesuwasz go aż do momentu kiedy użytkownik puści przycisk myszki. W tym czasie cały czas updateujesz dane w VBO/VA. Tylko tyle i aż tylę.

PS. Do openGL w C# polecałbym zamiast Tao raczej OpenTK, mi zdecydowanie bardziej podchodzi.

0

Ok czyli w sumie powinnienm wykorzystać vertexarray?? Czy może jeszcze cosinnego chodzi mi przede wszystkim o narysowanie siatkina kuli, (czy też kuli przy uzciu siatki) jakiegoś sześcianu i później edytowaniu go tak ja kwcześniej wspomniałem. W czym opentk jest lepsze od tao?

Powiedzmy, że wiem jak stworzyć ostrosłup przy uzyciu VertexArray i GL_TRIANGLES... teraz w jaki sposób dodać do niego siatkę, no nie mam żadnego pomysłu... nie wiem uzyc vertexpointer?

1

Zagiąłeś mnie. Jaką siatkę chcesz nakładać? Chcesz uzyskać coś takiego:?
user image

Nie musisz do tego nakładać siatki na nic, musisz po prostu zmienić ustawienia rysowania (np. rysować za pomocą LINE_STRIP).
Vertexpointer służy akurat do czegoś innego i jeśli faktycznie rysujesz coś na VertexArrayu to powinieneś wiedzieć do czego.

Najlepiej wrzuć kod to będzie wiadomo o co Ci chodzi...

0

Ej, weź sobie nie żartuj i zmień nick :>.

0

Co do nicku to sorry... używam go od dawnien, dawna a nie wiedziałem, że na forum jest już taki :) hehe ... ale nie ma problemu zmienię go.
Natomiast jeśli chodzi o siatkę to chcę uzyskać dokładnie coś takiego... :D no ale nie dokońca wiem jak.... wiem, że glpolygonmode służy do zmiany wyświtlania, ale do tego wszystkiego dochodzi to, że tworząc taką siatkę, czy też prostszą, sześcianu, prostopadłościanu, kuli.... chciałbym móc edytować konkretny punkt tak ja wspomniałem wcześniej... Byłbym wdzięczny jakby ktoś podał mi linka ewentualnie fragment kodu, w sumie bez różnicy czy c czy c++ , c#czy vb ... abym miał jakiś przykład prosty... jak tego dokonać albo żeby ktoś mnie nakierował. Przejrzałem sporo stron ale nie potrafię załapać jak takie cos wykonać. Jak stworzyć taką macierz gdzie będe miał podany każdy konkretny puntk, do którego będę mógł się później odwołac... MSM dokładnie chodzi mi o taką siatkę... (wiem np. że bok sześcianu mogę stworzyć używając dwóch trójkątów-->logiczne) ale jak zrobić taką siatkę i żebym mógł ją później edytować to nie mam pojęcia szukam, myślę, i nie mogę wymyślić... niech ktoś podpowie naprowdzi... dopiero zaczynam zabawę z opengl, ale łatwo się nie poddam... więc proszę o cierpliwość i zrozumienie....

A i jeszcze jedno, czy mogę stworzyć jedną klasę np. "siatka" i w jakissposób to wykorzystac do każdej z figór np. sześcianu, kuli itd. czy muszę, dla każdej figury towrzyć nowy obiekt.

Hmmm to jak podpowie ktoś, jak zrobić własnie coś takiego?? znaczy taką siatkę... powiedzmy "edytowalną" MSM?? jakaś podpowiedź?

0

jeżeli chodzi o to co napisał MSM

to w directX wygląda to tak

 device.RenderState.FillMode = FillMode.WireFrame;

w OpenGL

glPolygonMode(GL_FRONT, GL_LINE);
glPolygonMode(GL_BACK, GL_LINE);

?

0

Ok, ja wiem, że do rysowania linii, punktów, wypłenienia) służy polygon mode, ale ja bym chciał zrobić taka właśnie siatkę, jak pokazał MSM, z tym, że dla sześcianu... itd.
bo pisząc taki kod:

 
glBegin( GL_LINES );
    
   
    glVertex3f( 1.0, 1.0, 1.0 );
    glVertex3f( 1.0, - 1.0, 1.0 );
    
    glVertex3f( 1.0, - 1.0, 1.0 );
    glVertex3f( 1.0, - 1.0, - 1.0 );
    
    glVertex3f( 1.0, - 1.0, - 1.0 );
    glVertex3f( 1.0, 1.0, - 1.0 );
    
    glVertex3f( 1.0, 1.0, - 1.0 );
    glVertex3f( 1.0, 1.0, 1.0 );
    
    glVertex3f( - 1.0, 1.0, 1.0 );
    glVertex3f( - 1.0, - 1.0, 1.0 );
    
    glVertex3f( - 1.0, - 1.0, 1.0 );
    glVertex3f( - 1.0, - 1.0, - 1.0 );
    
    glVertex3f( - 1.0, - 1.0, - 1.0 );
    glVertex3f( - 1.0, 1.0, - 1.0 );
    
    glVertex3f( - 1.0, 1.0, - 1.0 );
    glVertex3f( - 1.0, 1.0, 1.0 );
    
    glVertex3f( 1.0, 1.0, 1.0 );
    glVertex3f( - 1.0, 1.0, 1.0 );
    
    glVertex3f( 1.0, - 1.0, 1.0 );
    glVertex3f( - 1.0, - 1.0, 1.0 );
    
    glVertex3f( 1.0, - 1.0, - 1.0 );
    glVertex3f( - 1.0, - 1.0, - 1.0 );
    
    glVertex3f( 1.0, 1.0, - 1.0 );
    glVertex3f( - 1.0, 1.0, - 1.0 );
    
    
    glEnd();

wyrysuje mi tylko 4 sician, a ja bym chciał stworzyć siatkę taką jak te jajko :D tylko, że dla sześcianu.

A moze muszę użyć tak jak w tym przykładzie Vertex array http://grafit.mech.pw.edu.pl/~bartnik/przyklady/wielokaty-p5.html tylko tutaj jest dla ostrosłupa.

1

Jak będę miał czas (obecnie piszę inny projekt i w tej chwili nie dam rady) to napiszę Ci prosty działający przykład z wyświetlaniem siatki obiektu (+ może edycja za pomocą myszki).

1 użytkowników online, w tym zalogowanych: 0, gości: 1