Tôi đã cố gắng tìm ra cách glTexImage2D
hoạt động và thấy một số kết quả kỳ lạ từ một số mã khá rõ ràng. Mã của tôi chỉ đơn giản là vẽ một vòng tròn thô thành một mảng không có chiều dài 256 * 256 và sau đó gửi dữ liệu đó ra để trở thành một kết cấu. Các kết cấu hiển thị tuy nhiên được chuyển ra như biến thể của màu đỏ và màu cam không có vấn đề gì kết hợp Tôi chọn bên trong vòng lặp tạo hình ảnh của tôi:Kết quả lẻ bằng cách sử dụng glTexImage2D
unsigned* data = new unsigned[256*256];
for (int y = 0; y < 256; ++y)
for (int x = 0; x < 256; ++x)
if ((x - 100)*(x - 100) + (y - 156)*(y - 156) < 75*75)
data[256*y + x] = ((156 << 24) | (256 << 16) | (156 << 8) | (200 << 0));
else
data[256*y + x] = 0; // I'd expect this to be transparent and the above to be slightly transparent and green, but it's red somehow.
glBindTexture(GL_TEXTURE_2D, texid);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*)data);
tùy chọn OpenGL:
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
//glBlendFunc(GL_SRC_ALPHA, GL_ONE);
//glEnable(GL_BLEND);
//glDisable(GL_CULL_FACE);
glGenTextures(1, &leaf[0]);
createLeaf(leaf[0]); // createLeaf(GLuint& texid) is posted entirely above
Phần còn lại của mã không làm gì nhưng hiển thị kết cấu trên một quad đơn trong cửa sổ. (x64 win7)
Chỉnh sửa: Tôi đã thử giải pháp của Rickard chính xác và tôi vẫn đang nhận được vòng tròn màu tím.
Khi bạn vẽ kết cấu, nó trông giống như một vòng tròn? Tôi tò mò nếu nó chỉ là màu sắc của kết cấu đó là tắt hoặc nếu toàn bộ kết cấu chỉ là sắp ra như rác. – nil