Jak zastąpić glFrustum na gluPerspective?

0

Witam

Uczę się biblioteki OpenGL. Mam kod z kursu który dobrze działa. Dodałem w nim jedną drobną rzecz. Chciałbym teraz zmienić zamiast funkcji glFrustum na gluPerspective bo scena 3D wygląda jak modele były by głębsze, a przeczytałem na jakimś forum jak radzono komuś aby zmienił glFrustum na gluPerspective bo modele też tej osobie dziwnie wyglądały, tylko nie wiem za co odpowiadają poszczególne parametry tych funkcji i jak je zastąpić. Mam taki oto kod: http://4programmers.net/Pastebin/2987

0

gluPerspective to szczególny przypadek glFrustum, więc jak przekształcisz parametry na dokładny odpowiednik to uzyskasz dokładnie to samo.

Dlatego nie słuchaj gdy ktoś mówi, że „modele byłyby głębsze”, bo to tylko zależy od zadanych parametrów.

gluPerspective jest prostsze w użyciu, i tego powinieneś się trzymać do normalnego rzutu 3D.

0

U ciebie perspektywa jest taka dzika, bo masz za szeroki kąt widzenia, a obiekty są bardzo blisko kamery.

opengl.png

Zauważ że przy glFrustum parametry left, right itd. podajesz dla odległości “near”, czyli u ciebie w odległości 1 od kamery rozpiętość pola widzenia wynosi już 4 (od -2 do +2).

Dlatego ludzie wymyślili gluPerspective, by podać po prostu kąt widzenia, wtedy od razu wiesz czy masz 45°, 90°, czy 180°.

0

Chodzi o to, że modele w glFrustum są takie jak by większe w "przestrzeni" Z. Jak użyłem do rysowania gluPerspective z jakiegoś example to już dobrze było, tylko jak powiększyłem okno na cały ekran to obraz zrobił się szeroki, a nie wiem jak zrobić przełączanie do Aspektu 1:1 bo w przykładzie z kursu jest tam glFrustum, a ja nie wiem jak to zastapić gluPerspective do Aspektu 1:1. Chodzi mi to co jest w kodzie w funkcji Reshape w tych linijkach

099	        if( width < height && width > 0 )
100	             glFrustum( - 2.0, 2.0, - 2.0 * height / width, 2.0 * height / width, 1.0, 5.0 );
101	        else
102	        
103	        // szerokość okna większa lub równa wysokości okna
104	        if( width >= height && height > 0 )
105	             glFrustum( - 2.0 * width / height, 2.0 * width / height, - 2.0, 2.0, 1.0, 5.0 );
0

gluPerspective można wyrazić za pomocą glFrustum. Oto kod: http://www.opengl.org/wiki/GluPerspective_code (nie testowałem tego)

0

Chodzi o to, że modele w glFrustum są takie jak by większe w "przestrzeni"

Nie są, tak samo jak źle użyłeś glFrustum tak samo źle można użyć gluPerspective.
Narysowałem ci co jest źle. Daj mniejsze wartości dla left-right-top-bottom albo większe near i far.

1 użytkowników online, w tym zalogowanych: 0, gości: 1