Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zasady działania kamery w allegro 5 c++

Ostatnio zmodyfikowano 2023-11-26 22:50
Autor Wiadomość
pekfos
» 2023-11-25 19:53:11
Jak użyć al_build_camera_transform do uzyskania podobnego efektu jak przy al_identity_transform?
To znaczy jak sprawić, żeby kamera widziała to samo co po wywołaniu al_identity_transform?
Żeby kamera była macierzą jednostkową? Masz to w dokumentacji którą podałeś.
Another example which will simply re-create the identity matrix:
C/C++
al_build_camera_transform( & t,
0, 0, 0,
0, 0, - 1,
0, 1, 0 );

nie rozumiem dlaczego oś z mojej kamery działa w zakresie 0-1.
Nie wiem co masz na myśli. Może podawaj kod tu z komentarzami.
P-180492
AP1994
Temat założony przez niniejszego użytkownika
» 2023-11-25 20:16:30
nie wiedziałem co to znaczy macierz jednostkowa, ale wygląda na to że o to mi chodziło.
C/C++
//w kodzie mam
else if( al_key_down( & okno.klawiatura, ALLEGRO_KEY_INSERT ) )
{
   
cam.move( 0, 0, - z );
}
else if( al_key_down( & okno.klawiatura, ALLEGRO_KEY_DELETE ) )
{
   
cam.move( 0, 0, z );
}
i nie rozumiem czemu  kiedy kamera jest w pozycji początkowej po utworzeniu al_build_camera_transform( & t,
0, 0, 0,
0, 0, - 1,
0, 1, 0 );
przesunięcie kamery na osi z na jakąś wartość ujemną powoduje że to co wyświetlam znika.
czy trzeba ustawić jakoś odległość widzenia kamery?
P-180494
pekfos
» 2023-11-25 20:29:51
przesunięcie kamery na osi z na jakąś wartość ujemną powoduje że to co wyświetlam znika.
czy trzeba ustawić jakoś odległość widzenia kamery?
Zasadniczo od tego jest macierz projekcji, która chyba wyleciała z twojego kodu, konkretnie parametry zNear i zFar. Twoje cam.move() przesuwa kamerę w systemie współrzędnych kamery, więc jak zmieniasz Z to zgaduję że obraz trafia za kamerę i dlatego go nie widzisz. Może będzie łatwiej się połapać w tym co robisz, jeśli cała twoja geometria nie będzie w Z=0, w końcu chcesz chyba robić 3D.
To może być pomocne: https://stackoverflow.com/a/8493759
P-180495
AP1994
Temat założony przez niniejszego użytkownika
» 2023-11-26 21:52:54
napisałem w pliku Camera.cpp coś takiego:
C/C++
Camera::Camera( Point position, Point look, Point up )
{
   
al_identity_transform( & projection );
   
al_perspective_transform( & projection, - al_get_bitmap_width( al_get_target_bitmap() ) / 2, - al_get_bitmap_height( al_get_target_bitmap() ) / 2, - 1, al_get_bitmap_width( al_get_target_bitmap() ) / 2, al_get_bitmap_height( al_get_target_bitmap() ) / 2, 1 );
   
al_build_camera_transform( & camera, position.get_x(), position.get_y(), position.get_z(), look.get_x(), look.get_y(), look.get_z(), up.get_x(), up.get_y(), up.get_z() );
   
//al_compose_transform(&camera,&projection);
    //t=Transform(position,up,look);
}
void Camera::use()
{
   
al_use_projection_transform( & projection );
   
al_use_transform( & camera );
}
nieco dziwnie ale działa. Jak nad tym popracuję będzie dobrze.
P-180505
pekfos
» 2023-11-26 22:50:41
Ujemne near może nie mieć sensu dla al_perspective_transform. Taka jest interpretacja

(Wzięte z » Biblioteki C++» Kurs OpenGL, C++Definiowanie sceny 3D lekcja)
P-180507
1 « 2 »
Poprzednia strona Strona 2 z 2