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()
và 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);
}
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
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