Có 3 nền trong hình dưới đây: đen trắng & xámĐiều gì sẽ gây ra sự khác biệt giữa alpha và Windows XP giữa Windows và OS X?
có 3 quầy bar trên mỗi một: đen -> minh bạch, trắng -> minh bạch, và màu sắc -> minh bạch
Tôi đang sử dụng glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); và tất cả các màu đỉnh của tôi là 1,1,1,0.
Lỗi này thực sự hiển thị trong trắng-> trong suốt trên nền trắng.
Trên Windows XP (và các cửa sổ khác có hương vị), nó hoạt động hoàn hảo và tôi hoàn toàn trắng. Trên Mac tuy nhiên, tôi nhận được màu xám ở giữa!
Điều gì sẽ gây ra điều này và tại sao nó sẽ tối hơn khi tôi pha trộn màu trắng trên nền trắng?
kích thướcẢnh chụp màn hình đầy đủ là @http://dl.dropbox.com/u/9410632/mac-colorbad.png
thông tin Cập nhật:
Trên Windows, nó không có vẻ quan trọng về phiên bản OpenGL. 2,0 đến 3,2, tất cả công việc. Trên máy Mac, tôi đã có mặt trước tôi, đó là 2.1.
Độ dốc được giữ trong họa tiết và tất cả các đỉnh được tô màu 1,1,1,1 (rgb trắng, alpha đầy đủ). Các hình nền chỉ là kết cấu 1x1 pixel (được tạo bản đồ với các gradient) và các đỉnh được tô màu khi cần, với alpha đầy đủ.
Tập bản đồ được tạo với glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_BGRA, GL_UNSIGNED_BYTE, data);
Nó xuất phát từ tệp dds ARGB mà tôi tự sáng tác.
Tôi cũng nên lưu ý rằng tất cả mọi thứ được vẽ bằng một Shader trivally đơn giản:
uniform sampler2D tex1; uniform float alpha; void main() { gl_FragColor = gl_Color * texture2D(tex1, gl_TexCoord[0].st) * vec4(1.0, 1.0, 1.0, alpha); }
đồng phục alpha được thiết lập để 1,0
Bây giờ, tôi đã cố gắng thay đổi nó để gradient trắng không một kết cấu, nhưng chỉ 4 đỉnh nơi những cái bên trái có màu trắng và đục, và những cái bên phải là 1,1,1,0, và nó hoạt động!
Tôi đã kiểm tra kết cấu gấp ba lần ngay bây giờ, và nó chỉ có màu trắng, với các thay đổi alpha 1.0-> 0.0.
Tôi nghĩ đây có thể là vấn đề mặc định. Phiên bản của opengl hoặc trình điều khiển có thể khởi tạo mọi thứ khác nhau.
Ví dụ, gần đây tôi thấy rằng mọi người đều có GL_TEXTURE_2D glEnabled theo mặc định, nhưng không phải là Intel GME965.
SOLUTION FOUND
Thứ nhất, nền hơn một chút. Chương trình này thực sự được viết bằng .NET (sử dụng Mono trên OS X) và tệp DDS tôi đang viết là một tập bản đồ được tạo tự động bằng cách nén một thư mục các tệp PNG 24 bit thành kết cấu nhỏ nhất có thể. Tôi đang tải những PNG đó bằng cách sử dụng System.Drawing.Bitmap và hiển thị chúng thành một Bitmap lớn hơn sau khi xác định bố cục. Bitmap sau bố cục đó sau đó bị khóa (để lấy nó ở các byte của nó), và chúng được ghi ra một DDS theo mã tôi đã viết.
Khi đọc tư vấn của Bahbar, tôi đã kiểm tra kết cấu trong bộ nhớ và chúng thực sự khác! DDS của tôi được tải có vẻ là thủ phạm chứ không phải bất kỳ cài đặt OpenGL nào. Trên một linh cảm ngày hôm nay, tôi đã kiểm tra các tập tin DDS chính nó trên hai nền tảng (sử dụng một byte để so sánh byte), và thực sự, họ đã khác nhau! Khi tôi tải lên các tệp DDS bằng WTV (http://developer.nvidia.com/object/windows_texture_viewer.html), chúng trông giống hệt nhau. Tuy nhiên, khi sử dụng WTV, bạn có thể tắt từng kênh (R G B A). Khi tôi bật tắt kênh Alpha, trên cửa sổ tôi thấy một hình ảnh thực sự xấu. Không có alpha sẽ dẫn đến không có cạnh antialiased, do đó, tất nhiên nó sẽ trông khủng khiếp. Khi tôi tắt kênh alpha trên OSX DDS, nó trông ổn!
Trình tải PNG trong Mono là khởi tạo trước, gây ra tất cả sự cố của tôi. Tôi đã nhập một vé cho họ (https://bugzilla.novell.com/show_bug.cgi?id=679242) và đã chuyển sang sử dụng trực tiếp libpng.
Cảm ơn tất cả mọi người!
định dạng bề mặt hiển thị là gì? đặc biệt về SRGB? Màu trắng trên nền trắng đã khiến tôi bối rối. – Bahbar
Các thanh có được vẽ bằng kết cấu hay sử dụng phép nội suy màu không? – rotoglup
các đỉnh nào là 1,1,1,0? ngay cả nền đen, trắng, xám? –