2010-09-24 28 views
5

Tôi mới sử dụng OpenGL. Tôi đang sử dụng JOGL.OpenGL: Tạo hộp bầu trời?

Tôi muốn tạo bầu trời cho thế giới của mình mà tôi có thể kết cấu với mây hoặc sao. Tôi không chắc cách tốt nhất để làm điều này là gì. Bản năng đầu tiên của tôi là tạo ra một quả cầu thực sự lớn với định hướng tứ giác GLU_INSIDE và kết cấu đó. Có cách nào tốt hơn?

+0

Đây là một [mẫu bản đồ khối lập phương jogl] (https://github.com/java-opengl-labs/jogl-samples/blob/master/jogl-samples/src/tests/gl_320/texture/Gl_320_texture_cube.java) – elect

Trả lời

5

Có.

Tạo một quả cầu thực sự lớn có hai vấn đề lớn. Đầu tiên, bạn có thể gặp phải vấn đề với việc cắt bớt. Bầu trời có thể biến mất nếu nó nằm ngoài khoảng cách xa của bạn. Ngoài ra, các vật thể nhập vào hộp bầu trời của bạn từ xa sẽ trực quan đi qua một bức tường rất chắc chắn. Thứ hai, bạn đang lãng phí rất nhiều đa giác (và rất nhiều đau đớn) cho một hiệu ứng rất đơn giản.

Hầu hết mọi người thực sự sử dụng khối lập phương nhỏ (Do đó có tên là "Hộp bầu trời"). Bạn cần hiển thị khối lập phương trong thẻ trước khi thử nghiệm độ sâu bị tắt. Vì vậy, tất cả các đối tượng sẽ hiển thị trên đầu khối bất kể khoảng cách thực tế của chúng với bạn. Chỉ cần đảm bảo rằng chiều dài của một bên lớn hơn gấp đôi khoảng cách gần của bạn, và bạn sẽ ổn thôi.

10

Bầu trời là một cách khá hay để đi. Bạn sẽ muốn sử dụng một số cube map cho việc này. Về cơ bản, bạn vẽ một khối lập phương xung quanh máy ảnh và vẽ một kết cấu lên bên trong mỗi khuôn mặt của khối lập phương. Tôi tin rằng OpenGL có thể bao gồm điều này trong đường ống chức năng cố định của nó, nhưng trong trường hợp bạn đang sử dụng phương pháp đổ bóng (chức năng cố định không được chấp nhận), bạn sẽ muốn sử dụng các mẫu bản đồ khối lập phương (samplerCUBE trong Cg, không chắc chắn về GLSL). Khi vẽ bản đồ khối lập phương, bạn cũng muốn xóa bản dịch khỏi ma trận modelview nhưng giữ vòng quay (điều này làm cho hộp trời "theo dõi" máy ảnh nhưng cho phép bạn nhìn xung quanh ở các phần khác nhau của bầu trời).

Điều tốt nhất cần làm là vẽ bản đồ khối sau khi vẽ tất cả các đối tượng mờ. Điều này có vẻ lạ bởi vì mặc định bầu trời sẽ chặn các đối tượng khác, nhưng bạn sử dụng thủ thuật sau đây (nếu sử dụng shaders) để tránh điều này: khi viết vị trí đầu ra cuối cùng trong bóng đổ, thay vì viết ra .xyzw, write .xyww . Điều này sẽ buộc bầu trời đến mặt phẳng xa khiến nó ở đằng sau mọi thứ. Ưu điểm của điều này là hoàn toàn có 0 thấu chi!

+0

+1 - Điểm tốt về việc rút tiền. Nói chung, câu trả lời này hoàn chỉnh hơn tôi. – Andres

0

Hình cầu đẹp để xử lý vì chúng dễ dàng tránh biến dạng, góc, v.v., có thể hiển thị trong một số trường hợp. Một khả năng khác là một hình trụ. Để có bầu trời chất lượng thực sự cao, bạn có thể tạo mô phỏng ánh sáng trên bầu trời, thiết lập màu cầu tùy thuộc vào thời gian (=> vị trí mặt trời!) Và hướng, và thêm một số đám mây làm vật thể 3D giữa bầu trời và chế độ xem Chức vụ.

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