Я пытаюсь нарисовать грань сетки и повернуть ее в различных направлениях, реагируя на ввод с помощью мыши, мой код включает разрешение 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