2012-10-18 6 views
5

Pracuję nad interaktywnymi scenami dla kursu grafiki komputerowej. Stworzyłem program, który wygeneruje kolorowe sześciany i pozwolę mi je obracać za pomocą klawiatury. Jednak jesteśmy one coraz rozcięty przez niedalekiej klipu płaszczyzny mojego aparatu:OpenGL Near Clip Plane

Color cubes being clipped

Próbowałem użyć gluPerspective, ale dokumentacja OpenGL nie daje żadnych przykładów jego użycia. Znalazłem go używany w przykładowym programie online i częściowo zreplikowano ich kod:

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
gluPerspective(65, 1, 0.01, 100); 
glMatrixMode(GL_MODELVIEW); 

Jakieś przemyślenia?

UPDATE: Jak sugerowano w komentarzach poniżej, próbowałem za pomocą glFrustum zamiast z następującego kodu:

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glFrustum(-0.5, 0.5, -0.5, 0.5, 0.1, 100); 
glMatrixMode(GL_MODELVIEW); 

Ponownie, nie było różnicy. Czy nie pcham wynikowych macierzy poprawnie, czy coś w tym stylu?

+1

Bierzesz kurs grafiki obliczeniowej, który obejmuje rzutowanie perspektywiczne i nie rozmawialiśmy o najbliższej płaszczyźnie klipu? –

+1

Być może musisz przenieść swoje obiekty nieco dalej od Kamery. Teraz wydaje się, że zbliżyli się do tego 0.0 – Kromster

+0

Zrób jak Krom Stwierdził lub dostosował swój widok Frustum – CStreel

Odpowiedz

2

Być może musisz przenieść swoje obiekty nieco dalej od Kamery. Obecnie wydaje się, że są bliżej niż 0,0.

Biorąc pod uwagę twoją aktualizację "Odsunąłem kostki o jedną całość od kamery, a teraz, gdy się obracają, zostają przycięte zarówno przez najbliższe, jak i odległe płaszczyzny klipu" Twoje kostki mogą być zbyt duże dla twojej głębokości przycinania (100 - 0,1). Odsuń kostki od kamery o 50 i ustaw płaszczyzny przycinania na 0,1 .. 1000, aby upewnić się, że wszystko pasuje.

Jeśli problem nadal występuje, może zajść potrzeba sprawdzenia kodu macierzy.

+0

Moje kostki budowane są z następujących punktów: 'point4 wierzchołki [8] = { punkt4 (-0,5, -0,5, 0,5, 1,0), punkt4 (-0,5, 0,5, 0,5, 1,0), punkt 4 (0,5, 0,5, 0,5, 1,0), punkt4 (0,5, -0,5, 0,5, 1,0), punkt4 (-0,5, -0,5, -0,5, 1,0), punkt4 (-0,5, 0,5, -0,5, 1.0), punkt4 (0,5, 0,5, -0,5, 1,0), punkt4 (0,5, -0,5, -0,5, 1,0) }; " są one ustawione na (-0,75, 0, 0) i (0,75, 0, 0) odpowiednio (-0,75, 0, 1) i (0,75, 0, 1) po tym, jak przesunąłem je dalej od kamery – Nick

+1

Wiesz, że kiedy sześcian jest ustawiony na -1 i obrócony o 45 stopni, jego krawędzie są 1,41 stąd m to jest centrum i powinno zostać obcięte? – Kromster

+0

Rozumiem, że część obrazu ma być poza kamerą i powinna zostać obcięta, ale jest tak widoczna i można zobaczyć wnętrze sześcianów. Nie wspominając już o dalekim locie samolotem, który również odcina. Jeśli chcę mieć prawdziwą scenę, to nie będzie dobrze wyglądać.Nic, co zmienię w wywołaniu glFrustum lub gluPerspective, nie zmienia niczego, więc nie sądzę, że używam ich poprawnie. Jak ich używasz? – Nick