0
我遇到了我的底紋問題。OpenGL和GL_SMOOTH底紋
我將我的模型從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],.. 。]
- 模型[[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()
EH我在想OpenGL自動計算:S。我知道如何計算頂點的法線,但是有計算法線的優化算法嗎?我會搜索谷歌... – urosjarc
OOOOOOh更好,一些模型文件應該爲每個頂點提供一個法向量。 enyone知道嗎? – urosjarc
@ user2081554:OpenGL不會爲你做任何工作,你可以做得比OpenGL更好。由於預計算總是擊敗在線計算,因此OpenGL期望您可以執行此任務。同時計算每個頂點的法線很容易。對於每個頂點總結出貢獻面法線並歸一化爲單位長度。 – datenwolf