OpenGL和GL_平滑着色

2024-06-26 14:16:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我的底纹有问题。在

我将模型从SolidWorks导出到.wrl文件。我读了这个文件,并用glShadeModel(GL_SMOOTH)显示它,结果不是GL泳FLAT模式下的平滑对象的焦耳。在

结果:http://shrani.si/f/2y/Ah/E8gXzGH/model.png

有趣的是当我画glutSolidSphere(1,10,10)时,球体是光滑的。 我在想我做错了什么?我是要计算每个顶点的着色颜色,还是必须在程序中全局更改某些内容?应该很容易修好吧?在

初始化OpenGL的代码:

glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(31, float(screen_px[0])/screen_px[1],0.1, 1000)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
gluLookAt(0,0,0,0,0,-1,0,1,0)
glEnable(GL_DEPTH_TEST)
glEnable(GL_COLOR_MATERIAL)
glEnable(GL_LIGHTING)
glEnable(GL_LIGHT0)
glDepthFunc(GL_LESS)
glShadeModel(GL_SMOOTH)
glClearColor(0.5, 0.5, 1, 1)
glMaterial(GL_FRONT, GL_AMBIENT,  (0.5, 0.5, 0.5, 1))
glMaterial(GL_FRONT, GL_DIFFUSE,  (0.8,0.8,0.8,0.8))
glMaterial(GL_FRONT, GL_SPECULAR, (0.4, 0.4, 0.4, 1))
glMaterial(GL_FRONT, GL_SHININESS, (128))
glLight(GL_LIGHT0, GL_POSITION,  (100, 100, 0, 1))
glLight(GL_LIGHT0, GL_AMBIENT,  (0.4,0.4,0.4,0.4))
glLight(GL_LIGHT0, GL_DIFFUSE,  (0.4,0.4,0.4,0.4))
glLight(GL_LIGHT0, GL_SPECULAR, (0.4,0.4,0.4,0.4))

图纸代码

  • 模型[0]=[[vertex0],[vertex1],…]
  • model[[1]]=模型[0]的索引顺序
  • 模型[2]=模型[0]的法向量

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    glLight(GL_LIGHT0, GL_POSITION,(10, 10,10, 1))
    glBegin(GL_TRIANGLES)
    j=0
    for i in range(0,len(model[2]),1):
        glNormal3f(model[2][i][0],model[2][i][1],model[2][i][2])
        k=model[1][j]
        glVertex3f(model[0][k][0],model[0][k][1],model[0][k][2])
        j=j+1
        k=model[1][j]
        glVertex3f(model[0][k][0],model[0][k][1],model[0][k][2])
        j=j+1
        k=model[1][j]
        glVertex3f(model[0][k][0],model[0][k][1],model[0][k][2])
        j=j+1
    glEnd()
    
    pygame.display.flip()
    

Tags: 文件代码模型modelfrontsmoothglglenable