Autor Wątek: [OpenGL] Kolizje modelu z mapą.  (Przeczytany 8741 razy)

Offline Avaj

  • Użytkownik

# Czerwiec 26, 2009, 23:19:01
Skoro jesteś w podstawówce to zajmij się może grą 2D i oszczędź sobie kłopotów? Bez obrazy, ale matematyką z podstawówki nie jesteś w stanie pisać gry 3D. O ile w 2D wystarczy liznąć podstawy wektorów i znać układ współrzędnych, o tyle 3D rządzi się swoimi prawami. W 3D trzeba opanować równania płaszczyzn, wektory w 3D, iloczyn skalarny i wektorowy, macierze, trygonometrię. W szkole zagadnienia te realizuje się od I klasy liceum do I roku studiów. Chyba, że jesteś genialny i już jesteś w stanie opanować materiał ze szkoły średniej, ale wtedy musiałbyś mieć na nazwisko Gauss ;d

Offline Mr. Spam

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

Offline Programista129

  • Użytkownik

# Czerwiec 26, 2009, 23:21:57
Jednak wolę spróbowac ;) Już dosyc dużo problemów spotkałem i zawsze sobie z nimi radziłem.

Offline Cream

  • Użytkownik
    • ARCUS - łucznictwo i rzemiosło tradycyjne

# Czerwiec 26, 2009, 23:34:51
Jak sam napisał obsługę modelu 3d, to nie tak źle jak na podstawówkę  ;)

Offline Programista129

  • Użytkownik

# Czerwiec 26, 2009, 23:37:48
Nie no, z matematyką nie mam najmniejszych problemów, ostatnio nawet udało mi się zająć pierwsze miejsce w Polsce w konkursie, a programowaniem interesuję się od 2 lat i nie chcę znowu powracać do 2D :)

Pozdrawiam.

Offline Adde

  • Użytkownik

# Czerwiec 27, 2009, 00:13:18
Nie wiem czemu sądzicie, że podstawówka uniemożliwia 3D :P Wystarczy wygooglowac, zapamiętać, napisać i zapomnieć :P

Offline Avaj

  • Użytkownik

# Czerwiec 27, 2009, 09:54:19
Nie wiem czemu sądzicie, że podstawówka uniemożliwia 3D :P Wystarczy wygooglowac, zapamiętać, napisać i zapomnieć :P
A potem co minutę wchodzić na forum i pytać się czemu nie działa bo w tamtym kodzie działa i co to jest wektor ;d

Offline Programista129

  • Użytkownik

# Czerwiec 27, 2009, 10:38:09
Wektor to już wiem co to jest ^^ Tylko chciałem się zapytac, czy dobrze wszystko podłożyłem pod ten wzór ;)

Kod: (cpp) [Zaznacz]
qx=350+150;   //wektor x
   qy=297-27;   //wektor y
   qz=990+159;   //wektor z
   
   int d=-qx-qy-qz;   //d
   
   ty = (xtrans*qx+ztrans*qz+d)/ty;   //wyliczam nowa wysokosc
   
glPushMatrix();
glTranslatef (tx, ty, tz);
                //Tutaj rysuję model


Pozdrawiam.

Offline Adde

  • Użytkownik

# Czerwiec 27, 2009, 10:58:27
Nie wiem czemu sądzicie, że podstawówka uniemożliwia 3D :P Wystarczy wygooglowac, zapamiętać, napisać i zapomnieć :P
A potem co minutę wchodzić na forum i pytać się czemu nie działa bo w tamtym kodzie działa i co to jest wektor ;d

Ale jak ktoś naprawdę chce to sobie poradzi :P. Co innego "czesc jestem wojtek mam 11 lat jak sie robi gry??", przez których wyrabia się opinia że  <14  nie mogą kodzić :)

Offline .:NOXY:.

  • Użytkownik
    • Profil

# Czerwiec 27, 2009, 11:52:44
Nie wiem czy dobrze rozumiem ale chcesz na 1 quadzie sie poruszac i zmieniac wysokosc ;d
chyba nie tedy droga da sie ale to bez sensu ;p skoro i tak ci przyjdzie kiedys zrobic HeightMape :)

A tam jest wiele sposobow obliczania wysokosci takie 2 proste znane:

ja tego uzywam:

float cHMap::GetHeight(float x, float z)
{

  float projCameraX = x / MAP_SCALE;
  float projCameraZ = z / MAP_SCALE;

int hflCol0 = int(projCameraX);
int hflRow0 = int(projCameraZ);
int hflCol1 = hflCol0 + 1;
int hflRow1 = hflRow0 + 1;


float h00 = g_terrain[hflCol0 + hflRow0*MAP_X][1];
float h01 = g_terrain[hflCol1 + hflRow0*MAP_X][1];
float h11 = g_terrain[hflCol1 + hflRow1*MAP_X][1];
float h10 = g_terrain[hflCol0 + hflRow1*MAP_X][1];

float tx = projCameraX - float(hflCol0);
float ty = projCameraZ - float(hflRow0);

float txty = tx * ty;

return h00 * (1.0f - ty - tx + txty)
+ h01 * (tx - txty)
+ h11 * txty
+ h10 * (ty - txty);
};

ale na Nehe znajdziesz jeszcze z rownania kolorow Hmapy :) tak ci chyba bedzie latwiej ;p
niz meczyc sie z quadem ;p a Hmape nie jest ciezko zrobic :)

Offline Programista129

  • Użytkownik

# Czerwiec 27, 2009, 13:15:52
Mam jeszcze 1 małe pytanie :P Czy znając współrzędne każdego wierzchołka ABCD mogę wyliczyc, jaki jest tutaj kąt ? :


Offline Kos

  • Użytkownik
    • kos.gd

# Czerwiec 27, 2009, 13:34:09
Pewnie. Najłatwiej Ci będzie wyznaczyć cosinus tego kąta. Keyword: iloczyn skalarny. :)

Offline Programista129

  • Użytkownik

# Czerwiec 27, 2009, 13:43:56
Wyliczyłem, że |CB|==500, a |AB|==1149, a 500/1149=0,43516101, ale na tablic patrzec na sin, cos, tg, ctg ? Patrząc na najbliższe wyniki w tablicy to wychodzi, że

sin = 26s.
cos= 64s.
tg  = 24s
ctg= 66s.

Co najbardziej pasuje patrząc na zdjęcie ? raczej sin albo tg :/

Pozdrawiam.

Offline Avaj

  • Użytkownik

# Czerwiec 27, 2009, 13:59:40
Wyliczyłem, że |CB|==500, a |AB|==1149, a 500/1149=0,43516101, ale na tablic patrzec na sin, cos, tg, ctg ? Patrząc na najbliższe wyniki w tablicy to wychodzi, że

sin = 26s.
cos= 64s.
tg  = 24s
ctg= 66s.

Co najbardziej pasuje patrząc na zdjęcie ? raczej sin albo tg :/

Pozdrawiam.
Funkcje trygonometryczne to nie loteria. A żeby skorzystać z funkcji trygonometrycznych przydałby ci się kąt prosty gdzieś. Łatwiej zrobić wektor AC i wektor AB, znormalizować je i potem jak Kos mówi policzyć ich iloczyn skalarny, który będzie równy cosinusowi tego kąta.

Offline Cadious

  • Użytkownik

# Czerwiec 27, 2009, 14:05:09
|BC| / |AB| to tangnes twojego kąta  ;)

Cytuj
Funkcje trygonometryczne to nie loteria. A żeby skorzystać z funkcji trygonometrycznych przydałby ci się kąt prosty gdzieś
Słuszna uwaga, ale raczej w tym przypadku kąt prosty się znajdzie bo to raczej jest prostokąt, niemniej ogólnie pewniejszy jest iloczyn skalary .
tak btw to warto zajrzeć: http://pl.wikipedia.org/wiki/Funkcje_trygonometryczne



Offline Programista129

  • Użytkownik

# Czerwiec 27, 2009, 16:19:42
Ok, już wiem co to iloczyn skalarny, funkcje trygonometryczne i wektory ;D Teraz, jestem w takiej sytuacji:





Mam współrzędne x,y,z, wszystkich wierzchołków, oraz mam wartośc alfa, teraz się zastanawiam, czy da się znając tyle rzeczy obliczyc x ;)


Pozdrawiam.