シェーディングに問題があります。
モデルを 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]=[[頂点0]、[頂点1]、...]
- model[[1]]=model[0]のインデックス順
model[2]=model[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()