2010-11-22 25 views
11

Eğitmenim, projeksiyon matrisini etkilemek için birbirlerinin yerine kullanılabileceğini söylüyor. Tercihen, gluLookAt()'un, 'görüş açısını tanımlayabilme yeteneğinden dolayı göreli basitliğinden' dolayı kullanıldığını iddia etmektedir. Bu doğru mu? Hem gluLookAt() hem de glFrustum() kod örneklerini gördüm ve programcıların bunları neden karıştırdığını merak ediyorum. Redbook arasında cube.c örnekte olduğu gibi gluLookAt() ve glFrustum() arasında bir fark var mı?

görünür:

void display(void) 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 
    glColor3f(1.0, 1.0, 1.0); 
    glLoadIdentity(); 

    gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); 
    **//why isn't this a call to glFrustum?** 
    glScalef(1.0, 2.0, 1.0); 
    glutWireCube(1.0); 
    glFlush(); 
} 

void reshape(int w, int h) 
{ 

    glViewport(0, 0, (GLsizei) w, (GLsizei) h); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 20.0); 
    //why isn't this a call a call to gluLookAt()? 
    glMatrixMode(GL_MODELVIEW); 
} 
+1

hum. gluLookAt ve glFrustum çok farklı matrisler belirler (gluLookAt, _not_ genellikle projeksiyon matrisine uygulanır). Eğitmeninizin gluLookAt yerine gluPerspective hakkında konuşmuyor olduğundan emin misiniz? – Bahbar

+0

Ana fark, glFrustum'un çekirdek OpenGL kütüphanesinin bir parçası olması ve gluLookAt'ın farklı bir parametre kümesi alan ve glFrustum'u çağırdığı yardımcı kütüphanenin bir parçasıdır. Kullandığınız OpenGL için fark yaratmaz; seçim kodlama tercihlerinden biridir. – AndrewS

cevap

12

Hem glFrustum ve gluLookAt basit matris çarpımını yapar. Bu matrisler için denklem için man sayfalarına bakınız:

glFrustum

olanların Hem

gluLookAt

bir glMultMatrix* çağrısı ile değiştirilebilir.

en önemli fark glFrustum (gluPerspective tarafından dahili olarak kullanılır), bir perspektif projeksiyon matris oluşturmak için çoğu zaman kullanılan olmasıdır ve gluLookAt model görünüşüdür matrisleri belirlenmesi için uygun bir yol olduğu (genellikle: bir kamera uygulanması).

2

gluLookAt ModelView matrisini etkiler, glFrustum/gluPerspective ise Projection matrisini etkiler. Bunlar boru hattındaki tamamen iki farklı matristir. gluLookAt, "kamera" yı uzayda uygun noktaya hareket ettirmek ve istenen yere yönlendirmek için glRotate ve glTranslate çağrılarının birleşimidir. Oysa, glFrustum/gluPerspective, perspektif görüntüleme hacmini tanımlayan yöntemlerdir. OpenGL Kırmızı Kitap'ta daha fazla ayrıntıya göz atın.

+0

Hurm? Bu işlevler, glMatrixMode tarafından ayarlanan matrisi etkiler. – AndrewS

İlgili konular