2

我正在尝试用 . 填充由 4 行生成的四边形GL_LINES。但是,当我尝试填充四边形时,它只填充三角形。这是绘制线条的代码:

def SurfaceContour(self, vertices, edges):
     glBegin(GL_LINES)
     for edge in edges:
         for vertex in edge:
             glColor3fv((1.0, 0.0, 0.0))
             glVertex3fv(vertices[vertex])
     glEnd()

这是绘制填充四边形的代码:

def Surfaces(self,  vertices):
     glBegin(GL_QUADS)
     for i in range(4):
        glColor4f(1, 1, 1, 0.3)
        glVertex3fv(vertices[i ,:])
     glEnd()

这是我传入的顶点矩阵:

[[   0.    -20.23    7.  ]
 [   0.    -20.23   -7.  ]
 [ 100.    -10.      5.  ]
 [ 100.    -10.     -5.  ]]

这是我得到的结果:

4

2 回答 2

6

这个顶点的顺序

[[   0.    -20.23    7.  ]
 [   0.    -20.23   -7.  ]
 [ 100.    -10.      5.  ]
 [ 100.    -10.     -5.  ]]

是这样的:

在此处输入图像描述

如果要绘制由 4 个顶点定义的四边形,则必须绘制一个GL_TRIANGLE_STRIP

在此处输入图像描述

def Surfaces(self,  vertices):
    glBegin(GL_TRIANGLE_STRIP)
    for i in range(4):
    glColor4f(1, 1, 1, 0.3)
    glVertex3fv(vertices[i ,:])
    glEnd()

或者您必须更改顶点的顺序,使其与 a 的要求相匹配GL_QUAD

在此处输入图像描述

[[   0.    -20.23    7.  ]
 [   0.    -20.23   -7.  ]
 [ 100.    -10.     -5.  ]
 [ 100.    -10.      5.  ]]

进一步查看原语

于 2017-12-25T09:05:20.553 回答
1

起初你使用的是旧的不推荐使用的 api,glBegin/glEnd 和 GL_QUAD 都不应该在现代应用程序中使用。

其次, glVertex3fv 接收数组到一个元素,在你的代码中你传递glVertex3fv(vertices[i ,:])原始数组的切片,实际上只使用第一个元素,所以它等于verticies[i]. 这会导致 GL_QUAD 的顶点顺序不正确。您必须更改原始类型或元素顺序。

于 2017-12-25T09:08:19.433 回答