GL_QUAD 绘制三角形
GL_QUAD draws triangle
我正在尝试用 GL_LINES
填充由 4 行生成的四边形。但是,当我尝试填充四边形时,它只会填充三角形。这是绘制线条的代码:
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. ]]
这个顶点的顺序
[[ 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()
或者您必须更改顶点的顺序,使其符合 GL_QUAD
:
的要求
[[ 0. -20.23 7. ]
[ 0. -20.23 -7. ]
[ 100. -10. -5. ]
[ 100. -10. 5. ]]
进一步查看Primitive
起初您使用的是已弃用的旧 api,现代应用程序中不应使用 glBegin/glEnd 和 GL_QUAD。
其次,glVertex3fv 将数组接收到一个元素,在你的代码中你传递 glVertex3fv(vertices[i ,:])
原始数组的切片,实际上只使用了第一个元素,所以它等于 verticies[i]
。这导致 GL_QUAD 的顶点顺序不正确。您必须更改基本类型或元素顺序。
我正在尝试用 GL_LINES
填充由 4 行生成的四边形。但是,当我尝试填充四边形时,它只会填充三角形。这是绘制线条的代码:
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. ]]
这个顶点的顺序
[[ 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()
或者您必须更改顶点的顺序,使其符合 GL_QUAD
:
[[ 0. -20.23 7. ]
[ 0. -20.23 -7. ]
[ 100. -10. -5. ]
[ 100. -10. 5. ]]
进一步查看Primitive
起初您使用的是已弃用的旧 api,现代应用程序中不应使用 glBegin/glEnd 和 GL_QUAD。
其次,glVertex3fv 将数组接收到一个元素,在你的代码中你传递 glVertex3fv(vertices[i ,:])
原始数组的切片,实际上只使用了第一个元素,所以它等于 verticies[i]
。这导致 GL_QUAD 的顶点顺序不正确。您必须更改基本类型或元素顺序。