2012-10-15 33 views
7

Cách đây không lâu, tôi đã thử một chương trình từ sách hướng dẫn OpenGL được cho là đệm đôi; nó hiển thị một hình chữ nhật quay trên màn hình. Thật không may, tôi không có cuốn sách nữa, và tôi đã không tìm thấy một định nghĩa rõ ràng, đơn giản về bộ đệm nói chung là gì. Đoán của tôi là nó là một "nơi" để vẽ mọi thứ, nơi sử dụng rất nhiều có thể giống như phân lớp?Chính xác là một bộ đệm trong OpenGL, và làm cách nào tôi có thể sử dụng nhiều bộ đệm cho lợi thế của mình?

Nếu đúng như vậy, tôi tự hỏi liệu tôi có thể sử dụng nhiều bộ đệm cho lợi thế của mình cho chương trình cắt đa giác hay không. Tôi có một cửa sổ nhỏ đẹp cho phép người dùng vẽ các đa giác trên màn hình, cộng thêm một tiện ích để kéo và vẽ một hộp chọn trên các đa giác. Khi người dùng đã vẽ hình chữ nhật lựa chọn và cho phép di chuyển chuột, các đa giác sẽ được cắt bớt dựa trên ranh giới hình chữ nhật.

Điều đó đủ khả thi, nhưng tôi cũng muốn người dùng có thể bắt đầu lại: khi nhấn phím thoát, hộp clip sẽ biến mất và đa giác gốc sẽ được khôi phục. Vì tôi đang làm mọi thứ pixel-by-pixel, có vẻ như rất khó để tìm ra cách thay đổi màu pixel hình chữ nhật trở lại thành màu đen như nền hoặc màu của một đa giác cụ thể, tùy thuộc vào nơi chúng được vẽ (trừ khi tôi tìm thấy một cách để lưu các màu sắc khi mỗi điểm ảnh đa giác được vẽ, nhưng điều đó dường như quá tải). Tôi đã tự hỏi nếu nó sẽ giúp để cung cấp cho các hình chữ nhật bộ đệm riêng của mình, với hy vọng rằng nó sẽ hoạt động như một lớp trong suốt có thể dễ dàng được xóa (?) Đây có phải là cách bộ đệm có thể được sử dụng, hoặc tôi cần để tìm một giải pháp khác?

Trả lời

8

OpenGL không biết nhiều loại đệm:

  • Framebuffers: Các phần của bộ nhớ để mà hoạt động vẽ được hướng thay đổi giá trị pixel trong bộ đệm. OpenGL theo mặc định có bộ đệm trên màn hình, có thể được chia thành một mặt trước và một backbuffer, nơi hoạt động vẽ xảy ra vô hình trên backbuffer và được đổi sang phía trước khi kết thúc. Thêm vào đó OpenGL sử dụng một bộ đệm sâu để thực hiện kiểm tra độ sâu Z sắp xếp, một bộ đệm stencil được sử dụng để giới hạn hiển thị để cắt ra (= stencil) như các phần được chọn của bộ đệm khung. Đã từng là bộ đệm phụ và tích lũy. Tuy nhiên, những người đã được superseeded bởi cái gọi là framebuffer đối tượng, được người dùng tạo ra đối tượng, kết hợp một số kết cấu hoặc renderbuffers vào framebuffers mới có thể được trả lại.

  • Renderbuffers: Mục tiêu hiển thị do người dùng tạo, được đính kèm với các đối tượng khung hình.

  • Đối tượng đệm (Vertex và Pixel): Bộ nhớ dữ liệu do người dùng xác định. Được sử dụng cho dữ liệu hình ảnh và hình ảnh.

  • Textures: Textures là loại đệm, tức là họ giữ dữ liệu, có thể là nguồn trong hoạt động vẽ

Cách tiếp cận thông thường với OpenGL là rerender toàn bộ quang cảnh bất cứ khi nào một cái gì đó thay đổi. Nếu bạn muốn lưu các thao tác vẽ này, bạn có thể sao chép nội dung của bộ đệm khung thành một kết cấu và sau đó chỉ cần vẽ kết cấu đó vào một hình tứ giác và rút nó bằng hình chữ nhật cao su lựa chọn của bạn.

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