2010-11-22 42 views
11

Người hướng dẫn của tôi nói rằng họ có thể được sử dụng thay thế lẫn nhau để ảnh hưởng đến ma trận chiếu. Ông lập luận rằng gluLookAt() được sử dụng tốt hơn vì sự đơn giản tương đối của nó do khả năng xác định góc nhìn '. Điều này có đúng không? Tôi đã nhìn thấy ví dụ mã sử dụng cả hai gluLookAt()glFrustum() và tôi tự hỏi tại sao các lập trình viên sẽ trộn chúng.Có sự khác biệt nào giữa gluLookAt() và glFrustum() không?

Giống như trong ví dụ cube.c của Redbook xuất hiện:

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 và glFrustum thiết lập các ma trận rất khác nhau (gluLookAt không _not_ thường được áp dụng cho ma trận chiếu). Bạn có chắc người hướng dẫn của bạn không nói về gluPerspective thay vì gluLookAt? – Bahbar

+0

Sự khác biệt chính là glFrustum là một phần của thư viện OpenGL cốt lõi, và gluLookAt là một phần của một thư viện trợ giúp có một bộ tham số khác và sau đó gọi glFrustum. Nó làm cho không có sự khác biệt để OpenGL mà một trong những bạn sử dụng; sự lựa chọn là một trong những ưu tiên mã hóa. – AndrewS

Trả lời

12

Cả glFrustumgluLookAt thực hiện phép nhân ma trận đơn giản. Kiểm tra các trang người đàn ông cho phương trình đối với những ma trận:

gluLookAt

glFrustum

Cả hai của những người có thể được thay thế bằng một cuộc gọi glMultMatrix*.

Sự khác biệt quan trọng nhất là glFrustum được sử dụng hầu hết thời gian để thiết lập một ma trận chiếu phối cảnh (được sử dụng trong nội bộ bởi gluPerspective), và gluLookAt là một phương pháp thuận tiện để xác định ma trận model-view (thường là: thực hiện một camera).

2

gluLookAt ảnh hưởng đến ma trận ModelView trong khi đó, glFrustum/gluPerspective ảnh hưởng đến ma trận Chiếu. Đây hoàn toàn là hai ma trận khác nhau trong đường ống. gluLookAt là một phương thức tiện ích kết hợp giữa các cuộc gọi glRotate và glTranslate để di chuyển "camera" đến điểm thích hợp trong không gian và trỏ nó đến vị trí mong muốn. Trong khi đó, glFrustum/gluPerspective là các phương thức xác định khối lượng xem phối cảnh. Kiểm tra để biết thêm chi tiết trong Sách Đỏ OpenGL.

+0

Hurm? Các chức năng này ảnh hưởng đến ma trận được thiết lập bởi glMatrixMode. – AndrewS

Các vấn đề liên quan