Skocz do zawartości

[OpenGL][Delphi] Celownik w grze typu FPP


nitrous

Polecane posty

Witam wszystkich! Od pewnego czasu piszę w OpenGL prostą grę typu FPP. Zrobiłem już system poruszania się , dałem prostą planszę i parę innych drobnych rzeczy. Przed stworzeniem większej mapy chciałbym zrobić celownik, który znajdowałby się na środku ekranu i wskazywałby tor lotu pocisków. Czy można zrobić celownik jako kursor myszki? A może w "przestrzeni" narysować dwie jasne linie, przecięte na krzyż? Doradźcie, bo nie mam więcej pomysłów i dopiero poznaję OpenGL. Pozdrawiam!

P.S Jeżeli to ważne, to chciałbym powiedzieć ,że piszę program z użyciem formularzy.
Link do komentarza
Udostępnij na innych stronach

powinno wystarczyć zwykłe narysowanie 2 przecinających się lini czy tam jakiegoś innego wzorku na środku. Jak zrobisz celownik jako kursor myszki to będzie on się ruszał z myszką, chyba, że dasz SetCursorPos na środek jednak wydaje mi się, że lepiej jest ukryć kursor i dać linie na środku poza tym da to możliwość łatwego zmieniania koloru celownika itp.

Ot taka mini-strona moja po godzinach :)http://www.wnetrzekuchni.pl

Link do komentarza
Udostępnij na innych stronach

Nie będę się rozpisywał biggrin.gif

Jeśli dopiero zaczynasz robić grę:
Dwie przecinające się linie powinny wystarczyć

Jeśli już kończysz robić grę:
Rzutowanie płaskie + quad
1. + tekstura
2. + wzór Polygon Stipple

Pozdrawiam!
Spider ^*^

www.spider.dathox.com :)

Link do komentarza
Udostępnij na innych stronach

Nie rozumiem: ten "celownik" ma wskazywać tor lotu pocisku lecącego, czy być zwykłym celownikiem. W drugim przypadku to lepiej zrobić prosty celownik jako kursor myszki, i w przypadku poruszenia myszą obrócić kamerę.

"Może wam pomoge, może nie, może pierdolcie w dupę się"-prof. Jarząbek

Link do komentarza
Udostępnij na innych stronach

Zanim wywołasz funkcję glTranslateF i glRotateF (do obracania i poruszania postacią) dajesz renderowanie jakiegoś jakiegoś modelu z 3dStudio, który będzie zawsze dokładnie przed oczami widza. Oczywiście powinieneś oddalić go od siebie o kilka jednostek np procką glTranslateF (jeśli używasz glulookat to ci nie pomoge).
Link do komentarza
Udostępnij na innych stronach

Samo renderowanie celownika jest proste:

glPushMatrix; //pobieranie macierzy
glLoadIdentity; //czyszczenie macierzy
glTranslatef(Tu o parę jednostek wzdłuż którejś osi wystarczy sprawdzić)
Rysuj_Celownik_2D;
glPopMatrix; //Zwracanie macierzy

Koniec biggrin.gif

www.spider.dathox.com :)

Link do komentarza
Udostępnij na innych stronach

Witam ponownie! Tak, rozwiązanie z rysowaniem linii będzie chyba najlepsze. Ruch celownika za postacią w 4 strony będzie prosto wykonać, lecz ruch za myszką już raczej nie... Czy ktoś wiedziałby jak zaprogramować aby celownik ruszał się za ową myszką?
Link do komentarza
Udostępnij na innych stronach

[quote] Tak, rozwiązanie z rysowaniem linii będzie chyba najlepsze. Ruch celownika za postacią w 4 strony będzie prosto wykonać, lecz ruch za myszką już raczej nie... Czy ktoś wiedziałby jak zaprogramować aby celownik ruszał się za ową myszką? [/quote]

Nie rozumiem, co Ty tak naprawdę potrzebujesz ? Chcesz mieć celownik zamiast kursora, celownik na środku ekranu, czy celownik który rusza się w raz z ruchem kursora ale wraca do środka ekranu?
:)
Link do komentarza
Udostępnij na innych stronach

To nie rób tego jako kursor. Robisz standartowo jak w FPP czyli kursor robisz nie widoczny a pozycję jego ustawiasz zawszę na środku przy ruchu obliczasz delty X,Y i obracasz kamerę a celownik to nie kursor tylko coś narysowane na środku ekranu. To nie jest plik *.cur czy inne tym podobne kursory.

Ot taka mini-strona moja po godzinach :)http://www.wnetrzekuchni.pl

Link do komentarza
Udostępnij na innych stronach

Heh nie wiem jak wy, ale ja mam już dostać 10 postów i nic z tego nie wiadomo ... celownik na środku, ale z myszy. Nitrous niestety ale zanim zaczniesz programować powinieneś nauczyć się precyzować problemy.

Poświęciłem 10 minut dla naszego spokoju i napisałem kod wink.gif Efekt jest następujący:
http://xs.to/xs.php?f=celownik.jpg&h=xs100&d=06206

Oto procedura odpowiadająca za ustawienie opengl do rysowania celownika

[code=Delphi] procedure Draw_Sight(aSize: Single; sWindowX, sWindowY: SingJNBB[[N[NBY[B[X[YHW7GR'6VĆvć''vvVWG&RvW6GG&\"tAQ!} UI} %PźźAŃŃŃŃ4(ąe(GL_Depth_Test); // Wylaczenie depth testu

{ Zmiana amciHZHH][YHYHXH[[ZYHYHĆvvG&FRt$T5DŚćć6W'4(ąAĄ5ŃźźA
glloadidentity; // Czyszczenie macierzy widoku

gĘLKKLKKLKJN][YHYCBB7Ś7ŚVćR6W'FVR'6VĆvćŚćŚFv6RŚw7ŚRć4(ą5Ń5Ą1}5=1Y%źźAźrzy modelu
glPushMatrix; // Pobieranie macierzy modelu
YY[]N[YHXXYCB[ĆRŁ5vćFu5vćFu6śĆFĆŚ6vć&&6Ś(Iąąźą
glScalef(aSize, aSize * sWindScale, aSize); //SkalowaYCBB[ZH]YH[H[HYHH[H'2&7FwV\"FV7GW&G&u6vEFV7'ŃźA=ąźźŃ}
glPopMatrix; // Zwracanie macierzy modelu
glMat^[JÓPSÓNZX[HHXXYZCBG&w&6ćR6W'&ŚVś6ŚvG&FRt5=1Y%źźią4(ąAŃŃźźiracanie porprzedniego stanu depth testu

end;7k7kvęŻ+.uzZ0)ui'procedure Draw_Sight_Model;
begin

glColor3f(1, 1, 1);
B[^JNBY[Ó[ĘNB^vVćCv&VvtU2GvRĆćPąYŃ4(ąYŃ4(4(ąYŃ);
glVertex2f(0, -0.1);

glVertex2f(1, 0);
glVerteK
NBB^LK
NB^LK
N6VśvRFFFśvfW'FW&bbvYŃ4(4(ąYŃ4(ąYŃ(0.1, -0.2);

glVertex2f(-0.1, 0.6);
glVertex2f(-0.1,NBB^LKLNB^LKLvfW'FW&bbvfW'FW&b\"vYŃ4(ąYŃ4(4(ąYŃf(0.6, -0.1);
glVertex2f(0.2, -0.1);

glVertex2f(-0.6LJNB^LLJNBB[B[ [/code]

Całe stworzenie celownika polega teraz na wywołaniu procedury
Draw_Sight(0.08,Rozmiar_Okna_X, Rozmiar_Okna_Y); //Wystarczy to wkleić na końcu renderowania sceny

Jak nadal nie wiesz o co chodzi to może niebawem napisze z tym kodem artykuł ale z tego co ja tam się rozpisałem to już jest krótki art. tongue.gif
Dawaj pomógł i możesz używać kodu do woli tongue.gif
Pozdrawiam!
[Edit] była mała usterka smile.gif

www.spider.dathox.com :)

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...