Вращение OpenGL не может видеть заднюю поверхность - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь нарисовать грань сетки и повернуть ее в различных направлениях, реагируя на ввод с помощью мыши, мой код включает разрешение GL_DEPTH_TEST, GL_NORMALIZE, я рисую грань сетки на glEnableClientState(GL_VERTEX_ARRAY), glEnableClientState(GL_NORMAL_ARRAY).

GL_VERTEX_ARRAY рисование было проверено, но когда я включаю GL_CULL_FACE, вращение не может видеть заднюю грань, Это передняя и задняя грань.

Это код для инициации OpenGL:

 def initializeGL(self):
    glEnable(GL_DEPTH_TEST)   # Depth testing must be turned on
    glEnable(GL_LIGHTING)     # Enable lighting calculations
    glEnable(GL_LIGHT0)      # Turn on light #0.

    glEnable(GL_NORMALIZE)

    # Setup polygon drawing
    glShadeModel(GL_SMOOTH)
    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);

    glEnable(GL_CULL_FACE)   # question sentence
    glCullFace(GL_BACK)

    # Clear to black
    glClearColor(0.0, 0.2, 0.3, 1.0)

Функция розыгрыша:

 def drawTriangles(data):
    # data shape like (n,3,3), only the triangles vertex data
    N = np.cross(data[:, 0, :] - data[:, 1, :], data[:, 0, :] - data[:, 2, :])
    N = N / np.linalg.norm(N)
    N = N.reshape([-1, 1, 3])
    N = np.hstack([N, N, N]).reshape([-1, 3])
    glEnableClientState(GL_VERTEX_ARRAY)
    glEnableClientState(GL_NORMAL_ARRAY)
    glVertexPointer(3, GL_DOUBLE, 0, data)
    #specify the normal vector for every triangle, N shape like (n,3)
    glNormalPointer(GL_FLOAT, 0, N)
    glDrawArrays(GL_TRIANGLES, 0, data.shape[0] * data.shape[1])
    glDisableClientState(GL_VERTEX_ARRAY)
    glDisableClientState(GL_NORMAL_ARRAY)

другая информация: я использую PyOpenGL + PyQt

1 Ответ

0 голосов
/ 04 ноября 2018

но когда я включаю GL_CULL_FACE, вращение не может видеть заднюю грань, это передняя и задняя грань.

В этом и заключается цель отбраковки лица: подавление рендеринга определенной стороны примитива. Если вы хотите увидеть обе стороны, вы должны отключить выборку лица.

...