2013-04-29 37 views
9

Một tỷ lệ rất nhỏ (< 1%) người dùng của tôi đang gặp phải sự biến dạng lạ với giao diện người dùng OpenGL của trò chơi của tôi. Có vẻ như thiết lập chiếu pixel hoàn hảo của tôi:Điểm ảnh tuyệt đối OpenGL Pixel hoàn hảo

glViewport(0, 0, clientSizeWidth, clientSizeHeight); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0, clientSizeWidth, clientSizeHeight, 0, -1.0, 1.0); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
double transAmount = 0.375; 
glTranslated(transAmount, transAmount, 0.0); 

Đang gây ra sự cố trên hệ thống của họ. Và tôi đã không thành công trong việc thu thập thông tin chi tiết về hệ thống của họ, nhưng tôi tin rằng họ có thể chạy các trò chơi OpenGL tương tự với thành công. Vì vậy, tôi tin rằng mã của tôi là có lỗi.

Dưới đây là một hình ảnh hiện vật hình ảnh:

visual artifacts

Và đây là một hình ảnh mà không hiện vật trực quan (bỏ qua sự khác biệt về hệ điều hành):

without visual artifacts

Mặc dù tôi trò chơi quy mô cuối cùng render là 2x, nó làm như vậy thông qua một cuộc gọi duy nhất để glSubTexImage2D sau khi render 1x đã được perfo rmed. Điều này có nghĩa là các tạo tác trong ảnh chụp màn hình đầu tiên có mặt trước khi nhân đôi pixel (do đó tại sao các tạo tác cũng được nhân đôi pixel). Vì vậy, pixel tăng gấp đôi chính nó không thể là nguồn gốc của vấn đề.

Bất kỳ suy nghĩ nào về điều gì có thể gây ra điều này? Tôi hiện không có cách nào để kiểm tra. Đa số người dùng (bao gồm cả bản thân tôi) trải nghiệm không có hiện vật trực quan.

Chỉnh sửa (ngày 30 tháng 4): Người dùng Ba Lan đã thông báo cho tôi rằng băng video của anh ấy trải nghiệm những hiện vật này và là "nVidia 9500 GS". Không chắc chắn nếu điều này có nghĩa là 9500M GS hoặc 9500 GT, nhưng cả hai dường như khá hiện đại.

+0

'0.375' xuất phát từ đâu? –

+0

@BenVoigt Đó là từ Sổ đỏ OpenGL. Xem [this] (http://glprogramming.com/red/appendixg.html#name1) hoặc [this] (http://msdn.microsoft.com/en-us/library/ms537007%28VS.85%29. aspx). –

+3

Thực tế là nó 1) xảy ra chỉ trên một số bề mặt 2) xảy ra ở quy mô khác nhau cho các bề mặt khác nhau nên là một gợi ý lớn về nơi mà mã vấn đề sẽ được. – Patashu

Trả lời

6

có xác suất 90%, người dùng gặp sự cố này có chuyển đổi chất lượng kết cấu trong bảng điều khiển nVidia của họ trên một số giá trị không mặc định. trong trường hợp của bạn, GL_NEAREST nên giúp tránh những vấn đề như vậy (vì vậy nó sẽ không phải là hàng xóm trung bình texels cho hình ảnh upscaled). nhưng trước tiên, yêu cầu anh ta đặt các cài đặt bảng điều khiển nVidia thành mặc định để chứng minh hoặc phá vỡ lý thuyết.

+0

ty ty ty ty!Việc ghi đè nVidia cụ thể có vẻ là 'Antialiasing - Mode', tôi đã thử nghiệm nó và có những điểm ảnh không hoàn hảo tương tự. Vụ án được giải quyết! –

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