2011-04-19 75 views
22

Cố gắng hiểu gluLookAt, đặc biệt là 3 thông số cuối cùng.giải thích gluLookAt?

Ai đó có thể giải thích?

gluLookAt(camera[0], camera[1], camera[2], /* look from camera XYZ */ 
      0, 0, 0, /* look at the origin */ 
      0, 1, 0); /* positive Y up vector */ 
  1. chính xác nó có ý nghĩa gì bởi "dương Y lên vector"?
  2. Có thể có tham số lên tới 3 vectơ cuối cùng là tất cả 1s, ví dụ: 1, 1, 1? Và, nếu có thể, điều đó có nghĩa là gì?
  3. Có thể cho vectơ lên ​​có giá trị lớn hơn 1, ví dụ: 2, 3, 4?

Cảm ơn.

Trả lời

2

vectơ cuối cùng, còn được gọi là máy ảnh lên-vector xác định hướng của máy ảnh.

tưởng tượng một thanh được gắn vào đầu máy ảnh "thực". hướng của thanh là lên-vector.

bằng cách thay đổi nó từ (0,1,0), bạn có thể làm nghiêng ngang.

+0

Vẫn không hiểu lắm.Sự khác biệt giữa up-vector khi các tham số là (1, 0, 0) so với (0, 1,0) so với (0, 0, 1) là gì? Không thể tìm thấy bất kỳ hình ảnh nào trong trang web để hỗ trợ cho sự hiểu biết của tôi. Nếu ai biết nơi để tìm, xin vui lòng cho tôi biết. –

+1

@Johnnt: Hãy suy nghĩ về một người quan sát ở một vị trí cụ thể trên sàn nhà của bạn, nhìn về phía cửa. Bây giờ, người quan sát đó có thể đang ngồi, nằm ở bên trái của họ, hoặc nằm ở bên phải của họ. Bạn cần phải biết vòng quay đầu của người quan sát ngoài vị trí của họ và hướng họ đang tìm kiếm. –

+1

Mở rộng lời giải thích của Ben, hãy tưởng tượng máy ảnh của bạn có ăng ten ở trên cùng. Đó là máy ảnh "lên." Là một máy quay video cầm tay, hãy tưởng tượng rằng bạn XÁC NHẬN MÁY ẢNH trong khi vẫn giữ nó hướng về đối tượng của bạn! Bây giờ camera-up có thể điểm theo bất kỳ hướng nào, thậm chí lộn ngược! Đó là những gì các tọa độ XYZ của gluLookAt dành cho - để nói cho GL biết cách camera đang được giữ. Trong các tình huống MOST, 0,1,0 công trình, mặc dù có vấn đề nếu máy ảnh nhìn thẳng lên hoặc thẳng xuống, trong trường hợp này 0,0,1 là điểm khởi đầu tốt, mặc dù bạn có thể muốn thử nghiệm. – Olie

41

Phác thảo để giải cứu!

GluLookAt params

Hình ảnh của bạn có một 'lên' để nó có thể được tách biệt với lên trên thế giới. Các cửa sổ màu xanh trong hình ảnh này có thể được coi là 'gần mặt phẳng' mà hình ảnh của bạn được vẽ trên: màn hình của bạn, nếu bạn muốn. Nếu tất cả các bạn cung cấp là điểm mắt và tại điểm, cửa sổ đó là miễn phí để quay xung quanh. Bạn cần cung cấp thêm hướng 'lên' để ghim xuống. OpenGL sẽ chuẩn hóa vectơ mà bạn cung cấp nếu nó không phải là chiều dài đơn vị. OpenGL cũng sẽ chiếu nó xuống sao cho nó tạo thành một góc 90 độ với vectơ 'z' được xác định bởi mắttại (trừ khi bạn cung cấp một véc tơ 'lên' chính xác ở chính xác cùng một hướng với dòng từ 'mắt' sang 'tại'). Khi các hướng dẫn 'trong' (z) và 'lên' (y) được xác định, thật dễ dàng để tính hướng 'phải' hoặc (x) từ hai hướng đó.

Trong hình này, vectơ 'cung cấp' là (0,1,0) nếu trục màu xanh dương theo hướng y. Nếu bạn đưa ra (1,1,1), nó rất có thể sẽ xoay hình ảnh 45 độ bởi vì điều đó nói rằng đỉnh của cửa sổ màu xanh nên được chỉ về hướng đó. Do đó hình ảnh của anh chàng này sẽ xuất hiện để được nghiêng (theo hướng ngược lại).

2

3 thông số đầu tiên là vị trí máy ảnh 3 thông số tiếp theo là vị trí mục tiêu 3 thông số cuối cùng đại diện cho việc cuộn máy ảnh.

Điều rất quan trọng khi sử dụng gluLookAt sau "glMatrixMode (GL_MODELVIEW);"

Gợi ý hữu ích khác luôn chỉ định nó 0,0,1 cho 3 tham số cuối cùng. Trong các tọa độ chung được viết dưới dạng x, y, z. z là lên vectơ. 0,1,0 dẫn trong sự nhầm lẫn là x, z, y.

điều tốt nhất để nó ở mức 0,0,1.

+0

Nếu bạn vẫn không thể hiểu hơn bạn luôn có thể thử nghiệm với véc tơ. – Fennekin