[3D] Help

0

Robie szkielet pomieszczenia w 13H w trojwymiarze, ustaliłem juz ten punkt w srodku monitora, symbolizuje go u mnie piksel (punkty odniesienia wg. twierdzenia talesa z XS,YS i zmienna D). Powiedzmy ze wszystko jest na swoim miejscu. Teraz moje pytanie. Jak chce narysowac linie w trojwymiarze prowadzaca w glab to musze ja narysowac takjak funkcje rosnaca. Ale skad wiem pod jakim kontem i w jakiej skali. Zakładam, ze linia w rzeczywistosci ma 4m. , to w skali 1:2 ma 2:) logiczne ale jak ja ulozyc w przestrzeni. No potrzebuje chyba 3 wsporzednych i kata . Nie wiem no help. Tylko stronek mam pod dostatkiem :&gt--Pozdrawiam
Gw

0

może tak, każdą rodzinę prostych w przestrzeni można scharakteryzować jako wektor jednostkowy (wersor) określający jednoznacznie kierunek w przestrzeni w jakim "leżą" wszystkie proste danej rodziny. Długość wersora jest z założenia równa 1 (moduł wersora). Wszystko czego ci zatem potrzeba to znajomość wersora, długości danej prostej (lini) i punktu początkowego w przestrzeni. Znając długość lini wiesz ile wersorów trzeba ustawić jeden za drugim aby otrzymać zadaną długość lini.
Doadawanie wektorów mam nadzieję masz opanowane :-) . Znając teraz punkt początkowy w przestrzeni obliczysz prosto punkt końcowy. A jak to już masz to chyba nic więcej ci nie trzeba ;)

Powodzenia--Michał
TJS group
delphi 5,6
" Praktyka - to jest wtedy gdy wszystko działa lecz nikt nie wie dlaczego
Teoria - jest wtedy gdy nic nie działa ale wszyscy wiedzą dlaczego,
My łączymy teorię z praktyką
NIC NIE DZIAŁA I NIKT NIE WIE DLACZEGO "

0

Pisałem kiedyś moduł 3D do Pascala i rysowanie linii zrobiłem następująco:

Bierzesz współrzędne początku i końca w 3D [x1, y1, z1] i [x2, y2, z2]. Przekształcasz je na 2D: wg odległości użytkownika od monitora ustalasz perspektywę, np: [320, 240, -500] i reszta jest prosta. Rozrysuj to sobie na kartce w rzucie z góry i będziesz miał wzór na zależność [x, y] od [x1, y1, z1] i położenia obserwatora. Mając współrzędne rzutów punktów na płaszczyznę monitora rysujesz po prostu linię.--Vogel [Delphi 6 PE]

Life is just a dream, you know...
[Cowboy Bebop]

0

Ok powiedzmy ze znam punkt poczatkowy i długosc lini. Ale jak wstawic ten wersor, tak jak miałbym wstawiac dana linie tyle ze w odpowiedniej proporcji? I skad wiadomo ile wersorow mam umiescic zeby wszystko sie zgadzało.?
Czy jest na to jakis przykład?
Dzieki za odpowiedzi, powoli mnie oswieca.--Pozdrawiam
Gw

0

G W napisał:

&gt Ok powiedzmy ze znam punkt poczatkowy i długosc lini. Ale jak wstawic ten &gtwersor, tak jak miałbym wstawiac dana linie tyle ze w odpowiedniej proporcji? I &gtskad wiadomo ile wersorow mam umiescic zeby wszystko sie zgadzało.?
&gtCzy jest na to jakis przykład?
&gtDzieki za odpowiedzi, powoli mnie oswieca.

Propocję to ty musisz ustalić tak aby móc obliczać odpowiednie odległości.

Jeżeli znasz długość lini, którą chcesz narysować to znasz ilość wersorów bo jest ona równa liczbowo długości lini. Tzn. jeżeli linia ma być długa na 12 jednostek miary to znaczy, że musimy użyć 12 wersorów ;) (wersor ma długość równą 1 jednostkę miary)

Znając teraz punkt początkowy lini w przestrzeni obliczasz gdzie jest jej punkt końcowy. Zaznaczam w przestrzeni!

No a potem wykonujesz rzut prostopadły na płaszczyznę ekranu (w efekcie otrymując
współrzędne początku i końca lini w płaszczyźnie ekranu)

pozdr --Michał
TJS group
delphi 5,6
" Praktyka - to jest wtedy gdy wszystko działa lecz nikt nie wie dlaczego
Teoria - jest wtedy gdy nic nie działa ale wszyscy wiedzą dlaczego,
My łączymy teorię z praktyką
NIC NIE DZIAŁA I NIKT NIE WIE DLACZEGO "

0

ec_mike napisał:
No a potem wykonujesz rzut prostopadły na płaszczyznę ekranu (w efekcie otrymując
współrzędne początku i końca lini w płaszczyźnie ekranu)

A czy rzut prostopadły uwzględnia perspektywę?--Vogel [Delphi 6 PE]

Life is just a dream, you know...
[Cowboy Bebop]

0

No wlasnie? A czy tym samym jesli obiore punkt koncowy znajac dlugosc linii to zawsze bedzie dobrze odwzorowane w przestrzeni? Jejq ale to skomplikowane :&lt--Pozdrawiam
Gw

0

Kiedyś coś takiego pisałem, jak znajdę to podeślę źródła...--Vogel [Delphi 6 PE]

Life is just a dream, you know...
[Cowboy Bebop]

0

Bardzo bardzo bardzo mi na tym zalezy. Prosiłbym z całego serca!!!--Pozdrawiam
Gw

0

Grekk w przestrzeni wszystko będzie ok. Ale Vogel ma rację, co do perspektywy trzeba najprościej rzutować na płaszczyznę w której znajduje się obserwator i potem znając odległość (zakładając ją) od niego do środka ekranu wykorzystać talesa do modyfikacji współrzędnych. {wstyd}

Vogel a ile przyjmowałeś, że ta odległość wynosi?

pozdrowienia i powodzenia--Michał
TJS group
delphi 5,6
" Praktyka - to jest wtedy gdy wszystko działa lecz nikt nie wie dlaczego
Teoria - jest wtedy gdy nic nie działa ale wszyscy wiedzą dlaczego,
My łączymy teorię z praktyką
NIC NIE DZIAŁA I NIKT NIE WIE DLACZEGO "

0

Mam wzór:

[X, Y, Z] - współrzędne w 3D
[x, y] - współrzędne na ekranie
[xo, yo, zo] - współrzędne obserwatora:

x = xo - (xo - X)[zo/(zo - Z)]
y = yo - (yo - Y)
[zo/(zo - Z)]

Chyba tak ...--Vogel [Delphi 6 PE]

Life is just a dream, you know...
[Cowboy Bebop]

0

Oki. Powiedzmy ze rozumiem. To teraz praktyka.
Mam linie o długości 3m. Punkt a(rozpoczecia) mam przy punkcie gdzie zaczyna sie siatka (p.w). Komenda do linii to
Line(x1,y1,x2,y2,color);
Jak zdefiniowac te linie na monitorze w 3d w 1024x768 - 13h? (czy tam jakiej obsluguje bo juz sie pogubilem z tym 3d, ale jak ktos mi odpowie rzeczowo to postawie browara :-).

Wiem ze mozecie oswiecic biedego zebraka :P

0

Jeżeli masz współrzędne w 3D to konwertujesz na 2D i rysujesz linię. To wszytko..
Czekam na {browar} :P --Vogel [Delphi 6 PE]

Life is just a dream, you know...
[Cowboy Bebop]

0

OK. ale:

  1. skad wziac TRZY wspolrzedne obserwatora - tzn ustawic powiedzmy ze moge, ale jesli chce wziac sobie stawic piksel w to miejsce no to kurde NIE da sie. A jesli je ustale na oko to dla kazdej linii musza byc takie same tak. Qrde nic nie czaje z tego. Dlaczego nikt nie moze podac konkretnego przykładu tylko ogólnikowo.

  2. NIE CZAJE TEGO - JAK MAM LINIE 3m. to skad mam wziac jej trzy wspolrzedne, to znaczy sześć bo poczatku i konca.

Dzieki za wszystko ale jestem za tempy na to, szkoda ze sie wysilaliscie na prozno :(
CH*J KLADE :(( !!.. --Pozdrawiam
Gw

0

jak mamy Ci lepiej wytłumaczyć jak nawet rysunku się nie da pokazać ! {glowa}

próba:

                             B 
                          *   +
                       *      +
                    *         +
                 *            +
              A               + 
                +             + 
                 +            +
                  +           +

------------x-----x------------------ EKRAN
+ +
+ +
+ +
+ +
+ +
+ +
+ +
Obserwator

Punkt A ma współrzędne [xA,yA,zA] punkt B[xB,YB,ZB]
Musisz znaleźć punkty X w płaszczyźnie ekranu, jak obliczyć patrz na wzory Vogela, a i pamiętaj, że to sytuacja w płaszczyżnie XY to samo obowiązuje w płaszczyźnie XZ czy YZ jak wolisz.
pozdr {hello}

--
Michał
TJS group
delphi 5,6
" Praktyka - to jest wtedy gdy wszystko działa lecz nikt nie wie dlaczego
Teoria - jest wtedy gdy nic nie działa ale wszyscy wiedzą dlaczego,
My łączymy teorię z praktyką
NIC NIE DZIAŁA I NIKT NIE WIE DLACZEGO "

0
  1. xo = max_ekranx /2
    yo = max_ekrany / 2
    yo = -jakaś liczba--Vogel [Delphi 6 PE]

Life is just a dream, you know...
[Cowboy Bebop]

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