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

Вращение на 90 градусов на лету между разными текстурами?

#0
15:01, 16 фев 2021

Народ, запарился тут уже.
Есть 1текстура 2048 на 2048
Есть 2текстура 1024 на 720

У шейдера есть координаты области в 1текстуре
У шейдера есть координаты области во 2текстуре

Как перебросить пиксели из области в 1текстуре во 2текстуру перевернув их ?


Вот код:

    vec2 uv = fragXY;
    float rot = radians( 0.0);
    vec2 fragXYR  = rotate2D(uv,rot);
    vec2 minus = fragXYR/iResolutionXY;
    
    vec4 pixel_palette_shortcut = texture(Texture2D0,vec3(SpriteUVCoords+minus,TextureStoreChannel));
    vec4 pixel_from_palette=texture(Palette,vec2(pixel_palette_shortcut.r,PaletteIndex));
    
    
    fragColor=pixel_from_palette;

fragXY это от 0 до 1 в 2текстуре область
IResolutionXY это ширина и высота одинаковая для каждого пикселя(без интерполяции параметр)
SpriteUVCoords это область в 1текстуре в ее масштабе

Palette это просто забирается пиксель из палитры - не играет роли.

Главные участники это Texture2D0 - 1текстура
и текстура Framebuffer текущего , как 2текстура.

ПОчему это не просто?
Потому что идет смешение двух текстур с разными размерами
И поэтому там разные координаты размещения областей с пикселями.

#1
22:35, 16 фев 2021

Вопрос решился.
ОКАЗЫВАЕТСЯ НАДО ЮЗАТЬ VERTEX SHADER
а я насмотрелся shadertoy поверил в fragment shader:)
переставил формулу вращения в вертексный и изменил gl_Position и все началось вертетьсЯЯЯ

#2
9:23, 17 фев 2021

Хотя, даже в вертексном чето дела идут так себе.

#3
17:42, 17 фев 2021

Что значит перебросить? Рендер ту текстур? Или добудь пиксели на CPU, вроде можно уже.

#4
17:50, 17 фев 2021

Да, я рендерю во FRAMEBUFFER
Пиксели беру из второй текстуры.

Но похоже вся эта лажа в мире интерполяции работает криво.
Лучше на CPU переставить пиксели.

#5
21:05, 17 фев 2021

Тоесть это сделать можно, но там нужно считать от того, что текстурные координаты [0,1] или брать через другие функции не texture2D, мудрить с данными между vs и fs. Тоесть написать можно, но есть шанс, что ты просто математику не напишешь, а она может быть и 10 строк всего.

#6
21:15, 17 фев 2021

Да это я уже понял.
есть такие функции называется выравнивание по сетке AlignToGrid
Короче в мире интерполяции сложно. Проще CPU.
Мне надо то кратные 90 градусам углы.

#7
22:10, 17 фев 2021

AlexeiK

Да это я уже понял.
есть такие функции называется выравнивание по сетке AlignToGrid
Короче в мире интерполяции сложно. Проще CPU.
Мне надо то кратные 90 градусам углы.

что ты несешь вообще за дичь? Чем тебе CPU поможет если ты не можешь координаты повернуть на 90 градусов так : 

float2 b= float2(a.y, -a.x)?
#8
22:14, 17 фев 2021

Polyflow3d
Слушай, ты че токо с позиции дичи можешь заходить в беседу?
Заходи, но токо к другим.

#9
22:31, 17 фев 2021

AlexeiK

Слушай, ты че токо с позиции дичи можешь заходить в беседу?

какая беседа, ты просто несешь дичь. Другого слова я не могу найти.

Заходи, но токо к другим.

да не вопрос, буду угарать со стороны

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

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