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

OpenGL Вопросы (98 стр)

Страницы: 195 96 97 98 99 100 Следующая »
#1455
12:57, 11 апр 2025

  Вот решение подсказали, а воспользоваться, походу, им не получится... Там для одинаковых, не смещённых текстур, а мне надо для смещённых... И желательно чтоб ещё и части текстур. :(

  Есть какая-то возможность выбрать кусок текстуры и составить другую текстуру, не прибегая к каким-нибудь фреймбуферам?
  ... а может это и есть решение? Использовать фреймбуфер?!

#1456
13:07, 11 апр 2025

Mirrel
> Вот решение подсказали, а воспользоваться, походу, им не получится... Там для одинаковых, не смещённых текстур, а мне надо для смещённых... И желательно чтоб ещё и части текстур. :(
>
>   Есть какая-то возможность выбрать кусок текстуры и составить другую текстуру, не прибегая к каким-нибудь фреймбуферам?
>   ... а может это и есть решение? Использовать фреймбуфер?!
Ты же хочешь сделать средствами Opengl, а значит средствами видеокарты. А это значит использовать нужно шейдеры или фреймбуферы. Но я сомневаюсь, что только фоеймбуферами без шейдеров удастся смешать две текстуры.
Хотя может я и ошибаюсь, просто мое мнение.
Мне так кажется.

#1457
13:09, 11 апр 2025

MikeNew, выше (1456) скинул решение. Проверю, отпишусь, работает или нет.
  Если будет всё работать на устаревшем OpenGL, то с шейдерами проблем будет меньше. И там просто реализовать надо будет это решение.

#1458
14:25, 11 апр 2025

Mirrel
> прозрачны, чёрные.
>   Есть такое понятие, отсутствие цвета. Люди назвали это чёрным цветом, где нет ни какого цвета.
Тогда изъясняйся понятнее. Если ты имеешь в виду черный цвет пиксела, то так и говори.
«Отсутствие пикселей в текстуре» звучит как будто в текстуру не загружены данные, но ни как пиксели чёрного цвета

#1459
18:37, 11 апр 2025

AMM1AK
> «Отсутствие пикселей в текстуре»
отсутствующие включенные пиксели - так подойдёт?

#1460
15:10, 17 апр 2025

Выше выкладывал решение по работе с текстурами.

// подготавливаем цель 1, выводим текстуру в фреймуффер 0.
  rtarget_Set(pzTarTex1);
  one_texture_Draw(0, 0, _myFrame + 2, memRect);
  rtarget_Set(RT_NO_TARGET);

// подготавливаем цель 2, выводим текстуру в фреймуффер 1.
  rtarget_Set(pzTarTex0);
  triple_texture_Draw(0, 0, _myFrame + 1, memRect, videoMem[$23c0]);
  rtarget_Set(RT_NO_TARGET);

// дальше код ломает просто всю отрисовку.

// пытаемся работу произвести с готовыми текстурами, которые переданы в текстуры выше.
  glActiveTexture(GL_TEXTURE0);
  glEnable(GL_TEXTURE_2D);
  glBindTexture(GL_TEXTURE_2D, tex_GetTextireID(rtarget_GetSurface(pzTarTex0)));
  // указываем что текстуру надо заменить
  glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
  // выираем следующую текстуру
  glActiveTexture(GL_TEXTURE1);
  glEnable(GL_TEXTURE_2D);
  glBindTexture(GL_TEXTURE_2D, tex_GetTextireID(rtarget_GetSurface(pzTarTex1)));

  glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
  glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_SUBTRACT);

  glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS);
  glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE);
  glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
  glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);

  glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_SUBTRACT);  // Modulate ALPHA with ALPHA
  glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_PREVIOUS);
  glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA, GL_TEXTURE);
  glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);
  glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA, GL_SRC_ALPHA);

В общем данное решение, не то чтобы не работает, оно ломает всю отрисовку. Вся модуляция прицепляется ко всем текстурам. Кто-то знает решение?

P.S. мне надо после этого действия вывести текстуру которую получил и вернуть всю модуляцию в изначальное значение? Как отключить модуляцию?

#1461
15:35, 17 апр 2025

Funtik
> на решения в твоей ссылке в виде шейдеров 2.0

The equivalent with GL 2.0 shaders

у тебя всё нормально?

  Но по сути... предоставленное решение всё равно не лучше, если б я вручную всё делал...

#1462
15:52, 17 апр 2025

Funtik, так и не догадался?
  Ответ проще некуда. Мне просто нужно чтоб работало. А без шейдеров работать будет, значит и с шейдерами работать будет (неужели я этого уже не писал ранее?).

#1463
16:04, 17 апр 2025

Funtik
> Ты слишком негативный и склочный
возможно. Но с тем как многие подходят к вопросу, приходится таким быть. И возможно виноват в этом не ты, но если мне память не изменяет, то ты так же участвовал в "травле" меня, по поводу и без (чаще без, возможно не про тебя, а про любителей хренью страдать и показывать себя выше других).

#1464
16:25, 17 апр 2025

Funtik
> Правдоруб - Да!
правдоруб - это когда ты знаешь человека и говоришь правду ему в лицо.
  Точно зная что это правда! )))

  Меня ты не знаешь, ты не даже предполагать не можешь правды обо мне (только по стилю общения предполагать).

#1465
21:42, 17 апр 2025

  Ну в общем я нашёл решение и проблему... Можно просто вывести текстуру и вычесть из неё входящую текстуру.

  glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
  glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB,  GL_SUBTRACT);
  glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA,  GL_SUBTRACT); 
  glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB,  GL_PRIMARY_COLOR);

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

  Всё работает. Теперь спрайты можно резать. ))) Если не задать "GL_COMBINE_ALPHA", то ни чего вы не нарежете. Накладываемая текстура должна быть RGBA=$FFFFFF00. Тогда прозрачность накладываемого спрайта добавляется.

#1466
21:22, 21 мая 2025
type
  GLESPVertex = ^GLESTVertex;
  GLESTVertex = record
    U, V    : Single;
    X, Y    : Single;
  end;

TColor = record
    R, G, B, A: Single;
  end;

var
  Vertices: array [0..17] of GLESTVertex;
  VertColor: array [0..17] of TColor;
...
  glEnableClientState(GL_TEXTURE_COORD_ARRAY);
  glTexCoordPointer(2, GL_FLOAT, 16, @Vertices[0].U);
  glEnableClientState(GL_COLOR_ARRAY);
  glColorPointer(4, GL_FLOAT, 0, @VertColor[0]);

  glEnableClientState(GL_VERTEX_ARRAY);
  glVertexPointer(2, GL_FLOAT, 16, @Vertices[0].X);

  glDrawArrays(GL_TRIANGLES, 0, 18);

  glDisableClientState(GL_VERTEX_ARRAY);
  glDisableClientState(GL_COLOR_ARRAY);
  glDisableClientState(GL_TEXTURE_COORD_ARRAY);
...

Что вообще может быть не так с этим кодом? В данном варианте, пропадает цвет.
Тут выводятся три текстуры с разным цветом, в одно место.

Мне что, обязательно надо вывести каждую текстуру отдельно? Чтоб можно было наложить вторую/третью не теряя цвет?

  Отбой, сам же себе ответ написал... я текстуру менял когда данные передавал на прорисовку.

#1467
22:15, 21 мая 2025

Mirrel

+ chatgpt
#1468
22:47, 21 мая 2025

skalogryz
> chatgpt
он бы за меня рендер написал, который не будет тормозить на мобилках. )))

#1469
1:20, 22 мая 2025

Mirrel

+ chatgpt
+ chatgpt+zengl
Страницы: 195 96 97 98 99 100 Следующая »
ПрограммированиеФорумГрафика

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