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: 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. |
|
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. 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? |
|
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 |
|
AP1994 Temat założony przez niniejszego użytkownika |
» 2023-11-26 21:52:54 napisałem w pliku Camera.cpp coś takiego: 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() ); } void Camera::use() { al_use_projection_transform( & projection ); al_use_transform( & camera ); }
nieco dziwnie ale działa. Jak nad tym popracuję będzie dobrze. |
|
pekfos |
» 2023-11-26 22:50:41 Ujemne near może nie mieć sensu dla al_perspective_transform. Taka jest interpretacja  (Wzięte z Definiowanie sceny 3D) |
|
1 « 2 » |