Ну, если вы хотите, вы можете написать свой собственный загрузчик BMP. Здесь - это спецификация и некоторый код. В противном случае у меня может быть загрузчик tga здесь . Как только вы это сделаете, он вернет данные в массиве без знака, иначе известном как GL_UNSIGNED_BYTE.
Чтобы сделать текстуру OpenGL из этого массива, вы сначала определяете переменную, которая будет служить ссылкой на эту текстуру в памяти OpenGL.
GLuint textureid;
Затем вы должны указать OpenGL освободить место для новой текстуры:
glGenTextures(1, &textureid);
Затем вам нужно привязать эту текстуру как используемую в данный момент текстуру.
glBindTexture(GL_TEXTURE_2D, textureid);
Наконец, вам нужно сообщить OpenGL, где находятся данные для текущей текстуры.
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, your_data);
Затем, когда вы визуализируете примитив, вы применяете его к примитиву, снова вызывая glBindTexture:
glBindTexture(GL_TEXTURE_2D, textureid);
glBegin(GL_QUAD);
glTexCoord2f(0.0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glTexCoord2f(1.0, 0.0);
glVertex3f(1.0, 0.0, 0.0);
glTexCoord2f(1.0, 1.0);
glVertex3f(1.0, 1.0, 0.0);
glTexCoord2f(0.0, 1.0);
glVertex3f(0.0, 1.0, 0.0);
glEnd();
Однако каждый раз, когда вы применяете текстуру к примитиву, вам необходимо иметь данные координат текстуры вместе с данными вершин, а glutSolidSphere не генерирует данные координат текстуры. Чтобы текстурировать сферу, либо сгенерируйте ее самостоятельно, либо вызовите функции texgen, либо используйте шейдеры.