logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak wyświetlić prostopadłościan 3D w Delphi z danymi z RS232?

Adas1983 13 Lip 2005 16:37 2480 3
REKLAMA
  • #1 1650972
    Adas1983
    Poziom 11  
    Posty: 27
    Chcę napisać program, który wyświetlałby prostopadłościan na ekranie (w pseudo 3D) w położeniu zależnym od danych pobieranych z zewnątrz, w tym przypadku z RS232, ale mniejsza o to.
    No i problem w tym, że nie chcę "odkrywać Ameryki" i główkować nad algorytmem określającym współrzędne wierzchołków figury.
    Program chcę napisać w Delphi, dlatego jeżeli ktoś spotkał się z komponentem umożliwiającym wyświetlić coś takiego lub ma pomysł na algorytm to bardzo proszę o pomoc.

    Przeglądając znalazłem coś podobnego do tego co chcę zrobić (a nawet identyczne): http://layer.uci.agh.edu.pl/pl/dydaktyka/lab-sens/cw8.html
    Pozdrawiam, Adam.
  • REKLAMA
  • #2 1661541
    lazier
    Poziom 12  
    Posty: 96
    Pomógł: 1
    hmm wprawdzie nie wiem jak Ci pomoc, ale moze Ty mi pomozesz..skad mozna taki Układ ADXL sobie zalatwic?
  • REKLAMA
  • Pomocny post
    #3 1661721
    shg
    Poziom 35  
    Posty: 2289
    Pomógł: 339
    Ocena: 134
    Czyli zapewne chodzi Ci o projekcję 3D->2D, a jest to rzecz banalna ;)

    Założenia są takie: środek układu współrzędnych, to środek ekranu. oś X w prawo, Y do gólry, Z od obserwatora do monitora.

    x2 = w*x3/z3
    y2 = h*y3/z3

    z dwójką - współrzędne 2D
    z trójką - współrzędne 3D
    wszystkie względem środka ekranu
    w i h - odpowiednio szerokość i wysokość ekranu
    W zasadzie to jest taka najprostsza wersja, a zamiast w i h stosuje się też odpowiednio "spreparowane" wartości określające pole widzenia (FOV), które poniekąd są związane z rozmiarami ekranu (zarówno fizycznymi, jak i "pixelowymi", oraz uwzglądniają odległość płaszczyzny projekcji od obserwatora (wirtualnej kamery))

    środek twojego prostopadłościanu umieszczasz gdzieś na dodatniej części osi Z, tak, aby zawsze był widoczny tzn. żeby w żadnym wypadku nie doszło do tego, że jakaś jego część znajdzie się poza widocznym obszarem przestrzeni, no chyba, że chcesz się bawić w algorytmy w stylu przycinanie Sutherlanda-Hodgmana, czy ewentualnie prostsze przycinanie do płaszczyzny Z.
    Jedyne, o czym musisz pamiętać, to żeby nigdy współrzędna Z wierzchołka nie była mniejsza, lub równa zero. W zasadzie to rysowany obraz może wychodzić poza krawędzie poziome i pionowe, tylko musisz dopilnować, żeby algorytm rysujące linię sobie z tym poradził (chyba każdy system operacyjny oferuje taką możliwość)

    W google poszukajj o projjekcji 3D.
    Obroty takiego prostopadłościanu można zrobić na kilka sposobów. Po pierwsze wartości otrzymane z czujnika przeliczyć na kąty (funkcja arcussinus), ale to jest kombinowanie dookoła, chyba, że zależy Ci na wyświetleniu tych wartości
    Drugie - mając sinusy i cosinnuusy kątów dokonać obbrotu wszystkich wierzchołków prostopadłościanyu względem jego środka. Wszystko sprowadza się do operacji mnożenia współrzędnych przez wartości funkcji trygonometrzycznych.
    Przykład w 2D:
    chcemy obrócić punkt (x, y) o kąt a, współrzędne obróconego punktu to (x', y'), obrót wykonujemy na płaszczyżnie X-Y, czyli wokół osi Z:
    x' = x * cos(a) - y * sin(a)
    y' = y * cos(a) + x * sin(a)
    chyba tak to wygląda, tak na oko z głowy napisałem ;)

    Do tak prostej aplikacji jest to chyba najlepszy sposób.
    Trzy - bardziej skomplikowane - tzw. macierze projekcji. W sumie to jest to samo, co powyżej, ale zapisane w formie mnożenia macierzy przez wektor. wektor reprezentuje pozycję punktu, macierz określa kierunek obrotu i skalę, dzźki czemu można wszystko zrobić za jednym zamachem, ale żeby obrócić tylko kilka punktów nie ma co się w macierze bawić :)
    Tu masz gotowe procedury do takich operacji na macierzach:
    http://www.makegames.com/3drotation/3dsrce.html

    A tu jest wszystko, czego potrzebujesz, ale po angielsku:
    http://www.faqs.org/faqs/graphics/algorithms-faq/
  • #4 1671732
    lazier
    Poziom 12  
    Posty: 96
    Pomógł: 1
    hmm wprawdzie nie wiem jak Ci pomoc, ale moze Ty mi pomozesz..skad mozna taki Układ ADXL sobie zalatwic?
REKLAMA