IrrlichtФорум

IrrLicht (для новичков) - тупые вопросы (31 стр)

Страницы: 130 31 32 3336 Следующая »
#450
11:11, 18 авг 2010

А как сделать обработку рендеринга в отдельном потоке? Я пишу под Linux, и мне нужно, чтобы сцена рендерилась, и на ней динамически появлялись новые элементы в определённое время..
Я попробовал вынести операцию рендеринга в отдельный поток, проставил мьютексы, но программа почему-то ничего не отрисовывает =(

#451
11:42, 18 авг 2010

device::postEventFromUser тоже не работает из отдельного потока

#452
12:23, 18 авг 2010

Итак, вот что я пробовал, чтобы создавать модели на уровне через определённые промежутки времени:

1. Создать отдельный поток и там вызывать функцию создания и прорисовки модели каждые N секунд.
Результат: SEGFAULT при отрисовке

2. Создать отдельный поток и делать в нём рендеринг. В основном - делать действия, описанные в п. 1
Результат: SEGFAULT при начале рендеринга

3. Создать отдельный поток и вызывать postEventFromUser с UserEvent
Результат: События именно от этой функции не отлавливаются. От клавы, мыши, всего остального - всё ок.

Собственно, где я дурак? =)

#453
12:33, 18 авг 2010

bugman, ты читал http://www.gamedev.ru/community/irrlicht/articles/?id=3095 ?

#454
12:55, 18 авг 2010

Да, читал. И делал, в принципе, так же, как там. Разница, правда, в том, что у меня вся работа с движком завёрнута в класс. Я создаю этот класс в main'e, потом передаю указатель на него в поток в качестве параметра, и в потоке уже по этому указателю работать пытаюсь.

#455
14:11, 18 авг 2010

Переписал всё без классов и под винду, точно по примеру. Вылетает на smgr->drawAll()
Может есть какой-то более грамотный способ добавления моделей в сцену в определённые промежутки времени?

#456
16:19, 18 авг 2010

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

Скажите, плз, как можно нарисовать обычный квадрат определённого цвета в углу экрана и удалить его через 3 секунды?

#457
16:41, 19 авг 2010

Скажите, плз, как можно нарисовать обычный квадрат определённого цвета в углу экрана и удалить его через 3 секунды?

Думаю надо оттолкнуться от этого:

device->getTimer()->getTime();
#458
20:23, 19 авг 2010

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

#459
22:25, 19 авг 2010

>Я так понял, что ITimer - абстрактный класс, и самого по себе его использовать нельзя.
1. В Иррлихте ничего нельзя использовать без device или без пространства имён irr.

irr::ITimer::getTime(); 

2. Без Иррлихта можно работать со временем примерно так

#include <time.h>
...
time_t tt = time(NULL);

>Скажите, плз, как можно нарисовать обычный квадрат определённого цвета в углу экрана
Example 006 2D Graphics.

#460
22:40, 19 авг 2010

Kukuy
> #include <time.h>
> ...
> time_t tt = time(NULL);

Именно так я и сделал, спасибо =)

Kukuy
> Example 006 2D Graphics.
Но я так понимаю, этот квадрат привяжется к сцене, и будет реагировать на движения камеры. Мне же нужно, чтобы он в любом случае был в углу экрана. Я сделал через GUIEnvironment - нарисовал картинку с квадратом и выводил как в примере с выводом логотипа IrrlichtKukuy

#461
0:52, 20 авг 2010

>Но я так понимаю, этот квадрат привяжется к сцене, и будет реагировать на движения камеры.
Просто вставьте это в отрисовочный цикл перед driver->endScene();

    driver->draw2DRectangle
    (
      video::SColor(100,255,0,0),
      core::rect<s32>(-100, -100, 100, 100)
    );

И смотрите в левый верхний угол экрана.

В 2д режиме картинка не реагирует на движение камеры. "Движение" имитируется посредством "прокрутки" фона.

Перевёл пример Example 006 2D Graphics и выложил его в статьях.

#462
3:04, 20 авг 2010

Да, спасибо, то что нужно!

#463
23:20, 22 авг 2010

подскажите пожалуйста-как сделать так что бы в запущенной игре в настройках менять разрешение экрана и эти изменения вступали в силу без перезапуска игры,заранее спасибо

#464
0:13, 23 авг 2010

Где-то тут в сообществе такой вопрос уже точно раньше задавали. Посмотри эту тему. В общих словах нужно сначала сохранить состояние сцены, потом пересоздать устройство.

Страницы: 130 31 32 3336 Следующая »
IrrlichtФорум

Тема в архиве.