J'ai un modèle de blender et ci-dessous est une image de la façon dont mon modèle rend quand je le charge en python. On dirait que les normales sont toutes foirées. J'utilise la normale correcte pour chaque sommet. Je les exporte dans le bon ordre. Je l'ai testé dans la console de blender que le fichier d'exportation réel avait les bonnes données.OpenGL: Le modèle ne semble pas correct lorsqu'il est chargé en python
Je sais que j'ai dû faire pivoter le modèle en python parce que l'axe z est différent, donc je ne suis pas sûr si les normales z pointent dans la mauvaise direction.
J'utilise pyglet. Quelqu'un at-il déjà eu ce problème avant? Des idées de ce que je peux faire pour essayer de le réparer?
Je ne sais pas si c'est un problème OpenGL ou python.
opengl code d'installation:
glMatrixMode(GL_PROJECTION)
zNear = 0.01
zFar = 1000.0
fieldOfView = 45.0
size = zNear * math.tan(math.radians(fieldOfView)/2.0)
glFrustum(-size, size, -size/(w/h), size/
(w/h), zNear, zFar);
glViewport(0, 0, w, h);
# Set-up projection matrix
# TODO
glMatrixMode(GL_MODELVIEW)
glShadeModel(GL_SMOOTH)
glEnable(GL_LIGHTING)
glEnable(GL_LIGHT0)
light0Ambient = (GLfloat * 4)(*[])
light0Ambient[0] = 0.2
light0Ambient[1] = 0.2
light0Ambient[2] = 0.2
light0Ambient[3] = 1.0
glLightfv(GL_LIGHT0, GL_AMBIENT, light0Ambient);
lightpos = (GLfloat * 3)(*[])
lightpos[0] = 5.0
lightpos[1] = 5.0
lightpos[2] = 5.0
glLightfv(GL_LIGHT0, GL_POSITION, lightpos)
tempLV = self.kjgCreateVectorWithStartandEndPoints((5.0,5.0,5.0), (0.0,0.0,-3.0))
lightVector = (GLfloat * 3)(*[])
lightVector[0] = tempLV[0]
lightVector[1] = tempLV[1]
lightVector[2] = tempLV[2]
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION,lightVector);
glLoadIdentity()
glTranslatef(0.0, 2.0, -18.0)
#glScalef(0.4, 0.4, 0.4)
glRotatef(-90, 1.0, 0.0, 0.0)
Code Tirage:
for face in self.faces:
#print group
if len(face) == 3:
glBegin(GL_TRIANGLES)
elif len(face) == 4:
glBegin(GL_QUADS)
else:
glBegin(GL_POLYGON)
for i in face:
if i in (104,16,18,102):
glVertex3f(*self.vertices[i])
color = self.calculateVertexIntensity((.5,.5,.5),self.normals[i],self.vertices[i])
glColor3f(*color)
glNormal3f(*self.normals[i])
glEnd()
Que se passe-t-il avec la définition de la couleur de chaque sommet? – James