Autor Wątek: Pozycja pomiędzy vertexami w GLSL  (Przeczytany 2377 razy)

Offline Vipa

  • Redaktor

# Październik 31, 2012, 16:14:51
Naszło mnie na jakieś dziwactwa z grafiką i mam jeden problem.

Zielone tło to kula R=2.0 w przekroju, niebieski punkt to środek, czerwony to badany punkt. Interesuje mnie odległość od środka do punktu. Kula jest 3D (heh), każdy rysowany punkt jest w stałej odległości promienia R=2.0 od środka. I teraz interesuje mnie odległość od środka do punktu, w 2D tak jak widać, ale z zachowaniem skali promienia kuli. Czyli na przykładowym rysunku wychodziło by na oko 1.2.
Narysowana już kula może być większa lub mniejsza na ekranie (zachowując stały promień, bo np. jest raz bliżej a raz dalej), stąd badanie odległości w 2D chyba mija się z celem.

Ma ktoś jakiś pomysł?

Offline Mr. Spam

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

Offline Avaj

  • Użytkownik

# Październik 31, 2012, 16:17:02
"każdy rysowany punkt jest w stałej odległości promienia R=2.0 od środka. I teraz interesuje mnie odległość od środka do punktu" wat

Offline Vipa

  • Redaktor

# Październik 31, 2012, 16:20:00
Tak, ale w 2D. Wynikowo na ekranie. W 3D to oczywiście stała.

Offline Liosan

  • Redaktor

# Październik 31, 2012, 16:30:11
Ale w jakim rzucie? Piszesz:
Narysowana już kula może być większa lub mniejsza na ekranie (zachowując stały promień, bo np. jest raz bliżej a raz dalej), stąd badanie odległości w 2D chyba mija się z celem.
czyli ... jak nie na ekranie to gdzie?

Liosan

Offline Vipa

  • Redaktor

# Październik 31, 2012, 16:39:31
No właśnie myślałem, że coś pomijam, że są jakieś przekształcenia.
Na chwilę obecną badam odległość w 2D i zastosowałem jakiś tam dobrany metodą prób i błędów mnożnik. Ale to mało profesjonalne raczej :).

Offline Pawelx156

  • Użytkownik

# Październik 31, 2012, 16:39:47
Jeśli dobrze rozumiem:
Chodzi  o kulę w przestrzeni 3D o promieniu r =2 ( jakaś jednostka)
Stąd raz jest mniejsza, raz większa w zależności od pozycji kamery.
Direct chyba ma metodę od liczenia dystansu między wektorami 3d.
W Xna mam vector3.Distance(v1,v2).


A jak chcesz na sucho liczyć to można to tak: Podam tobie na 2d analogicznie 3d to samo:
punkty: a=(x1,y1), b=(x2,y2);

odleglosc = sqrt((x1-x2) * (x1-x2) + (y1-y2) *(y1-y2));
dla 3d oblicza się jeszcze Z czyli (z1-z2) * (z1 -z2);

Chyba że cię źle zrozumiałem
« Ostatnia zmiana: Październik 31, 2012, 16:42:34 wysłana przez Pawelx156 »

Offline MrKaktus

  • Użytkownik

# Październik 31, 2012, 16:46:47
Vipa czy Ty masz na myśli że punkt czerwony w 3d jest na powierzchni sfery (w odleglosci stalej R od niebieskiego w 3d) a szukasz ich wzajemnej odleglosci na ekranie ?

Offline Vipa

  • Redaktor

# Październik 31, 2012, 16:52:08
@MrKaktus: tak, ale z zachowaniem wielkości kuli. Jeżeli na ekranie punkt ten jest w około odległości 1.2 od środka, to o tą wartość 1.2 mi chodzi.

Offline .c41x

  • Użytkownik
    • homepage

# Październik 31, 2012, 19:14:23
Ja bym najpierw sprawdził takie coś:
1. trzeba znaleźć punkt punkt który znajduje się na "brzegu" kuli (czyli jak mówisz punkt o wartości 2.0 - dokładnie równej promieniowi). Dokładniej mówiąc punkt na stycznej tej kuli, gdzie prosta stycznej przechodzi przez eye kamery.
2. masz 3 punkty: środek, ten który przed chwilą wyliczyłeś i punkt szukany - mnożysz każdy przez swoją macierz projekcji
3. wyliczasz proporcje biorąc za zmienną długość r kuli i wyliczone wcześniej punkty

Offline Kos

  • Użytkownik
    • kos.gd

# Październik 31, 2012, 19:26:53
Ale kula w rzucie perspektywicznym nie jest kołem, nie?

Offline Vipa

  • Redaktor

# Październik 31, 2012, 19:40:32
No właśnie. Przy za dużej perspektywie wychodzą mi owale na brzegach.
Ale znalazłem jakiś sposób teoretycznie, renderzyć kulę w trybie sphere map, gdzie textura jest gradientem od 1 do 0. Czyli im bliżej środka tym bardziej biało. Wystarczy wtedy zbadać kolor pixela i przemnożyć przez 2x promień. Dokładność co do setnej części koloru jest mi zbędna, więc powinno dać radę.
Jak będę przy kompie jakimś co obsłuży shader to sprawdzę.

Offline Vipa

  • Redaktor

# Październik 31, 2012, 20:37:50
A jak to się robi w deferred lightingu? Tam też w sumie rysuje się jednolitą sferę do point lights a wynikowo otrzymuje się płynne przejście?

Offline albireo

  • Użytkownik

# Październik 31, 2012, 21:02:59
W deffered rysuje się też normalne, a one nie ją już tak jednolite.

Offline Vipa

  • Redaktor

# Październik 31, 2012, 21:12:36
No tak, ale masz normale sceny, co one dają do natężenia światła w danym punkcie obrazu?

Offline .c41x

  • Użytkownik
    • homepage

# Październik 31, 2012, 23:46:37
Ale kula w rzucie perspektywicznym nie jest kołem, nie?
Jeśli styczna przejdzie przez jasno-niebieski punkt (rys.) to nie ma znaczenia.