Tôi không muốn nhận được vào lượng giác phức tạp để tính toán phép quay và những thứ tương tự cho thế giới 3D của tôi nên gluLookAt có vẻ như là một lựa chọn tốt đẹp. Theo tài liệu hướng dẫn tất cả những gì tôi cần làm là đặt 3 tọa độ cho vị trí camera, ba cho những gì tôi nên nhìn vào và một vị trí "lên". Việc cuối cùng không có ý nghĩa cho đến khi tôi giả định nó đã được ở góc bên phải với các dòng của tầm nhìn theo hướng phía trên cùng của màn hình nên được.Làm cách nào để sử dụng gluLookAt đúng cách?
Nó không hoạt động như thế chút nào. Tôi có một số mã python. Đây là mã mà initialises một số dữ liệu và một số mã chế độ cho khi tôi nhập này là một phần của trò chơi:
def init(self):
self.game_over = False
self.z = -30
self.x = 0
def transfer(self):
#Make OpenGL use 3D
game.engage_3d(45,0.1,100)
gluLookAt(0,0,-30,0,0,0,0,1,0)
"game.engage_3d (45,0.1,100)" về cơ bản thiết lập ma trận chiếu để có một Góc ngắm 45 độ và tọa độ gần và xa là 0,1 và 100.
Đầu tiên gluLookAt đặt máy ảnh ở đúng vị trí, độc đáo.
Tôi có hình lập phương được vẽ với tâm (0,0,0) và nó hoạt động tốt mà không cần gluLookAt. Trước khi tôi vẽ nó, tôi có mã này:
gluLookAt(self.x,0,self.z,0,0,0,0,1,0)
if game.key(KEY_UP):
self.z += 2.0/game.get_fps()
if game.key(KEY_DOWN):
self.z -= 2.0/game.get_fps()
if game.key(KEY_LEFT):
self.x += 2.0/game.get_fps()
if game.key(KEY_RIGHT):
self.x -= 2.0/game.get_fps()
Bây giờ từ đó, vị trí lên luôn luôn giống như ở góc phải. Những gì tôi đã nghĩ rằng nó sẽ làm là di chuyển về phía trước và quay trở lại trục z với các phím lên và xuống và trái và phải thông qua trục x với các phím trái và phải. Điều thực sự xảy ra, là khi tôi sử dụng các phím trái và phải, khối lập phương sẽ xoay quanh "con mắt" đang được tăng tốc bởi các phím. Phím lên sẽ tạo ra một khối lập phương khác từ hư không để cắt qua màn hình và nhấn khối lập phương đầu tiên. Phím xuống mang lại khối lập phương nhân bản bí ẩn trở lại. Điều này có thể được kết hợp với vòng quay để đưa ra một kết quả hoàn toàn khác biệt như các tài liệu nói sẽ phát sinh.
Điều gì trên trái đất là sai?
Cảm ơn bạn.
Cảm ơn bạn rất nhiều. Nó hoạt động hoàn hảo ngay bây giờ. Bây giờ tôi có thể chuyển sang những thứ cao cấp hơn. Nhưng bạn có nói rằng gluLookAt chậm không? –
Nó không phải là nó chậm. Đó là gluLookAt giấu một vài điều mà bạn nên biết khi bạn đang làm chương trình OpenGL nghiêm túc. Đặc biệt, bạn nên học cách kết hợp các phép biến đổi tọa độ khác nhau.Điều này làm quen với việc sử dụng và ban đầu hơi bực bội, nhưng nó sẽ trả hết vào cuối: nhiều kỹ thuật đồ họa được xây dựng trên đầu trang của việc biến đổi hệ thống tọa độ một cách khéo léo. –
+1 nếu bạn thực sự nghiêng đầu :-) –