2012-02-16 21 views
6

UPDATE:OpenGL GL_POLYGON_SMOOTH 2D Antialiasing tạo tris ra khỏi quads

Tôi đã nằm đó đến khi tôi cài đặt NVIDIA Control Panel, nếu tôi gỡ bỏ cài đặt nó nó hoạt động đúng cách.

Khi bạn xoay hình tứ giác trong OpenGL, các cạnh bị lởm chởm.

Nếu tôi gọi glEnable (GL_POLYGON_SMOOTH) các cạnh trở nên trơn tru, nhưng OpenGL sau đó vẽ một đường chéo màu trắng qua tất cả các hình ảnh của tôi như thể nó đang tạo ra trisout của quads của tôi.

Đây là cách nó trông: GL_POLYGON_SMOOTH

Có cách nào để vô hiệu hóa dòng đó, hoặc tôi có thể nhận được khử răng cưa trong một cách dễ dàng? Tôi đã thử GL_MULTISAMPLE nhưng không có gì xảy ra.

Trong mã của tôi, tôi cũng có:

glShadeModel(GL_SMOOTH); 

glMatrixMode(GL_PROJECTION); 

glLoadIdentity(); 

glDisable(GL_DEPTH_TEST); 

glEnable(GL_BLEND); 

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
+3

Dường như các đỉnh trên hai hình tam giác không khớp với nhau, tạo đường mỏng. Thay vì vẽ một quad, hãy thử vẽ một fan hâm mộ hình tam giác. IMO, dòng này sẽ biến mất vì OpenGL bây giờ biết những đỉnh nào được chia sẻ (và chính xác như nhau). – Ani

+0

Hmm được rồi, tôi hiểu phần không khớp. Nhưng tôi không hiểu làm thế nào tôi sẽ vẽ hai hình tam giác giữ một nửa hình ảnh mỗi và sau đó xoay/mở rộng những cá nhân. tại thời điểm này tôi vẽ kết cấu lên một quad thông thường: Tôi khá mới đối với OpenGL và tôi chưa từng làm việc với hình tam giác vì tôi chỉ làm việc với 2D và hình ảnh. Vì vậy, xin vui lòng chỉ cho tôi theo hướng vẽ một fan hâm mộ tam giác. Cảm ơn, Markus – Orujimaru

+0

Bạn đã thử nghiệm điều này trên nhiều máy tính với các cạc đồ họa khác nhau và/hoặc thử nghiệm với các trình điều khiển khác nhau chưa? Có vẻ như tôi có thể là một lỗi trình điều khiển. –

Trả lời

3

Ok, tôi sẽ viết những dòng này như một câu trả lời, cho tôi biết nếu nó hoạt động sau khi thử nó ra.

GL_TRIANGLE_FAN: Nếu ứng dụng chỉ định chuỗi các đỉnh v, OpenGL sẽ hiển thị hình tam giác bằng v 0, v 1 và v 2; một tam giác khác sử dụng v 0, v 2 và v 3; một tam giác khác sử dụng v 0, v 3 và v 4; và vân vân. Nếu ứng dụng chỉ định n đỉnh, OpenGL sẽ hiển thị các tam giác được kết nối n – 2.

Vì vậy, để vẽ một quad đơn vị tập trung vào nguồn gốc,

glBegin(GL_TRIANGLE_FAN); 

glTexCoord2f(0f, 0f); 
glVertex3f(-halfWidth, -halfHeight, 0f); 

glTexCoord2f(0f, 1f); 
glVertex3f(-halfWidth, halfHeight, 0f); 

glTexCoord2f(1f, 1f); 
glVertex3f(halfWidth, halfHeight, 0f); 

glTexCoord2f(1f, 0f); 
glVertex3f(halfWidth, -halfHeight, 0f); 

glEnd(); 

Bây giờ bạn có thể đặt các biến đổi tương tự xung quanh này mà bạn sử dụng trên khắp quad của bạn! Hy vọng rằng sẽ giúp!

+0

Xin lỗi, nhưng điều này mang lại kết quả chính xác giống như vẽ hình tứ giác. Cảm ơn bạn đã nỗ lực. // Markus – Orujimaru

+0

Tại thời điểm này, tôi bắt đầu nghi ngờ trình điều khiển và/hoặc GPU là @jerrycoffin đã nói ở trên. Hãy dùng thử trên một số GPU/trình điều khiển khác. – Ani

+0

Vâng, tôi khá chắc chắn đó là nó. Điều đó thực sự kỳ lạ. Tôi chưa bao giờ gặp bất kỳ sự cố nào với mu GPU kể từ khi tôi mua chúng cách đây 18 tháng. Tôi đã thử một vài trình điều khiển khác nhau, nhưng điều đó không giúp được gì. Tôi đã thử vô hiệu hóa một GPU tại một thời điểm nhưng điều đó không giúp được gì. Tôi không có ý tưởng làm thế nào để khắc phục sự cố GPU. Tôi có thể sống với nó nếu nó chỉ là máy tính của tôi, nhưng vì tôi hy vọng phát hành trò chơi tôi đang làm việc trên nó không thể chấp nhận được nếu điều này xảy ra thường xuyên = / – Orujimaru

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