Войти
ПрограммированиеФорум2D графика и изометрия

Вывести большой Bitmap в окно с помощью openGL (5 стр)

Страницы: 1 2 3 4 5 6 7 Следующая »
#60
12:29, 5 дек. 2016

Suslik
Видимо проблема в том, что ТС не пользует шейдеры.


#61
12:39, 5 дек. 2016

Abraziv
Шейдер не нужен.
Градиент перед заливкой можно взять
pixel = Sample(myPalette, m_pfDataBuffer[hh]);

#62
14:21, 5 дек. 2016

Abraziv
рабочий вариант https://yandex.ru/maps

#63
5:16, 6 дек. 2016

foxes Это что ?

#64
11:28, 6 дек. 2016

Чтобы не мылило с LINEAR и не корявило с NEAREST нужно попасть попиксельно. Тексель текстуры == пиксель на экране. Вообще для начала неплохо бы отрендерить в файл и посмотреть осталось ли там мыло.

#65
11:40, 6 дек. 2016
uniform sampler2D paletteTex;
uniform sampler2D dataTex;
uniform vec2 viewportSize;

layout(location = 0) out vec4 resultColor;

int main()
{
  float palettePos = texture2D(dataTex, gl_FragCoord.xy / viewportSize).r; //значение 0..1
  resultColor = texture1D(paletteTex, palettePos); //перевод значения в цвет
}

Хм. Я так понимаю шейдер вызывается в графическом конвейере для каждого текселя. С помощью gl_FragCoord и viewportSize вычисляется координата в массиве float dataTex, texture2D возвращаем тексель и .r берём только красный канал (почему только красный??? ).
sampler2D - указывает формат хранения текселей в текстуре ??? dataTex - это массив флотов (по идеи другого быть не может =)) ), как он узнает, что там флоты ???
resultColor = texture1D(paletteTex, palettePos); , аналогично, только для одномерной текстуры (палитры)
далее рисуем resultColor цветом, где рисуем, на чём рисуем =)))))
Жесть.

.z.

А где его взять градиент этот.

pixel = Sample(myPalette, m_pfDataBuffer[hh]);
Sample это что ? Функция связывающая [0..1] с значением в палитре myPalette?
#66
11:45, 6 дек. 2016

Abraziv
> А где его взять градиент этот.
Нарисовать.

> Sample это что ?
Когда (если) начнешь изучать шейдерный язык, этот и остальные вопросы отпадет.

#67
11:48, 6 дек. 2016

Abraziv
> Хм. Я так понимаю шейдер вызывается в графическом конвейере для каждого
> текселя. С помощью gl_FragCoord и viewportSize вычисляется координата в массиве
> float dataTex, texture2D возвращаем тексель и .r берём только красный канал
> (почему только красный??? ).
> sampler2D - указывает формат хранения текселей в текстуре ??? dataTex - это
> массив флотов (по идеи другого быть не может =)) ), как он узнает, что там
> флоты ???
> resultColor = texture1D(paletteTex, palettePos); , аналогично, только для
> одномерной текстуры (палитры)
> далее рисуем resultColor цветом, где рисуем, на чём рисуем =)))))
> Жесть.
может быть, попытаться самому подумать головой? иногда это помогает. то, чем ты начинаешь заниматься, называется help vampire — вместо того, чтобы самостоятельно восполнять очевидные пробелы в знаниях, набрав в гугле "glsl tutorial", ты просишь, чтобы за тебя ещё разжевали и в рот положили.

форум нужен для того, чтобы найти способ решения проблемы, который трудно найти в поисковике. уроки по шейдерам для начинающих — это явно не тот случай.

#68
11:49, 6 дек. 2016

Abraziv
> Sample это что ? Функция связывающая [0..1] с значением в палитре myPalette
Да.
Палитра - массив цветов. число из [0..1] переводишь в [0..размер_палитры] и получаешь индекс в палитре. Можно еще проинтерполировать между двумя ближайшими элементами.

#69
11:51, 6 дек. 2016

Suslik
Да я вампир. Ой укушу укушу, убегай скорее. Читаю уже, чё ещё делать.

#70
16:58, 6 дек. 2016

Abraziv
> Это что ?
Ну как что? Один большой битмап. или ты передумал?

#71
17:14, 7 дек. 2016

Сгенерировал палитру:
Снимок | Вывести большой Bitmap в окно с помощью openGL

Нарисовал ею.

m_puColorBuffer[k] = palette[(uint)((1.0 - m_pfDataBuffer[hh]) * m_uSizePalette)];

Получилась полная фигня:
Снимок2 | Вывести большой Bitmap в окно с помощью openGL

#72
17:19, 7 дек. 2016


Снимок | Вывести большой Bitmap в окно с помощью openGL другой палитрой Снимок2 | Вывести большой Bitmap в окно с помощью openGL. Данные не достигают пика, т.е. 1. Короче задница

#73
17:23, 7 дек. 2016

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

#74
17:24, 7 дек. 2016

Abraziv
> m_puColorBuffer[k] = palette[(uint)((1.0 - m_pfDataBuffer[hh]) *
> m_uSizePalette)];
Что это за жесть? Я так понимаю, ты без шейдеров..

Форум - плохое средство для отладки программ. Попробуй использовать отладчик. (с) Кто-то отсюда.

Страницы: 1 2 3 4 5 6 7 Следующая »
ПрограммированиеФорум2D графика и изометрия

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