Autor Wątek: [java, opengl] jak odkryć na jaki obiekt patrzy gracz?  (Przeczytany 3926 razy)

Offline Kos

  • Użytkownik
    • kos.gd

# Sierpień 22, 2011, 15:22:43
Z-test to inaczej depth test, poczytaj o nim na http://en.wikipedia.org/wiki/Depth_test. W OpenGL kontrolujesz go przez glEnable/glDisable(GL_DEPTH_TEST) oraz przez funkcję glDepthFunc. Poczytaj o tym koniecznie!

Ustawienie na equal już po narysowaniu sceny spowoduje, że test przejdą jedynie piksele mające taką samą głębokość, jak te już narysowane - czyli te należące do obiektów najbliżej kamery.

Scissor test to prosty test pozwalający na odrzucenie wszystkich pikseli spoza wyznaczonego prostokąta na ekranie. Tutaj używa się go zaznaczając jedynie prostokąt 1x1 pod kursorem.

Offline Mr. Spam

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

Offline DarkPeter

  • Użytkownik

# Sierpień 22, 2011, 16:09:06
Ok. Spróbuję.
Mam jeszcze jedno pytanie nie do końca związane z tematem, a mianowicie myszka...
Do tej pory w moim FPS'ie ukrywałem myszkę za pomocą:
Mouse.setGrabbed(true);
Oraz "trzymałem myszkę w jednym miejscu" za pomocą tego:
Mouse.setCursorPosition(50, 50);
Potem kolejne ruchy myszką odczytywałem własnoręcznie napisaną funckją.
I tu pytanie: czy ten sposób jest dobry? Co zrobić żeby myszkę zablokować zawsze dokładnie na środku okienka z wyświetlaną grą?
PS: I dla pewności: na szybko szukałem funkcji do odczytywania koloru piksela na ekranie. Czy ta funkcja jest dobra: "glReadPixels"?

Offline Xirdus

  • Redaktor

# Sierpień 23, 2011, 00:09:00
Jeśli znasz rozdzielczość gry to bardzo łatwo ustawić kursor na środku ekranu - minimum matematyki, proszę ciebie. A jeśli nie znasz, cóż... robisz coś nie tak ;)

Offline DarkPeter

  • Użytkownik

# Sierpień 23, 2011, 11:45:51
Jeśli znasz rozdzielczość gry to bardzo łatwo ustawić kursor na środku ekranu - minimum matematyki, proszę ciebie. A jeśli nie znasz, cóż... robisz coś nie tak ;)
No tak, ale ja chciałbym dopasować sobie tą grę do każdego ekranu a nawet zrobić tryb fullscreen :) A wiadomo wiele ludzi ma inną rozdzielczość niż ja :)

Offline dzemeuksis

  • Użytkownik
    • Blog quodmeturbat

# Sierpień 23, 2011, 12:04:16
Nie operuj określoną rozdzielczością, tylko proporcjami. Rozdzielczość ekranu, na którym uruchomiono grę, jest znana - istnieje wiele sposobów, na jej odczytanie i przypisanie do zmiennych, którymi operujesz dalej w programie.

Offline Pomnico

  • Użytkownik
    • Magic-Ars

# Sierpień 23, 2011, 12:26:18
Podobnie jak aktualny rozmiar obszaru roboczego okna jeśli gra działa w trybie okienkowym

Offline Shusty

  • Użytkownik

# Wrzesień 12, 2011, 22:34:24
Co do tego kursora na środku ekranu:
Pewnie masz przyłączonego listenera, kiedy myszka się ruszy odbierasz zdarzenie i obliczasz o ile się przesunął kursor względem środka ekranu - potem o tą wartość przesuwasz kamerę i na koniec obsługi zdarzeń ustawiasz kursor znów na sam środek. W javie czyni się to za pomocą Obiektu klasy Robot (pozwala ona na emulowanie w systemie różnych rzeczy np. myszki)np.:

Robot robot = new Robot();
robot.mouseMove(x,y); //zmieniamy położenie myszki na środek (x i y po prostu pobierasz wysokość i szerokość dzielisz przez 2 i masz współrzędne środka. )



Offline Shusty

  • Użytkownik

# Wrzesień 12, 2011, 22:38:15
A jeśli chodzi o to czy obiekt jest na celu czy nie: sprawdzamy kolizję. tworzymy niewidzialną linię od celownika na wprost i sprawdzamy kolizje obiektu z tą linią. (oczywiście nie musimy tworzyć linii to tak dla zobrazowania). Ktoś zresztą ładnie opisał już to jako hitscan.

Jeśli jest kolizja to np. podświetlamy coś, że jest na celowniku.

Offline Timati

  • Użytkownik

# Wrzesień 12, 2011, 23:39:26
Ja polecam line of sight. Prowadzisz linie od środka ekranu czy skąś o n-długosci od gracza. Linia wyszukuje kolizje a po nich masz obiekty. Prosta i dobra metoda.
http://www.alpix.com/3d/worldwin/WWJ/LineOfSight.java.txt

Przecież mówiłem o tym już.

// nie cytujemy obrazków -Xirdus
« Ostatnia zmiana: Wrzesień 12, 2011, 23:47:19 wysłana przez Xirdus »

Offline DarkPeter

  • Użytkownik

# Wrzesień 20, 2011, 20:31:07
A czy ktoś orientuje się jak pobrać kolor z pixela i zapisać kolor w RGB do zmiennych?

Offline Shusty

  • Użytkownik

# Wrzesień 21, 2011, 00:07:00
img.getRGB(x,y);

Offline DarkPeter

  • Użytkownik

# Wrzesień 21, 2011, 16:43:09
img.getRGB(x,y);
Jeśli dobrze rozumiem to jest pobranie piksela z obrazka. A co jak ja chce, z całego ekranu gry?