Форум: "Игры";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
ВнизТекстура из нескольких бмп. OpenGL Найти похожие ветки
← →
Агент Смит [8] (2003-11-22 08:54) [0]Есть 30 файлов .bmp надо в процессе работы составлять из них одну текстуру и одевать на сферу, Как одевать текстуру понятно, я не знаю как из 30 файлов составить один бмп. Делать это надо так что бы ничего не тормозило, фрагменты текстуры во время работы нужно менять местами часто. Подскажите кто знает, плз.
← →
MrAngel (2003-11-22 16:53) [1]Хмм... не совсем понял. 30 изображений накладывать друг на друга или же из них составить картинку - своего рода пазл.
Если пазл то всё очень просто, ну всмысле просто если программируешь также на асме - тогда будет всё быстро. На языке высокого уровня наверное будет тормозить.
Если в случае накладки друг на друга, то вопрос такой, есть ли полупрозрачность у каждой техтуры (альфа канал)? Если есть, то асм сдесь 100% нужен. Если нет, то просто выбираешь переднюу текстуру и накладываешь её.
← →
Агент Смит [8] (2003-11-22 20:54) [2]Нет, как пазлы. Асм не знаю, может какой-нить есть способ?
← →
mrAld © (2003-11-22 22:22) [3]Довольно сложный процесс. Как понимаю, нужно переписывать весь битмап сферы. Т.Е. стандартными процедурами копируешь и вставляеш нужные картинки в бмп, а затем компилишь их в память карты. Но делать это нужно как можно реже. И вообще, собери несколько сфер, вырежи у них ненужное и наложи друг на друга. Вообще, какой-то странный способ генерить текстуры :))
← →
MrAngel (2003-11-22 23:24) [4]Если не через асм, то через функции API копирования BitBlt, BitBit, StretchBlt битовых карт. Эти функции все в gdi32.dll - но поверь мне работать будет о-о-о-очень медленно. Хочешь ещё медленней рисуй через канву - хотя отличия будут незначительными.
Делаешь так.
1. Сначала вычисли размер результируюшей текстуры. Хорошо если исходные изображения фиксированного размера, иначе придётся для каждого изображения брать свой размер.
2. Тебе нужен дескриптор устройства на котором будешь рисовать. Что бы не мучиться возьми уже готовый класс TBitmap, там уже есть небходимый хЭндл (Handle - дескриптор устройства).
3. Через вычисления определяешь в каком месте будешь рисовать каждое изображение, затем рисуешь через BitBlt используя Handle.
В результате в TBitmap будет полное изображение из картинок. Я описал всё это в общих чертах, код надо думать - времени нет :-)
← →
Агент Смит [8] (2003-11-26 16:53) [5]>работать будет о-о-о-очень медленно
Мдя.. Ниче не получается. Может кто подскажет какой-нить вариант по сабжу?
← →
MeF88 © (2003-11-26 17:28) [6]
> Мдя.. Ниче не получается. Может кто подскажет какой-нить
> вариант по сабжу?
Хмм... 30 больно много... Вот если бы 8, то проще было бы... А зачем тебе? А вообще просто генеришь первое состояние, потом на одну большую текстуру накладываешь два необходимых кусочка, но тормозить кажется будет не мало...
← →
Агент Смит [8] (2003-11-26 21:47) [7]В моей текстуре есть 25 постоянных "пазлов" и 5 которые нужно менять по определенному порядку примерно каждую секунду, эти пять картинок беруться из тех 25 по определенному алгоритму. Т.е. нужно 31 картинка, 1 постоянная из 25 "пазлов" и 30 отдельных из которых будут браться изменяемые пять. Мне нужно к постоянной "приклеить" пять дополнительных и получить одну текстуру которую можно одевать. Может я в какие дебри полез? Кто-то делал что-то подобное, может можно как-то проще?
← →
Unknown user © (2003-11-27 20:51) [8]2 Агент Смит. Не нужно генерить одну большую текстуру. Зачем. Подготавливаешь в памяти своих 30 текстур и затем накладываешь в нужные места своей сферы, вычислив предварительно тестурные координаты для каждой. И работать будет офигенно быстро, если конечно твои картинки не 2048х2048 :).
← →
Агент Смит [8] (2003-11-27 21:24) [9]>Unknown user © (27.11.03 20:51) [8]
Спасибо, попробую.
Я учу ОpenGl сам, по книжке Краснова, там про текстуры как-то расплывчато, попробую конечно сам разобраться, но очень буду признателен за примерчик.
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.033 c