我正在使用抗锯齿在QPainter中绘制三角形/多边形,这是来自3D模型的渲染。如果两个多边形紧挨着彼此绘制,则它们之间存在间隙。
以下是一些用于演示此问题的代码(在PyQt中):
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class Window(QLabel):
def __init__(self):
QLabel.__init__(self)
pixmap = QPixmap(300,300)
pixmap.fill()
painter = QPainter(pixmap)
painter.setRenderHint(QPainter.Antialiasing)
painter.setPen(QPen(Qt.NoPen))
painter.setBrush(QBrush(QColor('black')))
poly1 = QPolygonF()
for x, y in ((0,0),(0,240.5),(210.3,0)):
poly1 << QPointF(x,y)
painter.drawPolygon(poly1)
poly2 = QPolygonF()
for x, y in ((210.3,0),(210.3,240),(0,240.5)):
poly2 << QPointF(x,y)
painter.drawPolygon(poly2)
painter.end()
self.setPixmap(pixmap)
app = QApplication(sys.argv)
win = Window()
win.show()
app.exec_()
如何防止此问题?正如vahancho下面的建议,我可以为每个多边形添加边框,或者我可以在每个方向上增长半个像素。不幸的是,如果填充/笔部分透明,这会使连接可见。
答案 0 :(得分:0)
尝试进行1像素半径的高斯模糊,而最终确定可避免此问题。 如果您正在编写游戏,则应在渲染过程中关闭消除锯齿,将步骤放到最后。这意味着你应该一劳永逸地做一些像SSAA这样的事情,但在每个绘图调用中都不要做抗锯齿。