Форум Игромании
 
Регистрация
Справка
Пользователи Календарь Сообщения за день

Ответ
 
Опции темы
Старый 20.11.2006, 11:22   #281
Заблокирован
 
Аватар для Fulcrum
 
Регистрация: 16.09.2006
Адрес: Matrix4x4
Сообщений: 56
Репутация: 10 [+/-]

Предупреждения: 400
Цитата:
Ой, а мы и не знали! Но я просто разместил объяву, че за предъявы! Просто программирование игр не по моей части.
Не бань меня :плакаит:


А по какой вы части если не секрет. Уж не сетевое ли программирование часом?
Fulcrum вне форума  
Ответить с цитированием
Старый 20.11.2006, 15:33   #282
Юзер
 
Регистрация: 07.06.2006
Адрес: this
Сообщений: 162
Репутация: 112 [+/-]
pokibor
ОК! Спасибо!
__________________
www.rodionovstepan.ru
razor21 вне форума  
Отправить сообщение для razor21 с помощью ICQ Ответить с цитированием
Старый 20.11.2006, 22:00   #283
Юзер
 
Аватар для STOLEN
 
Регистрация: 13.05.2006
Сообщений: 273
Репутация: 92 [+/-]
Люди плиз подскажите, подробно как установить физический движок ODE на GLScene. Просто у меня возникли неожиданные траблы с установкой...
STOLEN вне форума  
Отправить сообщение для STOLEN с помощью ICQ Ответить с цитированием
Старый 21.11.2006, 20:06   #284
Юзер
 
Регистрация: 07.06.2006
Адрес: this
Сообщений: 162
Репутация: 112 [+/-]
pokibor
Неудивительно, но у меня опять возник вопрос, теперь более глобальный . После того, как я выучил самые основы Irrlicht я бы хотел попробовать создать такую ситуацию: появляется окно, в котором написано мол привет, нажми на эту кнопку и ты начнешь играть (это-то я могу), далее после того как юзер кликает по кнопке появляется город и чувачоg, которым надо управлять в городе. Создать кнопки надписи, загрузить карту города и рисунок человека я смогу, НО проблема у меня вот в чем: как это делается??? Я имею ввиду, что после того, как сделан клик по кнопке появился город и чел. Ну я надеюсь вопрос понятен? Ну вот как делается в играх: дано меню, кликаешь по "Новая игра!" и появляется сама игра.
__________________
www.rodionovstepan.ru
razor21 вне форума  
Отправить сообщение для razor21 с помощью ICQ Ответить с цитированием
Старый 22.11.2006, 01:21   #285
Кандидат наук
 
Аватар для pokibor
 
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта [+/-]
Цитата:
Сообщение от razor21 Посмотреть сообщение
pokibor
Неудивительно, но у меня опять возник вопрос, теперь более глобальный . После того, как я выучил самые основы Irrlicht я бы хотел попробовать создать такую ситуацию: появляется окно, в котором написано мол привет, нажми на эту кнопку и ты начнешь играть (это-то я могу), далее после того как юзер кликает по кнопке появляется город и чувачоg, которым надо управлять в городе. Создать кнопки надписи, загрузить карту города и рисунок человека я смогу, НО проблема у меня вот в чем: как это делается??? Я имею ввиду, что после того, как сделан клик по кнопке появился город и чел. Ну я надеюсь вопрос понятен? Ну вот как делается в играх: дано меню, кликаешь по "Новая игра!" и появляется сама игра.
Ну сперва тебе нужно подумать о том, в какой момент в память будут загружены "город и чел", и вообще все необходимые тебе каркасы и текстуры. Либо они будут загружены при старте игры, либо после нажатия на кнопку, когда в них появится необходимость. В своей игре я решил эту проблему так: модели всех юнитов грузятся с текстурами при старте игры, а относящаяся к конкретной карте информация (skybox, текстуры ландшафта) - только при старте этой карты. Не могу сказать, что подход правильный, но мне уже что-либо переделывать поздно . учти, что загрузка ресурсов - процесс не такой быстрый, так что думай, принимая решение.
Теперь по поводу кода. Тут нужно сделать для удобства две отдельные функции:
[code]
void Меню (IrrlichtDevice *Device);//Отвечает за обработку меню
void Игра (IrrlichtDevice *Device);//Отвечает за игру
[code]
Певая функция будет, собственно, рисовать в цикле рендера твое меню, назначит Device'у перед началом рисования обработчик и прочее. В общем, выглядить она будет примерно так:
Код:
void Меню (IrrlichtDevice *Device) {
  Загузить_Или_Создать_Все_Элементы_Меню();
  Device->setEventReceiver(new Обработчик_Событий_Для_Меню());
  while (Не_Надо_Выходить) {
    Нарисовать_Меню();
  }
}
Обработчик же при клике на кнопке "Начать Игру" будет вызывать еще одну функцию:
Код:
void Начать_Игру() {
  for each Элемент_Интерфейса_Меню {
    Элемент_Интерфейса_Меню->setVisible(false);
    //Куда разумней сделать элементы невидимыми, чем удалять, а
    //при выходе из игры назад в меню создавать их.
    //Впрочем, это зависит от того, какие у тебя это
    //элементы и сколько их...
  }
  //Обработчик событий
  delete Device->getEventReceiver();
  Device->setEventReceiver(NULL);
  //Теперь элементы интерфейса невидимы, так как твои рисунки
  //рисуются в цикле рендера меню, а Receiver вызывает обработчики
  //в том же потоке, то, пока мы не выйдем из этой функции,
  //они рисоваться не будут
  //И запускаем обработку игры
  Игра(Device);
  //Теперь, когда мы выйдем из игры, нужно опять показать
  //все элементы меню
  for each Элемент_Интерфейса_Меню {
    Элемент_Интерфейса_Меню->setVisible(true);
  }
  //И восстанавливаем обработчик меню
  Device->setEventReceiver(new Обработчик_Событий_Для_Меню());
}
Ну и осталось написать отвечающую за битву функцию. Буду считать, что ты все, что нужно для битвы, грузишь непосредственно в ней. Если нет, то просто передавай в нее что нужно.
Код:
void Игра (IrrlichtDevice *Device) {
  Загрузить_Все_Каркасы_И_Текстуры_Игры();
  Device->setEventReceiver(new Обработчик_Событий_Для_Игры());
  while(Не_Нужно_Выходить_Из_Игры) {
    Рисуем_И_Обрабатываем_Все_Что_Нужно_Для_Игры();
  }
  //Мы выходим из игры
  Device->getSceneManager()->clear();//Очищаем сцену от всех node'ов
  //Теперь удаляем анимированные каркасы, простые каркасы и текстуры
  for each Анимированный_Каркас
  {
    Device->getSceneManager()->getMeshCache()->removeMesh(Анимированый _Каркас);
  }
  for each ПростойКаркас
  {
    ПростойКаркас->drop();
  }
  for each Текстура
  {
    Device->GetVideoDriver()->removeTexture(Текстура);
  }
  //Обработчик событий
  delete Device->getEventReceiver();
  Device->setEventReceiver(NULL);
  //Ну и в итоге у нас чистая сцена, память очищена - и мы
  //спокойно возвращаемся в меню
}
__________________
Товарищ, верь: пройдет она -
Эпоха лживых, злых понятий.
Весь мир очнется ото сна,
И на обломках "демократий"
Напишут наши имена!

Мы были волшебницами (оригинальное фентези)
Тень Войны (фанфик по ГП)
pokibor вне форума  
Отправить сообщение для pokibor с помощью ICQ Ответить с цитированием
Старый 22.11.2006, 16:05   #286
Юзер
 
Регистрация: 07.06.2006
Адрес: this
Сообщений: 162
Репутация: 112 [+/-]
pokibor
Большое тебе спасибо! Но у меня по приведенному тобой коду есть несколько вопросов.
Первый: в функции void Menu (IrrlichtDevice *Device) есть цикл, так вот у меня вопрос связанный с его условием выполнения, т.е. что такое "Не_Надо_Выходить".
Второй: Элемент_Интерфейса_Меню, я так понимаю, это может быть button, static text, scroll bar, да? Тогда писать надо так:
Код:
 for each button
{  button->setVisible(false);
}
 for each staticText
{ static->setVisible(false);
}
Или все элементы можно скрыть так:
Код:
 for each button
{ button->setVisible(false);
  static->setVisible(false);
  scroll->setVisible(false);
}
Как правильно?
И наконец третий вопрос: в функции void Game(IrrlichtDevice *Device) тоже есть цикл, объясни, что писать в его условном выражении.
Спасибо!
__________________
www.rodionovstepan.ru
razor21 вне форума  
Отправить сообщение для razor21 с помощью ICQ Ответить с цитированием
Старый 22.11.2006, 16:49   #287
Кандидат наук
 
Аватар для pokibor
 
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта [+/-]
Странный вопрос. Не_Надо_Выходить - это некое условие, как его написать - твое дело. Например, если у тебя будет некая переменная is_exit, которая по умолчанию false, а когда пользователь щелкнет на кнокпе "Выход" станет true - то пиши while (!is_exit). Вообще, ты как-то слишком буквально понимаешь приведенный выше псевдокод.
Теперь по поводу второго вопроса:
setVisible в Irrlicht определено в интерфейсе IGUIElement, от которого наследуют все конкретные элементы интерфейса. А как ты их будешь перебирать (тут некоторый пробел в моих знаниях... если не ошибаюсь, в стандарте C++ никаких for each нет, она введена была в .NET, и к Win32-приложениям отношения иметь не должна) - твое дело. Хочешь - пихать ссылки на все создаваемый тобой элементы интерфейса в один массив или вектор на IGUIElement *, хочешь - разделяй по типам, хочешь - вообще заводи отдельные переменные для каждого добавляемого элемента и вручную прописывай setVisible им всем.
__________________
Товарищ, верь: пройдет она -
Эпоха лживых, злых понятий.
Весь мир очнется ото сна,
И на обломках "демократий"
Напишут наши имена!

Мы были волшебницами (оригинальное фентези)
Тень Войны (фанфик по ГП)
pokibor вне форума  
Отправить сообщение для pokibor с помощью ICQ Ответить с цитированием
Старый 22.11.2006, 20:32   #288
Юзер
 
Регистрация: 07.06.2006
Адрес: this
Сообщений: 162
Репутация: 112 [+/-]
pokibor
Большое спасибо! Теперь я понял, как энто все реализуется! Еще раз спасибо!
Кста, как полноэкранный режим врубить?
__________________
www.rodionovstepan.ru
razor21 вне форума  
Отправить сообщение для razor21 с помощью ICQ Ответить с цитированием
Старый 22.11.2006, 22:11   #289
Кандидат наук
 
Аватар для pokibor
 
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта [+/-]
Цитата:
Сообщение от razor21 Посмотреть сообщение
Кста, как полноэкранный режим врубить?
Кошмар! Ты хоть хелпом пользуешься и примеры разбираешь? В createDevice есть соответствующая переменная:
Код:
IrrlichtDevice* irr::createDevice (
  video::E_DRIVER_TYPE  deviceType = video::EDT_SOFTWARE,  
  const core::dimension2d< s32 > &  windowSize = core::dimension2d< s32 >(640, 480),  
  u32  bits = 16,  
  bool  fullscreen = false,  //Вот и оно. Что передать, надеюсь, сам догадаешься
  bool  stencilbuffer = false,  
  bool  vsync = false,  
  IEventReceiver *  receiver = 0,  
  const char *  sdk_version_do_not_use = IRRLICHT_SDK_VERSION 
 )
__________________
Товарищ, верь: пройдет она -
Эпоха лживых, злых понятий.
Весь мир очнется ото сна,
И на обломках "демократий"
Напишут наши имена!

Мы были волшебницами (оригинальное фентези)
Тень Войны (фанфик по ГП)
pokibor вне форума  
Отправить сообщение для pokibor с помощью ICQ Ответить с цитированием
Старый 23.11.2006, 14:35   #290
Юзер
 
Регистрация: 07.06.2006
Адрес: this
Сообщений: 162
Репутация: 112 [+/-]
Бафое спасибо!
__________________
www.rodionovstepan.ru
razor21 вне форума  
Отправить сообщение для razor21 с помощью ICQ Ответить с цитированием
Старый 27.11.2006, 18:03   #291
Юзер
 
Аватар для ZaVok
 
Регистрация: 06.11.2005
Адрес: кому надо спросит.
Сообщений: 140
Репутация: 28 [+/-]
Ну чтож, сюда, так сюда. Шейдеры говорите? А можно поподробней?
Я думал, что шейдеры только и умеют, что воду красивую делать, да кубики блестящие рисовать а на счет дырок от пуль я не знаю. Можете мне, остолопу объяснить, как такое сделать? (речь идёт о ирлихте (для тех, кто не в теме)) желательно исходничком
__________________
Эта подпись всех задолбает!!!
Ну а хотя, кто её знает?
ZaVok вне форума  
Ответить с цитированием
Старый 27.11.2006, 22:00   #292
Кандидат наук
 
Аватар для pokibor
 
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта [+/-]
Нет, не можем. Потому что это один из тех вопросов, по которым впору книжки писать. Так что вооружайся книжками и статьями из Интернета - и впреред. Как шейдеры в Irrlicht использовать, смотри идущий с Irrlicht пример 10.Shaders, а вот как их писать - учись. Могу лишь сказать, что тебе неплохо бы сразу выбрать, какую библиотеку ты будешь использовать - Direct3D или OpenGL (в Irrlicht, как ты должен знать, можно использовать любую из них). В первом случае после изучения основ принимайся за HLSL, во втором - за GLSL. Ну а некоторую общую информацию по шейдерам смотри http://forum.igromania.ru/showpost.p...&postcount=594.
Еще тебе, кстати, придется с версией определится, но про возможности каждой версии вершинных и пиксельных шейдеров узнаешь в процессе изучения онных.
__________________
Товарищ, верь: пройдет она -
Эпоха лживых, злых понятий.
Весь мир очнется ото сна,
И на обломках "демократий"
Напишут наши имена!

Мы были волшебницами (оригинальное фентези)
Тень Войны (фанфик по ГП)
pokibor вне форума  
Отправить сообщение для pokibor с помощью ICQ Ответить с цитированием
Старый 28.11.2006, 13:35   #293
Guest
 
Сообщений: n/a
Вопрос по irrLight'у:

Как сделать поверхность земли не по карте высот (*.bmp), а взять значение высоты конкретной ячейки из внешнего массива?

TerrainNode - этого не позволяет
 
Ответить с цитированием
Старый 28.11.2006, 13:42   #294
Кандидат наук
 
Аватар для pokibor
 
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта [+/-]
Цитата:
Сообщение от DremLIN Посмотреть сообщение
Вопрос по irrLight'у:
Как сделать поверхность земли не по карте высот (*.bmp), а взять значение высоты конкретной ячейки из внешнего массива?
TerrainNode - этого не позволяет
Тут выхода два - либо ты переписываешь исходники Irrlicht, либо самостоятельно правишь координаты вершин. Во втором случае я не нашел, как в Irrlicht сгенерить каркас заданой конфигурации, так что тебе нужно будет сделать некий базовый каркас - плоскость с нужным тебе количеством вершин по горизонтали и вертикали, и потом в Irrlicht подправить координаты ее вершин
__________________
Товарищ, верь: пройдет она -
Эпоха лживых, злых понятий.
Весь мир очнется ото сна,
И на обломках "демократий"
Напишут наши имена!

Мы были волшебницами (оригинальное фентези)
Тень Войны (фанфик по ГП)
pokibor вне форума  
Отправить сообщение для pokibor с помощью ICQ Ответить с цитированием
Старый 28.11.2006, 13:44   #295
Юзер
 
Аватар для ZaVok
 
Регистрация: 06.11.2005
Адрес: кому надо спросит.
Сообщений: 140
Репутация: 28 [+/-]
Так почему же ты считаешь, что шейдерами делать следы от пуль в стенах проще? Испокон веков это делали спрайтами, а вот теперь ты предлагаешь делать их шейдерами, утверждая что так проще. Проще кому? Компьютеру при расчётах? отлично, но лично я пока за этим не гонюсь . Мне бы как-нибудь попроще для написания (то есть проще в реализации). есть-ли какая-гибудь возможность определить вектор нормали того полигона, с которым происходит коллизия?
__________________
Эта подпись всех задолбает!!!
Ну а хотя, кто её знает?
ZaVok вне форума  
Ответить с цитированием
Старый 28.11.2006, 14:42   #296
Кандидат наук
 
Аватар для pokibor
 
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта [+/-]
Цитата:
Сообщение от ZaVok Посмотреть сообщение
Так почему же ты считаешь, что шейдерами делать следы от пуль в стенах проще?
Я не говорил, что проще. Я говорил, что это будет работать быстрее, а потому правильнее.

Цитата:
Сообщение от ZaVok Посмотреть сообщение
Испокон веков это делали спрайтами, а вот теперь ты предлагаешь делать их шейдерами, утверждая что так проще.
Ты не прав, испокон веков никаких следов от пуль в стенах не было и в помине, все движки были 2D, а любому пользователю хватало 640 Kb оперативки.

Цитата:
Сообщение от ZaVok Посмотреть сообщение
Проще кому? Компьютеру при расчётах? отлично, но лично я пока за этим не гонюсь .
Я тебе предложил несколько вариантов на выбор. А без изучения шейдеров ты все равно далеко в игровом программировании не уедешь.
Цитата:
Сообщение от ZaVok Посмотреть сообщение
Мне бы как-нибудь попроще для написания (то есть проще в реализации). есть-ли какая-гибудь возможность определить вектор нормали того полигона, с которым происходит коллизия?
Насколько я понимаю, для определения коллизии ты используешь getCollisionPoint? Так вот, в него последним параметром по ссылке идет переменная типа triangle3df, в которую записывается, с каким треугольником (т.е. собственно полигоном) столкнулся луч. А у треугольника есть метод getNormal(). Вот тебе и нормаль. Ты хоть хелп читай в отношении тех функций и классов, которыми пользуешься.
__________________
Товарищ, верь: пройдет она -
Эпоха лживых, злых понятий.
Весь мир очнется ото сна,
И на обломках "демократий"
Напишут наши имена!

Мы были волшебницами (оригинальное фентези)
Тень Войны (фанфик по ГП)
pokibor вне форума  
Отправить сообщение для pokibor с помощью ICQ Ответить с цитированием
Старый 30.11.2006, 20:25   #297
Юзер
 
Аватар для ZaVok
 
Регистрация: 06.11.2005
Адрес: кому надо спросит.
Сообщений: 140
Репутация: 28 [+/-]
А это правда, что у ирлихта большая нелюбовь к 3ds файлам новой версии 3DMax-а? Есть-ли способ их подружить, если это не сложно конечно? А то меня как-то не прельщает конвертить файлы
А какой формат файлов у ирлихта самый "любимый"?
__________________
Эта подпись всех задолбает!!!
Ну а хотя, кто её знает?
ZaVok вне форума  
Ответить с цитированием
Старый 30.11.2006, 21:50   #298
Кандидат наук
 
Аватар для pokibor
 
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта [+/-]
Цитата:
Сообщение от ZaVok Посмотреть сообщение
А это правда, что у ирлихта большая нелюбовь к 3ds файлам новой версии 3DMax-а? Есть-ли способ их подружить, если это не сложно конечно? А то меня как-то не прельщает конвертить файлы
А какой формат файлов у ирлихта самый "любимый"?
Нет, неправда. Правда в том, что 3d max конветит модели в 3ds файлы (особенно анимацию) будто левой пяткой через правое плечо, потму лучше с ними не связываться. Я лично использую x-файлы, но с ними тоже есть некоторые проблемы - во первых, Irrlicht версии 0.14 не понимал, если в x-файле было больше одного анимированного каркаса, во-вторых, он понимал только текстовые x-файлы. Как с этим в более поздних версиях не знаю - я хоть и перевел игру на 1.0, но ее возможности относительно каркасов не изучал. Но могу сказать, что описаные выше ограничения вовсе не так критичны. Модели по-любому во всех играх приводят к одному каркасу (в крайнем случае пихни каждый каркас в отдельный файл, кроме того если каркас не анимирован - проблем нет, а может уже и баг с анимацией исправили), а текстовый файл... ну если считаешь, что место много жрет - жми зипом, благо Irrlicht может файлы из зипов вытаскивать.
Экспортер для 3D Studio Max в x качай здесь: http://www.andytather.co.uk/Panda/di...downloads.aspx.
__________________
Товарищ, верь: пройдет она -
Эпоха лживых, злых понятий.
Весь мир очнется ото сна,
И на обломках "демократий"
Напишут наши имена!

Мы были волшебницами (оригинальное фентези)
Тень Войны (фанфик по ГП)
pokibor вне форума  
Отправить сообщение для pokibor с помощью ICQ Ответить с цитированием
Старый 01.12.2006, 02:06   #299
Guest
 
Сообщений: n/a
Перевернуть координаты XYZ -> XZY

Имеется ли способ привести координаты ирлихта в соответствие с привычным:
X - горизонтальная ширина (вправо-влево от зрителя)
Y - горизонтальная глубина (ближе-дальше от зрителя)
Z - вертикальная высота
Чтобы где нибудь в заголовке один раз прописать и потом пользоваться...
 
Ответить с цитированием
Старый 01.12.2006, 07:13   #300
Юзер
 
Аватар для ZaVok
 
Регистрация: 06.11.2005
Адрес: кому надо спросит.
Сообщений: 140
Репутация: 28 [+/-]
А как на счёт My3D? тем более, что этот эксопртер есть в поставке с ирлихтом.
__________________
Эта подпись всех задолбает!!!
Ну а хотя, кто её знает?
ZaVok вне форума  
Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 15:35.


Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Rambler's Top100 Яндекс цитирования