2009-07-20 38 views
7

Tôi muốn thay đổi một số texels trong kết cấu OpenGL cho một vị trí nhất định. Bất cứ ai có thể giúp tôi với pls này?Cách thay đổi đơn texel trong kết cấu OpenGL

Đây là functionnality mà tôi muốn,

void ChangeTexelColor(int x, int y, GLuint id, int texW, int texH, GLenum format) 
{ 
    //What is here ?  
} 

này sẽ sử dụng để duy trì minimap của trò chơi của tôi (nếu có ai có một ý tưởng tốt hơn về việc duy trì một bản đồ texture- động). Btw, điều này phải được thực hiện nhanh chóng. Cảm ơn.

Trả lời

11

OpenGL có chức năng glTexSubImage2D, chính xác cho mục đích của bạn.

Dưới đây là một chức năng thay đổi màu sắc của một Texel:

void changeTexelColor(GLuint id, GLint x, GLint y, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { 
    uint8_t data[4]; 
    data[0] = r; 
    data[1] = g; 
    data[2] = b; 
    data[3] = a; 
    glBindTexture(GL_TEXTURE_2D, id); 
    glTexSubImage2D(GL_TEXTURE_2D, 
        0, 
        x, 
        y, 
        1, 
        1, 
        GL_RGBA, 
        GL_UNSIGNED_BYTE, 
        data); 
} 
+0

wow ... Tuyệt vời, cảm ơn bạn rất nhiều Nikolai. Tôi sẽ thử nó. – Morpheus

+0

Vâng ... đó là chức năng tôi muốn. Bạn tăng FPS của trò chơi của tôi rất nhiều. lol. Cảm ơn một lần nữa. – Morpheus

+0

Bạn có cần phải có các lệnh khác ở trên hoặc dưới đây không? Nó dường như không làm việc cho tôi. – Geoff

0

Performance-khôn ngoan, bạn có thể tốt hơn để lưu trữ bản đồ tại địa phương như mảng của riêng bạn và vẽ nó lên màn ảnh như một tập hợp các untextured quads.

Hiển thị nguyên thủy được tối ưu hóa rất nhiều, đặc biệt là so với việc tạo hoặc sửa đổi kết cấu.

+5

Đừng chấp nhận điều này, nó phụ thuộc rất nhiều vào kích thước của bản đồ và số lượng các ô trong mỗi thay đổi. Nếu bản đồ là 100 x 100 texels thì sẽ rất không hiệu quả nếu vẽ nó bằng cách sử dụng hình học. –

+0

@NikolaiRuhe Phương pháp này có hoạt động để xóa một phần của kết cấu không ?? Ngoài ra tôi có thể sử dụng phương pháp này để thực hiện một hiệu ứng tẩy xoá trên kết cấu ?? – Rafay

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