Конференция "Игры" » Как из двух изображений получить TGA с альфа каналом? [Delphi]
 
  • Домик (19.06.07 13:36) [0]
    Подскажите, как можно из двух соображений получить tga с альфа каналом? Хотелось бы сделать оптимизацию дистрибутива игры за счет пережатия всех графических ресурсов в jpeg (tga занимает намного больше места), а потом на этапе загрузки игры  (или даже на этапе установки игры) генерировать из них текстуры с альфа каналом. К тому же есть много изображений, у которых контур одинаковый и для них можно было бы вообще использовать одну картинку с альфой.

    Искал в Инете подобные решения, но ничего не нашлось. В основном примеры как прочитать и отобразить tga. А хотелось бы именно работу с tga. Может быть, есть где-то уже готовые модули, описание или статьи по этой теме? Буду премного благодарен :)
  • Yashin © (19.06.07 20:01) [1]
    А чем тебя БМП не устраивает?
  • Домик (19.06.07 23:32) [2]
    А чем он меня должен устраивать? В bmp изображения занимают еще больше чем в tga и при этом не имеют альфа канала. Мне же все эти манипуляции нужны в большей степени для того, чтобы в разы сократить дистрибутив игры, пережав текстуры в jpg. И еще, к примеру использовать одно изображение альфа канала для разных текстур с идентичным контуром, уже на этом можно с экономить прилично места.
  • Rial © (20.06.07 04:36) [3]
    Не очень понял, в чем же проблема...
    Ну так и пережми все изображения в JPEG, делов то !
    Надо хванить альфу отдельно - да ради бога,
    делай 2 JPEG-а. Хотя в большинстве случаев
    подходит такой подход: альфу рассчитавать
    из самих цветов картинки. Нипример, чем больше
    сумма цветов, тем больше альфа, т.е. черный будет прозрачным ...
  • Домик (20.06.07 12:34) [4]
    > Не очень понял, в чем же проблема...

    Надо внимательнее читать ;)
    Я еще в заголовке написал "Как из двух изображений получить TGA с альфа каналом?"... В этом и проблема, не знаю, как работать с tga, все те примеры, что попадались, в основном показывают, как его прочитать и отобразить...

    > Хотя в большинстве случаев
    подходит такой подход: альфу рассчитавать
    из самих цветов картинки.


    Мне такой подход не подходит, мне нужно именно из двух изображений.
  • МистерТ (20.06.07 14:21) [5]
    Лучший (ИМХО) способ:
    - основное изображение хранить в цветном jpeg.
    - маску альфа-канала хранить в bmp с палитрой 256 оттенков серого (или вообще ч/б, т.е. два цвета), соответственно индекс цвета в палитре - степень прозрачности.
  • Sapersky (20.06.07 15:38) [6]
    Как из двух изображений получить TGA с альфа каналом?

    Подозреваю, что правильно вопрос формулируется так: как сформировать из 2-х картинок 32-битный битмап (в памяти) и из него сделать текстуру OGL.

    <skipped>Брюзжание по поводу неумения glscene'ров вычислить 2+2 без помощи великой и могучей библиотеки</skipped>
  • Домик (20.06.07 16:17) [7]
    > Подозреваю, что правильно вопрос формулируется так: как сформировать из 2-х картинок 32-битный битмап (в памяти)

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

    [оффтопик] Извиняюсь за резкость, но тут порой вопросы задают вообще без какой-либо формулировки и при этом авторам дают ответы. И я немного удивился, что довольно внятный вопрос с описанием преследуемой цели ваши натренированные телепатические способности не способны разобрать :) [оффтопик]

    > и из него сделать текстуру OGL.

    Интересует именно работа с tga без ogl так как хотелось бы сделать переупаковку текстур на этапе установки игры, т.е. единоразово.

    > Брюзжание по поводу неумения glscene'ров вычислить 2+2 без помощи великой и могучей библиотеки

    Подколол :) Но GLScene тут не причем. Кроме этого раньше были попытки редактировать tga, к примеру, перекрашивать текстуру в нужный цвет, но при этом альфа канал пропадал. Искал примеры работы с tga форматом, редактирование и прочее, но ничего толком не нашлось, можно предположить, что плохо искал, если так, то ткните носом, где можно найти... Буду благодарен.
  • @!!ex_ (20.06.07 17:04) [8]
    1) bmp 24 бита не больше чем 24 бита tga. У них ваще дамп данных одинаково реализованный.
    2) Столкнулся с такой же идеей и пришел к png.
     а) Не надо парится с совмещением картинок.
     б) Текстурщики значительно лучше дружат с прозрачностью в png. Поскольку реализуется она обычными средствами  фотожопа. А Афльфа канал тгашный требует дополнительный усилий.
     в) Блендинг тга работает кривее.(Во всяком случае у меня png текстура дает великолепнйы результат, а тга - в прозрачных участках добавляет к цвету текстуры еще и цвет фона. У png же, нет такого понятия как цвет фона вообще.)
    3) Вопрос у тебя реально не правильно сформулирован. И ты сам же вносишь сумятицы.
    Я лично понял также как и [6] Sapersky   (20.06.07 15:38).
    ТОгда не понятно при чем тут вообще tga.
    4) Что мешает по статьям о загрузке tga разобраться как его сохранять? ПРинцип то один и тот же, что для чтения, что для записи.
    5) если ты генеришь свою картинку, что мешает генерить ее в свой внутреннй формат заточенный под свои нужды?
    6) ...
    7) ...
    8) ... и еще много много вопросов ...
  • Домик (20.06.07 18:28) [9]
    >  
    2) Столкнулся с такой же идеей и пришел к png.
    а) Не надо парится с совмещением картинок.


    Я не парюсь с совмещением картинок, вся эта затея для попытки уменьшить дистрибутив игры.

    > б) Текстурщики значительно лучше дружат с прозрачностью в png. Поскольку реализуется она обычными средствами  фотожопа. А Афльфа канал тгашный требует дополнительный усилий.

    С этим никаких проблем не возникало.

    >в) Блендинг тга работает кривее.(Во всяком случае у меня png текстура дает великолепнйы результат, а тга - в прозрачных участках добавляет к цвету текстуры еще и цвет фона. У png же, нет такого понятия как цвет фона вообще.)

    Это легко лечится заданием фону необходимого цвета.

    > 3) Вопрос у тебя реально не правильно сформулирован. И ты сам же вносишь сумятицы.

    Хорошо, согласен, вопрос корявый. Только не пойму в чем его корявость, раз все понимают все что угодно только не то, что я имею в виду. Я идиот, убейте меня кто-нибудь! :)

    > ТОгда не понятно при чем тут вообще tga.

    При том, что мне нужно результат получить в формате tga. А теперь еще раз по пунктам:
    а) есть изображение текстуры в texture.bmp
    б) есть изображение альфа канала для текстуры в alpha.bmp
    в) нужно texture.bmp склеить с alpha.bmp и получить результат maskedTexture.tga.

    Теперь понятно? :)

    > 4) Что мешает по статьям о загрузке tga разобраться как его сохранять? ПРинцип то один и тот же, что для чтения, что для записи.

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

    > 5) если ты генеришь свою картинку, что мешает генерить ее в свой внутреннй формат заточенный под свои нужды?

    Задача уменьшить дистрибутив игры. Я хочу переупаковывать текстуры из jpg в tga во время установки игры, это удобно тем, что этот нужно будет выполнить всего один раз.
  • @!!ex_ (20.06.07 18:56) [10]
    Хм. А если эффект из нескольких цветов состоит, как цвет фона подобрать? :))

    P.S>
    Если вдруг не в курсах:
    png - формат со сжатием и прозрачностью.

    Я повторю еще раз:
    tga и bmp - практически одно и тоже.

    в) нужно texture.bmp склеить с alpha.bmp и получить результат maskedTexture.tga.
    И где здесь речь об jpeg? :))))
    склеив bmp и bmp, ты получишь tga размером равным сумме размеров. Чуть меньше, за счет обединения заголовков.
  • Домик (20.06.07 19:46) [11]
    > Хм. А если эффект из нескольких цветов состоит, как цвет фона подобрать? :))

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

    > Если вдруг не в курсах:
    png - формат со сжатием и прозрачностью.


    Я в курсе. Только как-то в голову не приходило попробовать использовать png в качестве текстур. Спасибо за наводку, уже подумываю о нем как об альтернативном варианте.

    >Я повторю еще раз:
    tga и bmp - практически одно и тоже.


    Да, ключевое слово практически. У bmp нет никакого сжатия и естественно альфа канала тоже нет.

    > И где здесь речь об jpeg? :))))

    Это уже не принципиально, в коде что jpeg, что bmp будут приведены к единому типу TBitmap, а вот как там уже из этого получить tga? Впрочем, я уже написал, что буду тщательнее разбирать формат tga, уже нашел пару довольно подробных примеров работы с tga. И еще попробую поковырять формат png.
  • @!!ex_ (20.06.07 20:32) [12]
    > Ты имеешь в виду ситуацию, когда разные края текстуры имеют
    > разные цвета? Если да, то в этом случае под каждый край,
    > фон закрашивается наиболее подходящим цветом.

    Те надо этот геморой?
    А текстурщикам твоим? :))


    > Да, ключевое слово практически. У bmp нет никакого сжатия
    > и естественно альфа канала тоже нет.

    tga использует rle сжатие. Практически не применимое к текстурам.
    bmp кстати тоже может использовать сжатие, так что они вообще идеентичны.
    там даже принцип хранения дампа одинаковый, снизу вверх и в виде BGR.


    > Это уже не принципиально, в коде что jpeg, что bmp будут
    > приведены к единому типу TBitmap, а вот как там уже из этого
    > получить tga? Впрочем, я уже написал, что буду тщательнее
    > разбирать формат tga, уже нашел пару довольно подробных
    > примеров работы с tga. И еще попробую поковырять формат
    > png.

    Не. Битмап тоже надо преобразовывать.

    ИМХО я бы рассмотрел два варианта:
    1) свой внутренний формат, который будет хранить данные в удобном тебе виде.
    RGB со сдатием + A
    2) че нить просто типа png юзать. Например через DevIL. Если найдешь какую нить другую более удобную либу - делись. :)
  • Sapersky (20.06.07 22:22) [13]
    Хорошо, согласен, вопрос корявый. Только не пойму в чем его корявость

    Вопрос нормально сформулирован.
    Другое дело, что описанную проблему можно решить гораздо проще, безо всяких переупаковок на этапе установки и тем более при загрузке (последнее - вообще кошмар, хотя я сам, каюсь, грузил так jpeg'и... 7 лет назад). Т.е. под "правильно формулируется" я имел в виду "на самом деле вам нужно".

    Но хозяин - барин, считает, что нужен ему tga - будет ему tga:
    http://megalib.com/books/351/ch07/07-01.html#Heading1
  • Домик (21.06.07 00:24) [14]
    > @!!ex_   (20.06.07 20:32) [12]
    > Те надо этот геморой?
    > А текстурщикам твоим? :))


    Это уже из разряда привычки. Что тут поделать, раз у tga такая "фича", никто не жаловался :) Сейчас вот нужно было сделать png текстуру для экспериментов, и экспортируя её из psd в png возникли некоторые неудобства с созданием альфы, просто потому что изначально она рисовалась под tga. В общем, на вкус и цвет... :)

    >tga использует rle сжатие. Практически не применимое к текстурам.
    > bmp кстати тоже может использовать сжатие, так что они вообще
    > идеентичны.


    А как же альфа канал? А в целом ход мыслей понял и в конкретном случае не принципиально чем bmp отличается от tga :)

    >ИМХО я бы рассмотрел два варианта:

    Спасибо за наводки, буду пробовать...

    > Sapersky   (20.06.07 22:22) [13]
    > Другое дело, что описанную проблему можно решить гораздо проще, безо
    > всяких переупаковок на этапе установки и тем более при загрузке
    > ... Т.е. под "правильно формулируется" я имел в виду "на самом деле
    > вам нужно".


    Хорошо. Какие наиболее оптимальные решения, по вашему мнению, можно использовать для подобной задачи? Или под более оптимальным решением как раз и подразумевалось: "сформировать из 2-х картинок 32-битный битмап (в памяти) и из него сделать текстуру OGL."?

    За ссылку спасибо, такое довольно подробное описание формата мне не попадалось...
  • @!!ex_ (21.06.07 08:28) [15]
    > А как же альфа канал? А в целом ход мыслей понял и в конкретном
    > случае не принципиально чем bmp отличается от tga :)

    Я вообще имел ввиду не наличие/отсутствие альфы. А размеры и способ хранения. :)
  • antonn © (21.06.07 09:25) [16]

    > У bmp нет никакого сжатия и естественно альфа канала тоже
    > нет.

    спешу вас обрадовать, у bmp есть альфаканал
  • @!!ex_ (21.06.07 09:31) [17]
    > [16] antonn ©   (21.06.07 09:25)

    не у стандартного, вроде.
  • antonn © (21.06.07 10:10) [18]
    не вроде, а у самого стандартнейшего.
    http://antonn.ru/_images/scr/7.GIF 5Кб - яблоко с альфой (да и вообще вся та формочка), хранится в программе в bmp.
    tbitmap.pixelformat:=pf32bit; - четвертый байт используется как альфа. Есстественно, нужно и ручками поработать, чтобы правильно его рисовать, а не "батонокидательством" заниматься, как любил выражаться один товарищ:)
  • @!!ex_ (21.06.07 10:27) [19]
    > [18] antonn ©   (21.06.07 10:10)
    > не вроде, а у самого стандартнейшего.
    > http://antonn.ru/_images/scr/7.GIF 5Кб - яблоко с альфой
    > (да и вообще вся та формочка), хранится в программе в bmp.
    > tbitmap.pixelformat:=pf32bit; - четвертый байт используется
    > как альфа. Есстественно, нужно и ручками поработать, чтобы
    > правильно его рисовать, а не "батонокидательством" заниматься,
    > как любил выражаться один товарищ:)

    Просто в описании стандарта ничего не говорится о 32 битах.
 
Конференция "Игры" » Как из двух изображений получить TGA с альфа каналом? [Delphi]
Есть новые Нет новых   [134431   +6][b:0][p:0.001]