I tried everything, but still I am not getting my error. I am trying to put a texture in a sphere object.
""" Minimal texture on sphere demo This is demo for showing how to put image on sphere as texture in PyOpenGL. """ from OpenGL.GLUT import * from OpenGL.GLU import * from OpenGL.GL import * from PIL import Image import numpy def run_scene(): glutInit() glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH) glutCreateWindow("Minimal sphere OpenGL") lightning() glutDisplayFunc(draw_sphere) glMatrixMode(GL_PROJECTION) gluPerspective(40, 1, 1, 40) glMatrixMode(GL_MODELVIEW) gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0) glPushMatrix() glutMainLoop() return def lightning(): glEnable(GL_DEPTH_TEST) glEnable(GL_LIGHTING) glEnable(GL_BLEND) glLightfv(GL_LIGHT0, GL_POSITION, [10, 4, 10, 1]) glLightfv(GL_LIGHT0, GL_DIFFUSE, [0.8, 1, 0.8, 1]) glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 0.1) glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.05) glEnable(GL_LIGHT0) return def draw_sphere(): glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glPushMatrix() texture_id = read_texture('mars.png') glEnable(GL_TEXTURE_2D) glBindTexture(GL_TEXTURE_2D, texture_id) glEnable(GL_TEXTURE_GEN_S) glEnable(GL_TEXTURE_GEN_T) glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP) glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP) glutSolidSphere(1, 50, 50) glDisable(GL_TEXTURE_2D) glPopMatrix() glutSwapBuffers() return def read_texture(filename): img = Image.open(filename) img_data = numpy.array(list(img.getdata()), numpy.int8) texture_id = glGenTextures(1) glPixelStorei(GL_UNPACK_ALIGNMENT, 1) glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP) glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP) glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT) glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT) glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST) glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST) glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL) glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img.size[0], img.size[1], 0, GL_RGB, GL_UNSIGNED_BYTE, img_data) return texture_id if __name__ == '__main__': run_scene()
This is the result of this code, a simple green sphere:

But this is not my expected result. I want to just show this mars.png texture on the surface of a sphere:

Help me with this, I can not solve it myself. It seems.