我的阴影有问题。
我将我的模型从SolidWorks导出到.wrl文件。我读了这个文件并用glShadeModel(GL_SMOOTH)显示它,结果不像GL_FLAT模式那样平滑对象joust。
结果: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))
绘图代码
model [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()
答案 0 :(得分:2)
每张脸
glNormal()
次
如果想要平滑着色,则必须为三角形的每个顶点提供不同的法线。
编辑:如果您只有正常面部,可以average the face normals for a vertex to get smoother per-vertex normals。