Всё пытаюсь начать создание 2д платформера, но до сих пор не могу определится толком на основе чего он будет рендериться. Основные требования - масштабирование (типа, камера приближается\удаляется), а так же изменение палитры текстуры. Но и помимо этого готовенький исходник, в котором описаны прыжок по параболе с гравитацией, да коллизия с матрицей уровня. Из туторов нашёл только SMLF, но заставить его компилиться в код-блоксе мне так и не удалось (ранее создавал уже тему на этом форуме)
Потому я решил обратить взор на XNA. Тут уже по туторам описано создание платформера с коллизией. Так же в XNA есть возможность задать "светофильтр" на спрайте (но там дефайнами, то бишь заранее заданными переменными, пока не знаю как менять цвет "светофильтра" именно числовым значением).
Впрочем, это всё потом... В первую очередь интересует каким образом можно zoom-ировать картинку в XNA (разрешение игрового окна константное , разумеется), и возможно ли вообще такое?
Сообщение отредактировал Alkosha - Суббота, 10 Мая 2014, 02:51
Брал отсюда в самой верхней таблице с боковой надписью "виндовс" 5-ая строка сверху, в первом столбце (GCC 4.7 MinGW (DW2) - 32 bits) видовс у меня 32-ух разрядная. http://www.sfml-dev.org/download/sfml/2.0/
Сообщение отредактировал Alkosha - Понедельник, 24 Марта 2014, 15:25
Добавлено (21.03.2014, 00:52) --------------------------------------------- Ну вот всё последовательно как и тут делал. И версия код-блокса такая же, и версия SFML. И у того штриха тоже 7-ка...
DLL самого иррлихта в чем скомпилирована? Обычно идет 2 версии: GCC и Visual Studio. Если к exe, скомпилированному в GCC, поместить дллку студии, то программа вылетает. И наоборот.
)
Так дело в том, что с иррлихтом у меня как раз таки нет проблем... Проблема именно с SFML.
Добавлено (19.03.2014, 00:45) --------------------------------------------- Либы SFML тоже для компилятора mingw gcc качал.
Если рассматривать екземплы, то все они требуют папки с ресурсами. Возможно, что она лежит не там, где нужно.
Не смотря на то, что я ацкий ламер, про такие вещи я осведомлён. Тем паче для примера типа "хыллоу ворлд", где рисуется векторная фигура закрашенного кружочка, никаких ресурсов не требуется, ибо это процедурная графика.
Сообщение отредактировал Alkosha - Среда, 19 Марта 2014, 00:58
If you dynamically link the C runtime on Windows, you may need to put the following DLL files in your project directory: - libgcc_s_dw2-1.dll - libstdc++-6.dll
я так и поступил, скачал эти две ДЛЛ-ки, поместил в каталог с экзэшником... теперь стартует , и... "вындавс пытается найти способ устранения ошибки" (что-то в этом роде). Причём та же ситуация и на прекомпилированных экзэмплах, поставляемых в комплекте с движком. Быть может это от того, что сама вындавс -- 7-ка. В общем хз.
Теперь-то вы понимаете почему я решил всё-таки перевести исходник под ту либу, которая и компилится, и запускается безупречно ?
Сообщение отредактировал Alkosha - Вторник, 18 Марта 2014, 13:40
Ладно, в таком случае как проапгрейдить версию компилятора GCC в код-блоксе ?
Добавлено (17.03.2014, 12:48) --------------------------------------------- А, не. Тут указывается, что для конкретной версии gcc нужна конкретная версия SFML.... попробую исходники пересобрать, авось прокатит
Добавлено (17.03.2014, 14:07) --------------------------------------------- Только как создать в кодблоксе проект для компиляции smlf ? выбрать console aplication , а затем добавить в этот проект add files все cpp hpp файлы во всех подкаталогах исходника ?
Сообщение отредактировал Alkosha - Понедельник, 17 Марта 2014, 14:07
Это можно сделать и в 2Д просто высчитывая координаты бэкграунда как координаты_камеры/2 (хотя по факту лучше по формуле перспективы, которую можно найти на той же википедии)
Та не.. Я имел ввиду не плоскостной параллакс. А примерно такой (хотя тут такой эффект достигнут за счёт скроллинга отдельных строк с разной итерацией)
ЦитатаJunkerKun ()
Ну это уже не из-за либы, согласись
Ну дык, это скорее всего из-за версии mingw, или хз из-за чего. Факт в том, что банально застопорился на настройке компилятора.
ЦитатаJunkerKun ()
Бред, ибо см. выше про шейдеры и функцию смешения цветов.
Я особо не вникал, как устроен SFML, просто лишь предположил, что он схож по принципу с SDL. Ни о каких шейдерах на нём я не был в курсе.
Добавлено (15.03.2014, 21:07) --------------------------------------------- Даже русскоязычного комьюнити на эту SFML похоже, что нету...
Это библиотека для разработки рейл-тайм 3Д приложений, 2Д там достаточно рудиментарно.
за счёт того, что спрайты (точнее текстурки, натянутые на параллеллепипед с размерами x*y*0) находятся в трёхмерном пространстве и в зависимости от ракурса камеры можно сделать эффект параллакс-скроллинга. Ну и по ходу можно влепить ещё чёнить трёхмерного в 2д мир. набросок
ЦитатаJunkerKun ()
Тип FloatRect опять же принадлежит SFML, у типа rect<T> из Irrlicht нет никакого поля "left", у него есть поле "position" (или как-то так), которое возвращает двухмерный вектор с положением прямоугольника.
Эт я уже заметил
ЦитатаJunkerKun ()
Вывод - не занимайся ерундой, а просто продолжай делать на SFML. Irrlicht не для 2Д был написан.
С радостью бы... Но, во-первых, не могу толком настроить код::блокс на эту либу. Делал как тута. компилит нормально, но линкует как-то не так, ибо при запуске экзешника ругается на libgcc_s_dw2-1.dll (версия кодблокса 10.05). Во-вторых, я собираюсь динамически менять цветовую гамму на слоях бэкграунда \ спрайтах. Например, в рэтро-приставках это делалось изменением набора цветов палитры видеоконтроллера. В Irrlicht'e попробую через шейдеры (правда малость геморно).
SFML , как я понял, некое подобие SDL. То есть подобной функции там нет, это значит, что придётся попиксельно считывать картинку и по определённому условию задавать цвет пикселя, выводя на экран. Иными словами, ЦП будет адово нагружен.
Сообщение отредактировал Alkosha - Суббота, 15 Марта 2014, 19:40
И ГУЙ к нему (с какого-то буржуйского сайта, уже и не помню откуда именно) вот
Но почему-то он не вскрывает бэтмановские модельки.
Добавлено (07.03.2014, 23:37) --------------------------------------------- Но вот интересно, как им котобабу удалось загрузить...
Может то из-за сырого GUI ?
Добавлено (08.03.2014, 04:46) --------------------------------------------- А всё, разобрался. Через командную строку всё нормально открывается.
Добавлено (08.03.2014, 11:54) --------------------------------------------- Только вот не могу найти анимашки с катсцен (помимо пререндеренных, там есть ещё на движке). И с лицевой анимацией чё-то не то. Ротяка слиплась, а челючсть при этом гуляет.
Приветик, мальчишки)))) Как выдрать модели со скелетной анимацией из игор на UE3 (в частности интересует Batman AC), чтоб можно было в дальнейшем импортнуть в 3дмакс, например ?))) Какими утилитами ?))
Зачастую выдирают онли моделки да текстурки, без анимации))) А вот как именно с анимашкой выдрать?))))))
if (!onGround) dy=dy+0.0005*time; rect.top += dy*time; onGround=false; Collision(1);
currentFrame += 0.005*time; if (currentFrame > 6) currentFrame -=6 ;
if (dx>0) sprite.setTextureRect(IntRect(40*int(currentFrame),244,40,50)); if (dx<0) sprite.setTextureRect(IntRect(40*int(currentFrame)+40,244,-40,50));
class MyEventReceiver : public IEventReceiver { public: // наш собственный обработчик событий virtual bool OnEvent(const SEvent& event) { // просто запоминаем состояние любой клавиши - нажата/отжата if (event.EventType == EET_KEY_INPUT_EVENT) KeyIsDown[event.KeyInput.Key] = event.KeyInput.PressedDown;
return false; }
// метод возвращающий состояние для запрошенной клавиши virtual bool IsKeyDown(EKEY_CODE keyCode) const { return KeyIsDown[keyCode]; }
//конструктор, в цикле сбрасываем статус для всех клавиш MyEventReceiver() { for (u32 i=0; i<KEY_KEY_CODES_COUNT; ++i) KeyIsDown[i] = false; }
private: // массив для хранения статусов клавиш bool KeyIsDown[KEY_KEY_CODES_COUNT]; };
public : void gravity() { if(flrf==false) { gg.y-=0.5; } }
};
MYphys phys;
class sky { public:void rain(){ if(rainflag==true){ rainflag = false;
ps = smgr->addParticleSystemSceneNode(false); IParticleEmitter* em1 = ps->createBoxEmitter( aabbox3d< f32 >(0,00,00,resw,1,1), // размер эмиттера(куба) vector3df(0.5f,-2.0f,0.0f), // начальное направление 50,100, // частота испускания (мин,макс) SColor(0,255,255,255), // самый темный цвет SColor(0,255,255,255), // самый яркий цвет 400,800,30, // време жизни (мин,макс), угол dimension2df(32.f,32.f), // минимальный размер частиц dimension2df(96.f,32.f)); // максимальный размер частиц
ps->setEmitter(em1); // отдаем эмиттер системе //em->drop(); // а лично нам он не нужен
Добавлено (21.02.2014, 21:07) --------------------------------------------- Там гибрид из того, что я начинал ранее, потом забил. Вот нашёл чё-то на SFML , хочу перевести свой платформер.
есть исходник 2д платформера под библиотеку SFML. Хочу этот самый алгоритм заюзать, только под управлением движка irrlicht. В первую очередь компилятор ругался на переменную типа String. ни #include "windows.h" ни #include <string.h> не помогло, потому я заменил String на char*
Далее переменную типа FloatRect объявил так: rect<s32> rectan присвоил ей значение следующим образом: rectan=rect<s32>(7*32,9*32,40,50);
сейчас ругается на строчку rectan.left += dx * time; ,
E:\TURBO\platform\main.cpp|75|error: 'class irr::core::rect<int>' has no member named 'left'|
но ведь структуре rect<s32> присутствует поле left
Код
#include <SFML/Graphics.hpp>
using namespace sf; float offsetX=0, offsetY=0; const int H = 12; const int W = 40;
String TileMap[H] = {
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB", "B B B", "B B B", "B B B", "B B B", "B 0000 BBBB B", "B B B", "BBB B B", "B BB BB B", "B BB B", "B B BB BB B", "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB",
PLAYER(Texture &image) { sprite.setTexture(image); rect = FloatRect(7*32,9*32,40,50);
dx=dy=0.1; currentFrame = 0; }
void update(float time) {
rect.left += dx * time; Collision(0);
if (!onGround) dy=dy+0.0005*time; rect.top += dy*time; onGround=false; Collision(1);
currentFrame += 0.005*time; if (currentFrame > 6) currentFrame -=6 ;
if (dx>0) sprite.setTextureRect(IntRect(40*int(currentFrame),244,40,50)); if (dx<0) sprite.setTextureRect(IntRect(40*int(currentFrame)+40,244,-40,50));
Вы сперва определитесь с понятием "3д". Зачастую анаглифное кино тоже называют ТРИ ДЭ.
таки да, первый дум можно отнести к три дэ, имхо. Так как у спрайтов там как минимум три параметра положения в пространстве, как и в дюке нюкеме ТРИ ДЭ. Но это не полигональное три дэ, а рейкастинг однозначно. Для скептиков есть чит IDCLIP , при прохождении за пределы стен замечательно видно, что рендерится картинка столбцами, как и положено рейкастингу.
Но как бы там ни было, итоговая картинка всё равно проецируется на двухмерную плоскость, то бишь дисплей юзера.
Тут скорее всего придётся самому писать прогу, для замены пикселя символом. Я видел лишь единственный пример на openGL, где отрендеренная картинка конвертировалась в символы посредством шейдеров glsl
Сообщение отредактировал Alkosha - Понедельник, 06 Января 2014, 13:26
ДОС эмитируется когда она запускается в окне. чтобы был чистый ДОС надо выгрузить винду.
Но запускаю-то я в фуллскрине. Тем паче, я даже при выгруженной винде (перезагрузка в режиме MS-DOS) запускал те же самые descent'ы , и квейк , и nfs... Разница лишь в том, что в этом режиме не грузятся дрова на мышу, потому в квейке , например, только клавой можно управлять. А fps примерно такой же.
ЦитатаOpenGOO ()
Кстати, в движках Duke Nukem 3D и Doom не использовался рейкастинг.
О_о Эммм... Вы наверное спутали с третьим думом и с дюком нюкемом форэва.
В дюке нюкеме 3д есть возможность вертеть камеру вверх/вниз, и там нет сдвига перспективы по вертикали, то есть нет точки схода по оси Y, ровно так же, как нет её hertic'e , hexen'e, или воксельном, но в то же время рейкастинговом comanche. Или rise of triad, в котором движок основан вообще на wolf3d. И ещё одна отличительная черта рейкастинговых движков - нет этажа над этажом. уровни двухмерные при виде сверху в любом случае.
Промелькала такая мысля. Но будет ли там возможность всё сделать на свой лад? То есть не очередной клон дума, а полностью видоизменить от и до. ZDoom этож вроде типа готового конструктора (а-ля, гей-мейкеры всякие)
Сообщение отредактировал Alkosha - Суббота, 04 Января 2014, 22:52
Судя по описанию eduke32 использует OpenGL Doom95 использует DirectX.
Там есть опциональный выбор рендеринга. На openGL вообще не прёт, ибо видяха не тянет это API. (видяшка ATI Rage II) и при выборе софтверного рендеринга в eduke, там именно рейкастинговый графон, а не спрайтово-полигональное 3д, как если бы было на openGL. А на DX видяха вообще адски медленно рисует. Есть несколько игор с выбором D3D рендерера и софтверного. На D3D значительно тормознее, тот же MDK, или motorace. Хоть она фильтрует текстуры, производит коррекцию перспективы, тонирование Гуро дизерингом. Но по скорости уступает тому, что рисует непосредственно проц, поэтому всегда выбираю именно software render.
Кстати установленная ОСь win98 SE. Где всё ещё была поддержка ДОС-программ. Или вы хотите сказать, что DOS эмулируется , и картинку выводит исключительно DX ?
Сообщение отредактировал Alkosha - Суббота, 04 Января 2014, 16:11
У тебя просто проц уже не справляется, уменьши разрешение хотя бы. У тебя какая хоть видюха, а то даже Descent 3 в 1999г. уже использовал аппаратное ускорение.
Всё проц справляется.
На софтверном рендеринге Descent 1 и Descent 2 на разрешениях 640*480 летают. А там, как всем известно, даже полигональное 3д. Рейкастинги тем более он шпарит только так. Порт дюка eduke32 на разрешении 800*600 тоже работает идеально (чуток проседает правда, когда много wav-семплов воспроизводит, но если понизить воспроизведение сэмплов до 22 килогерц, то всё ровненько идёт) Порт дума Doom95 тоже идеально работает на разрешении 640*480. И даже сравнить тот же дум, где разная высота стен, векторное построение карт, куча спрайтов, ИИ, воспроизведение звуковых сэмплов, и тот пример, который я разбираю.
Добавлено (04.01.2014, 11:43) --------------------------------------------- Даже полигональное 3дэ для того проца раз плюнуть, если не используется коррекция перспективы при текстурировании. NFS 1 (NFS SE), и подобные гоночки, например.
Сообщение отредактировал Alkosha - Суббота, 04 Января 2014, 11:44
Дело оказывается не в рейкастинге. Сама SDL медленно выводит пиксели. Нужно непосредственно записывать в видео-озу vga-контроллера. Похоже придётся прибегнуть к асму, либо искать альтернативу SDL'ке для попиксельного вывода.
Ну тут очевидно, что самые затратные участки там, где происходит выборка пикселей из текстур (пола\потолка\спрайтов). Со сплошным закрашиванием этот рейкастинг достаточно шустрый.
Добавлено (27.12.2013, 12:31) --------------------------------------------- Ага. У операции сдвига приоритет меньше , чем у сложения и вычитания. Вот от чего была "текстурная шляпа". Нужно было просто в скобки заключить.