2016-04-26 2 views
-2

Я работаю над проектом, чтобы текстурировать сферу с изображением jpeg и с некоторыми клавиатурными навигационными клавишами для пользователя, который вращает сферу вправо или влево. Проблема в том, что я попытался использовать SOIL для загрузки изображения, и он был успешно загружен, но проблема - медленная обработка вращения сферы ... любая помощь!OpenGL медленная обработка при загрузке jpeg-изображения с использованием SOIL

это как я загрузить изображение JPEG в seoarate метода вызывается один раз в основном методе

void loadtexture() 
{ 
    tex_2d[0] = SOIL_load_OGL_texture(
     "filename", 
     SOIL_LOAD_AUTO,SOIL_CREATE_NEW_ID, 
     SOIL_FLAG_MIPMAPS); 
    printf("Image loaded successfully.. "); 
    if(tex_2d[0]==0) { 
     printf("SOIL loading error: '%s'\n", SOIL_last_result()); 
    } 
glBindTexture(GL_TEXTURE_2D, tex_2d[0]); 
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); 
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);//GL_NEAREST 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glEnable(GL_TEXTURE_GEN_S); 
glEnable(GL_TEXTURE_GEN_T); 
} 

и это, как я создаю мои сферы и применить текстуру к нему

glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, tex_2d[0]); 
GLUquadricObj* esphere2 = gluNewQuadric(); 
gluQuadricTexture(esphere2, true); 
gluQuadricNormals(esphere2, GLU_SMOOTH); 
glEnable(GL_CULL_FACE); 
gluSphere(esphere2, 4, 50, 50); 
gluDeleteQuadric(esphere2); 
+1

Нам нужно будет увидеть, что ваш исходный код может даже помешать догадаться о том, что заставляет его работать медленно. Можем ли мы увидеть ваш цикл визуализации и объявление сферы? В идеале [минимальный, полный и проверяемый пример] (http://stackoverflow.com/help/mcve) – WearyWanderer

+0

@mallahyk: Ух, зачем размещать код в комментариях? Просто отредактируйте свой вопрос и вставьте его туда. – datenwolf

ответ

0

Проблема заключается в том, что я попытался использовать SOIL для загрузки изображения, и он был успешно загружен, но проблема - медленная обработка вращения сферы

Это означает, что вы повторно загружаете текстуру для каждого кадра. Зачем вам это делать? Просто загрузите текстуру один раз и сделайте это.

+0

да, я сделал это, и теперь его намного лучше .. спасибо , но когда я теперь использую клавиатуру для поворота текстурированной сферы, мне нужно повернуть текстуру сама, и изображение не появляется с полным размером. Я использую панорамное изображение jpg размером 5276x2688, есть ли какое-либо ограничение относительно размера изображения, которое нужно загрузить с помощью SOIL, так как остальная часть сферы появляется нетекстурированной, в то время как остальная часть изображения тоже не там. – mallahyk

+0

@mallahyk: реализация OpenGL имеет определенные ограничения на максимальный размер изображения. Вы можете запросить фактический предел, используя 'glGetInteger (GL_MAX_TEXTURE_SIZE, ...)'. Я вижу в ваших «комментариях к коду» (зачем использовать комментарии, просто вставьте его в свой вопрос, вы можете их редактировать), что вы используете режим генерации текстур GL_SPHERE_MAP. Сферная карта - это режим отображения отражения. То, что вы, вероятно, хотите, это явно указанные координаты текстуры, а не некоторый режим генерации текстурных координат. – datenwolf

+0

Я хочу создать виртуальную среду через сферическое отображение. Как вы думаете, что я могу сделать? – mallahyk