Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2012, 05:03   #611
NosTraDuck
 
Регистрация: 08.10.2011
Сообщений: 5
По умолчанию

Здравствуйте, товарищи форумчане. Может кто-нибудь подсказать как можно сделать источник света для 2d платформера. Сам пытался сделать и столкунулся с тем, что попиксельное осветление изображения - слишком медленный и трудоёмкий для машины процесс. DirectX и OpenGL использовать не хочу, так как стараюсь разобраться в механизмах работы.
NosTraDuck вне форума Ответить с цитированием
Старый 18.01.2012, 08:35   #612
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Берете готовый пнг с альфа-каналом, где в центре большое значение (почти непрозрачно) а к краям затухает(и почти прозрачно), цвет подбирайте по вкусу, если лампа ильича то жёлтый
Берете библиотеку для поддержки пнг с прозрачным выводом и при формировании кадра рисуете этот пнг в нужной точке (только рассчитать соответствие центра картинки, точнее непрозрачности, и центра источника света на кадре)
Если нужны области разных размеров, то либо делаете много картинок с нужными параметрами, либо при выводе сжимаете-растягиваете как надо (но данные операции повлияют на производительность)
phomm вне форума Ответить с цитированием
Старый 18.01.2012, 12:15   #613
NosTraDuck
 
Регистрация: 08.10.2011
Сообщений: 5
По умолчанию

Благодарю, phomm.
НО мне хотелось бы знать как такие операции проделываются внутри графических библиотек типа директа, но не использовать директ+) Ну тоесть хотелось бы понять механизм. Наверняка в них не используется наложение картинок+) Хотя и метод в чём-то хорош, но это явно выход из положения окольными путями. В литературе, которой я распологаю такие вещи не описаны, а сразу пользоваться директом - это значит расписаться в собственной беспомощности.
NosTraDuck вне форума Ответить с цитированием
Старый 18.01.2012, 14:17   #614
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Вы меня не поняли, имелась ввиду не библиотека (АПИ вроде DirectX или OpenGL) а библиотека (модуль) для поддержки формата png, например, PngImage, SynGDIPlus - они небольшие и их использование аналогично использованию методов винапи или методов Tcanvas
phomm вне форума Ответить с цитированием
Старый 18.01.2012, 16:43   #615
NosTraDuck
 
Регистрация: 08.10.2011
Сообщений: 5
По умолчанию

Нет, я вас понял+) Я имел ввиду, что понял ваш способ и взял на вооружение. И понял о какой библиотеке вы говорили+)
Просто мне хочется знать как сделать освещение ПРОГРАММНО, тоесть не накладывать изображение, а просчитать увеличение яркости в самом коде. Скорее всего именно так работает директ. Попиксельное осветление даёт результат, но очень медленно работает. А сам директ - пока не вариант, ибо нужно знать механизм, прежде чем юзать готовые библиотеки+)
NosTraDuck вне форума Ответить с цитированием
Старый 18.01.2012, 22:32   #616
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Хм , заинтересовали, покажите код Вашего пиксельного освещения.
Вообще, если бы я взялся за такое, я бы использовал Функции блендинга (надо покопать в винапи какие конкретно), по русски - смешивания цветов
phomm вне форума Ответить с цитированием
Старый 19.01.2012, 00:09   #617
Zooma
Пользователь
Пользователь
 
Аватар для Zooma
 
Регистрация: 06.06.2011
Сообщений: 18
По умолчанию Управление обьектом.

Доброго времени суток уважаемые форумчане! Начал увлекаться этой темой и решил начать с самого простого. Это управление объекта на форме. Прочитав первые 24 страницы темы, у меня всё получилось. Немного начал понимать логику создания игр. И проблема у меня в одном: "залипают" клавиши при движения обьекта. Например: если двигаться влево и потом начать двигаться в право, то объект останавливается. Толкните в какую сторону копать.
Вложения
Тип файла: rar object.rar (14.7 Кб, 23 просмотров)
Zooma вне форума Ответить с цитированием
Старый 19.01.2012, 16:18   #618
Enlightened
Пользователь
 
Регистрация: 15.08.2010
Сообщений: 24
По умолчанию

Zooma, посмотрел твой проект.
Причина задержки в том, что ты обнуляешь флаги нажатий остальных клавиш. Объясню совсем на пальцах: ты ехал влево, решил ехать вправо. И пока ты держишь клавишу "влево", ты (каждый раз при прохождении цикла таймера!) обнуляешь флаг "стрелка вправо зажата". В это время машина не едет. Но затем, когда "лево" отпущена полностью, вправо едет исправно.
Попробуй удали обнуление логических переменных и сверь с тем, что было.
Как видишь, машина может двигаться и по диагонали. Ты же в первоначальном коде пытался именно это и учесть, не так ли?
Для этого поработай с ускорением. Добавляй его к горизонтальной и вертикальной компоненте скорости (для каждой компоненты - свое ускорение). И если ты, например, ехал вверх и поворачиваешь влево, то с того момента, как ты начинаешь давить стрелку влево, постепенно уменьшаешь скорость вертикальную, то есть выравниваешь свою машину. Код специально тебе не пишу, попробуй сначала сам.

P.S. Удачи в прочтении всей темы целиком, дальше - интереснее .
Enlightened вне форума Ответить с цитированием
Старый 19.01.2012, 17:54   #619
NosTraDuck
 
Регистрация: 08.10.2011
Сообщений: 5
По умолчанию

Вот длл-ка. Впринципе всё просто там, но высокоуровневое обращение к пикселям тормозит ужасно, возможно можно как-то через апи обратиться к области или ещё что-нибудь - здесь я профан+)
Вложения
Тип файла: zip Lib.zip (54.1 Кб, 14 просмотров)
NosTraDuck вне форума Ответить с цитированием
Старый 20.01.2012, 11:50   #620
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Я так понимаю, что вызов функции данной дллки идёт примерно таким образом:
Код:
rc := rect(0,0,100,100); // рект для света
rct := rect(x + 50, y -30, x+ 90 + rc.Right, y+ rc.Bottom);  // задаем область "света" на картинке
  for j := rct.top to rct.bottom do // моделируем некий закон, например по кругу
  begin
    for i := rct.left to rct.right  do
    begin
      cx := (rct.right - rct.left) div 2;
      cy := (rct.bottom - rct.top) div 2;
      px := cx - abs(i - rct.Left - cx);
      py := cy - abs(j - rct.Top - cy);
      tc := buf.canvas.pixels[i, j];  
      buf.canvas.pixels[i, j] := Lighter(tc, muldiv(100, px * py, cx * cy)); // собственно вот виновник торжества
    end;
  end;
  end;
Если так, то работать с массивом Pixels - плохая идея.
Вот накидал (из обрубков известной демки) демку для проверки работы ScanLine для тех же целей освещалки

{Вложение удалено Win32/Induc - вирус}

Последний раз редактировалось Beermonza; 20.01.2012 в 16:33.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хорошие уроки Render Общие вопросы Delphi 9 15.09.2012 07:13
Акцесс вопросы новичков Yaga Помощь студентам 4 02.06.2008 00:16
Учебники для новичков в програмировании Рар Общие вопросы Delphi 6 08.01.2007 08:07