OpenGL 不会正确渲染正方形

时间:2021-06-11 09:42:02

标签: python opengl pygame pyopengl opengl-compat

我正在尝试使用 glBegin(GL_QUADS) 在 OpenGL 中渲染一个彩色正方形,但由于某种原因,它渲染了中间有一个额外顶点的正方形。 Screenshot。是我做错了什么还是我必须使用不同的方法进行 2D 渲染?

import pygame
from pygame.locals import *
from OpenGL.GL import *
from OpenGL.GLU import *

v = ((0, 0), (0, 1), (1, 0), (1, 1))
s = (0, 1, 2, 3)


def c():
    glBegin(GL_QUADS)
    for vertex in s:
        glColor3fv((1, 1, 1))
        glVertex2fv(v[vertex])
    glEnd()


def main():
    pygame.init()
    display = (1500, 1000)
    pygame.display.set_mode(display, DOUBLEBUF | OPENGL)
    gluPerspective(50, (display[0] / display[1]), 0.1, 5000)
    glTranslatef(0, 0, -8.5)
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
        c()
        pygame.display.flip()


main()

1 个答案:

答案 0 :(得分:1)

索引顺序错误:

v = ((0, 0), (0, 1), (1, 0), (1, 1))

s = (0, 1, 2, 3)

s = (0, 1, 3, 2)

您需要对四边形周围的索引进行排序:

2          3
 +<-------+
 .        ^
 .        |
 .        |
 +------->+
0          1

或者,您可以更改顶点的顺序:

v = ((0, 0), (0, 1), (1, 1), (1, 0))
s = (0, 1, 2, 3)
相关问题