Войти
ПрограммированиеФорумГрафика

наложение mipmap текстуры на сферу opengl

Страницы: 1 2 Следующая »
#0
14:44, 8 мая 2012

есть сферическая текстура, есть сфера, обычное наложение текстуры на сферу, никаких проблем
как только генерирую mipmap уровни на полюсах сферы появляются "стяжки" (генерировал автоматически и сам mipmap уровни (при ручной генерации каждый из mipmap уровней оставался корректной сферической текстурой и наложение каждой из них по отдельности в качестве обычных текстур проблем не вызывало), пользовался квадрик объектом и строил сферу вручную) проблема остается при всех комбинациях дынных путей решения.
без mipmap | наложение mipmap текстуры на сферу opengl
с mipmap | наложение mipmap текстуры на сферу opengl

    // Create MipMapped Texture
    glBindTexture(GL_TEXTURE_2D, texture[2]);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);
    //glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);

    //glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
    /*glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);*/
    /*glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL);*/
    //glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);
    gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);

пробовал всякие разные способы фильтрации текстур - результат либо есть mipmap текстура с "стяжкой", либо это обычная текстура с соответствующей фильтрацией.


#1
14:52, 8 мая 2012

Размеры текстуры какие?

#2
14:55, 8 мая 2012

1024x1024 или 512x512 или 1024х512 ну а генерируемые мной соответственно были до 4х4 для разных по размеру текстур результат не менялся в общем то

#3
15:20, 8 мая 2012

А эта сфера выпуклая или вогнутая? По картинке непонятно ведь. А если вогнутая, то это место как раз далеко, там мип-уровни и переключаются. Может в этом дело?

#4
16:06, 8 мая 2012

предлагаю GL_TEXTURE_MAX_ANISOTROPY_EXT

#5
17:03, 8 мая 2012

alorken

  сфера выпуклая, дело точно не в этом =) просто отключено освещение...


TauJIep

  равномерная сетка на сфере проблему не решает, то есть решает конечно... и я ей даже пользуюсь
  в общем... в сцене есть астероиды и планеты (то что относится к теме) астероиды как раз строю с помощью равномерной сетки (похожая тема аппроксимация икосаэдра) + холмовой алгоритм (для ландшафтов, кажется так называется)
у меня были проблемы с наложением текстурных координат решил ее так -
равномерная сетка на сфере | наложение mipmap текстуры на сферу opengl
сама текстура | наложение mipmap текстуры на сферу opengl
  в последствии текстура содержит только лишь полусферу, т.е. я ее просто напросто дублирую идя по текстуре сначала от центра до краев, а потом опять к центру, кстати, если быть честным, одна из полусфер чуть чуть (на глаз и не заметно вовсе) "вытянутей"
  связано это с четным/нечетным количеством колец, все эти ухищрения сделаны для того, что бы использовать для одного объекта одну текстуру, в противном случае проблем еще больше (бинд двух текстур, связующий шов, лишнее кольцо вершин, непонятнки с VBO, а если использовать одну текстуру с двумя полусферами, то в связующем кольце просто каша, никак не убирается)
  НО, так как это астероиды, то в глаза не бросается, что текстура дублируется, если пытаться использовать этот способ для планет, то проблему с текстурой так просто не обойти.
  найти алгоритм, по которому я бы смог на свою равномерную сферу наложить обычную сферическую текстуру я не нашёл, даже если таковой и имеется, не сломается ли он при наложении мипмап текстуры (ведь текстура положим останется сферической) и будет ли мною построенная полигональная модель (с учетом конечно же вершинных, индексных и и т.д.) быстрее стандартной (скорость критична) в общем предпочтительней использовать квадрик объект, я все надеюсь что ошибка семантического уровня


JohnSmith

  анизотропная фильтрация, насколько я знаю вроде расширение, крайне нежелательно ее использование, она вроде лучше всех остальных фильтраций, но и работает значительно дольше, да и даст ли он такой эффект, как мипмап, ведь при таковом совершенно нет проблем ни с разрешением, ни с размером экрана, ни с степенью отдаленности, ни какой ряби, даже работает вроде как быстрей (из меньшего числа пикселей идет выборка, правда размытость, не критично)

#6
20:18, 8 мая 2012

vsegdatrezv, если твоя сфера - это та же, что точками на первой картинке изображена, то там похоже передняя часть отсечена ближней плоскостью отсечения, и в центре задняя часть сферы видна.

#7
21:05, 8 мая 2012

alorken
это совершенно разные проекты, совершенно разные сферы. там где точками отмечено - это равномерная сетка на сфере (полусфере). а в начале - просто квадрик объект, 100% там видна передняя плоскость сферы
а "стяжка", кстати говоря, на обоих ее полюсах

#8
8:46, 9 мая 2012

Попробуй это: http://iquilezles.org/www/articles/patchedsphere/patchedsphere.htm

#9
9:27, 9 мая 2012

интересный вариант, легко построить, легко натянуть текстуру.
соответственно есть недостаток
другая равномерная сфера | наложение mipmap текстуры на сферу opengl
придется помучатся с cubemap текстурой, что бы в данных скоплениях не было "стяжек", но это решаемо вопрос времени, но вот скорость работы такой сферы, мало того мной построена, еще по сути использование аж 6 текстур, будет ли кубмап достаточно быстр, но это уже надо строить, замерять, во общем время появится надо будет такую сделать замерить
неужели этот баг не решается стандартными средствами, только обходными путями?

#10
11:27, 9 мая 2012

vsegdatrezv
> еще по сути использование аж 6 текстур
Кубмап - одна текстура.

#11
14:23, 9 мая 2012

Mipmapping выбирает mip-уровень исходя из отношения количества пикселей к количеству текстелей, которые покроют полигон. Если у тебя текстура - это круг, который накладывается на половину сферы, то на полюсе получается самое лучшее качество для полигона. Соответственно если при отрисовке взять два одинаковых(по количеству пикселей на экране) полигона возле экватора и возле полюса, то для "полюсного" полигона приходится больше текстелей текстуры и выбирается другой mip-уровень. Получается надо делать такую текстурную раскройку, чтобы на любой полигон приходился одинаковый по площади кусок текстуры. Что-то типа:

Изображение


Может в этом проблема?

#12
14:36, 9 мая 2012

alorken
> gluBuild2DMipmaps
Тоже подумал об этом.
Можно попробовать получить текстуру с одним из мип уровней, и наложить ее на сферу. Например, через glGetTexImage. Это, чтобы все полигоны точно имели один и тот же мип уровень.
Если наложится гладко - то действительно проблема в том, что разные полигоны имеют разный мип уровень.

upd
Еще в интернетах пишут никогда не использовать gluBuild2DMipmaps, а использовать GL_GENERATE_MIPMAP или glGenerateMipmap.

#13
15:03, 9 мая 2012

там где текстура является кругом (4ая картинка) у треугольников примерно равные пощади, как в текстурном плане так и в пространстве, по текстуре я иду с квадратной зависимостью (и резать ничего не надо =) ), а что касается исходной проблемы, даже если предположим, что на полюсе более плохое/хорошее качество (ну из за неравномерного распределения площадей), как я уже писал, каждый из уровней является сферической текстурой, какой бы уровень не был выбран на полюсах, "стяжек" быть не должно, хотя... когда я накладывал каждый из уровней в качестве обычных текстур, таких проблем не было, каждый из уровней - правильная сферическая текстура как и исходная

#14
15:34, 9 мая 2012

Запиши какой-то мип уровень в файл, сравни.

Страницы: 1 2 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.