我试图绘制一个网格面并响应鼠标输入向各个方向旋转它,我的代码包括启用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
答案 0 :(得分:4)
但是当我启用GL_CULL_FACE时,旋转看不到背面,这是正面和背面。
这是面部剔除的全部目的:抑制基本体特定侧面的渲染。如果想同时看到两面,则必须 禁用面部剔除。