Пятница, 24 Мая 2024, 23:33

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
AlkoshaДата: Понедельник, 10 Ноября 2014, 18:40 | Сообщение # 121 | Тема: Движок Irrlicht
участник
Сейчас нет на сайте
Цитата stalker5889 ()
долго парился подгоняя разные irrlicht.dll


Ах да... точноо.. Длл... cool

Её-то я забыл подменить. Лежала со старой версии.

Но теперь когда положил соответствующую длл, выдаёт такое.



Теперь тут что-то с компоновщиком не то, видать.
AlkoshaДата: Понедельник, 10 Ноября 2014, 09:50 | Сообщение # 122 | Тема: Движок Irrlicht
участник
Сейчас нет на сайте
Цитата Snake174 ()
По идеи должен )


В BSP-локациях он вроде бы отсекает (так как алгоритм BSP это как раз в первую очередь предусматривает).
А вот на счёт загруженных в ноды моделек я не уверен.

Добавлено (28.10.2014, 09:05)
---------------------------------------------

Цитата Snake174 ()
Автор скорей всего уже 10 раз разобрался с этим )


Или попросту забил на это гиблое дело и ушёл в запой.

Добавлено (10.11.2014, 08:21)
---------------------------------------------
А пробовал кто-нибудь версию 1.8 под виндой скомпилить на mingw gcc ?

Чего-то у меня фатал эррор происходит даже при инициализации видео-драйвера. (с версией 1.7.2 всё нормально).

Windows 7 х86
Кодблокс 13.12 (mingw качал тоже последнюю версию).

Добавлено (10.11.2014, 09:50)
---------------------------------------------
Вроде даже когда-то пробовал перекомпилировать движок.
Но всё равно такая фигня происходила.

AlkoshaДата: Понедельник, 03 Ноября 2014, 15:13 | Сообщение # 123 | Тема: Партиклы
участник
Сейчас нет на сайте
спасибо за подсказку. В принципе, я так с самого начала и предполагал, но думал, что есть более оптимальный подход. Так как придётся каждый раз в холостую проходиться по циклу, даже если все партиклы давно потухли (так как присутствуют i-тые элементы в условии).
А может можно сделать какой-то флаг, определяющий что абсолютно все частицы вымерли ?
AlkoshaДата: Воскресенье, 02 Ноября 2014, 23:42 | Сообщение # 124 | Тема: Партиклы
участник
Сейчас нет на сайте
Цитата MR_Borg ()
создаем еще цастиц();


дело в том, что создаются они единожды - при инициализации.
В дальнейшем в цикле они циркулируют. То бишь, когда время жизни заканчивается, всё та же частица принимает начальное положение.
AlkoshaДата: Воскресенье, 02 Ноября 2014, 09:30 | Сообщение # 125 | Тема: Партиклы
участник
Сейчас нет на сайте
Вот коТ.

Код
class myParticles
{

struct partic
{
float psize;
int life;
float x;
float y;
float dx,dy;
int fade;
};

SDL_Rect texRect;
vector <partic> partics;

public:
float minsize, maxsize;
SDL_Rect rectangle;
int maxspeedY, minspeedY, maxspeedX, minspeedX;
int lifemin;
int lifemax;
int blend;
int maxcount;
bool gravity;
bool enable;
float fadespeed;
myParticles()
{
enable=true;
endpartic=false;
}
private:
     void inipartic(int idx)
{

   partics[idx].psize= minsize+(float)(rand()%(int)(maxsize*100 - minsize*100 + 1))/100;
   partics[idx].x=rand()%(rectangle.w)+rectangle.x;

   partics[idx].y=rand()%(rectangle.h)+rectangle.y;

   partics[idx].dx=(float)(rand()%(maxspeedX-minspeedX+1))/10+(float)minspeedX/10;
   partics[idx].dy=(float)(rand()%(maxspeedY-minspeedY+1))/10+(float)minspeedY/10;
partics[idx].life=lifemin+(rand()%(int)(lifemax - lifemin + 1));

}

SDL_Texture * particTex;

public:

void init(char* tex, float _minsize,float _maxsize,int _maxcount, SDL_Rect _rectangle ,int _lifemin,  int _lifemax , int _minspeedX, int _maxspeedX, int _minspeedY, int _maxspeedY, float _fadespeed, bool _gravity, int _blend)
{
minsize=_minsize;
maxsize=_maxsize;
blend=_blend;
fadespeed=_fadespeed;
maxcount=_maxcount;
rectangle=_rectangle;
lifemin=_lifemin;
lifemax=_lifemax;
minspeedX=_minspeedX;
maxspeedX=_maxspeedX;
minspeedY=_minspeedY;
maxspeedY=_maxspeedY;
gravity=_gravity;
     loadTex(tex);
      for(int i=0;i<maxcount;i++)
     {
     partics.push_back(partic());
     inipartic(i);
     }
}

     void loadTex( char* filename )
     {
     particTex = IMG_LoadTexture(renderer, filename);
     SDL_QueryTexture(particTex, NULL, NULL, &texRect.w, &texRect.h);
     }

     void update()
     {
         if(enable){
         for(int i=0;i<maxcount;i++)
             {

                if(gravity)partics[i].dy+=GRAVITATION;
                 partics[i].y+=partics[i].dy;
                 partics[i].x+=partics[i].dx;
                 partics[i].life--;

                 partics[i].fade+=fadespeed;
                 if(partics[i].fade>=255)
                     {
                     partics[i].life=0;
                     partics[i].fade=0;
                     }

                 if(partics[i].life<=0)inipartic(i);
             }
         }
     }
     void display()
     {
         if(enable){
           for(int i=0;i<maxcount;i++)
             {
                 SDL_Rect DestRs;
                 DestRs.x=partics[i].x-cum.x;
                 DestRs.y=partics[i].y-cum.y;
                 if(DestRs.x<800&&DestRs.x>0-texRect.w){

   if(blend==0) SDL_SetTextureBlendMode(particTex, SDL_BLENDMODE_BLEND);
   if(blend==1) SDL_SetTextureBlendMode(particTex, SDL_BLENDMODE_ADD);
   if(blend==2) SDL_SetTextureBlendMode(particTex, SDL_BLENDMODE_MOD);
   if(blend==3) SDL_SetTextureBlendMode(particTex, SDL_BLENDMODE_NONE);

                 DestRs.w=texRect.w*partics[i].psize;
                 DestRs.h=texRect.h*partics[i].psize;

                 SDL_SetTextureAlphaMod(particTex,255-partics[i].fade);
                 SDL_RenderCopy(renderer, particTex ,  &texRect, &DestRs);
                 }
             }
     }
     }
};


Первым делом инициализируются партиклы (кол-во частиц, диапазон размера спрайтов, мин\макс время жизни, начальное ускорение, режим смешивания и тд.).
Затем функцией update() обновляется всё в главном цикле.
И в цикле рендеринга отрисовывается функцией display()

Добавлено (02.11.2014, 09:30)
---------------------------------------------
И ещё не решён вопрос с динамическим изменением количества партиклов.
Хотя можно изменять maxcount в убывающую сторону. Но если задать maxcount больше, чем было при инициализации - то будет фатал эррор.
Нужно динамически расширить вектор.

AlkoshaДата: Пятница, 31 Октября 2014, 23:51 | Сообщение # 126 | Тема: Партиклы
участник
Сейчас нет на сайте
Делаю самодельную систему партикл https://www.youtube.com/watch?feature=player_detailpage&v=H7410ubOs1Q

И по ходу дела возник вопрос.

есть флаг enable который выключает\включает партиклы.
В данный момент в цикле апдейта

Код
        if(enable){
         for(int i=0;i<maxcount;i++)
             {
               Апдейт партикл
             }


То есть, при изменении значения enable будет происходить резкое исчезновение\появление всех частиц. Не красиво.
AlkoshaДата: Среда, 29 Октября 2014, 21:57 | Сообщение # 127 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
Цитата OpenGOO ()
у него ошибка времени выполнения, например (lifemax-lifemin) может быть равен 0


Хммм... а ведь действительно.
Ибо с присвоениями
Код
partics[idx].x=rand()%(rectangle.w)+rectangle.x;
   partics[idx].y=rand()%(rectangle.h)+rectangle.y;
   partics[idx].dx=rand()%(int)(maxspeedX-minspeedX)+minspeedX;
   partics[idx].dy=rand()%(int)(maxspeedY-minspeedY)+minspeedY;

всё ок.

Вы правы.

В таком случае , каким образом задать диапазон рандомных чисел, лежащих в пределе от lifemin до lifemax ?

rand()%(lifemax)+lifemin; тут порой будет перебор. Число будет выходить за lifemax. Надо lifemax тогда ограничить.

Может так?
int RND= lifemax-lifemin;
rand()%(RND)+lifemin;
AlkoshaДата: Вторник, 28 Октября 2014, 23:15 | Сообщение # 128 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
Можно ли в векторе хранить структуру ?
Код
struct partic
{
int life;
float x;
float y;
float dx,dy;
int fade;
};

vector <partic> partics;


компилится без эрроров.
Код
for(int i=0;i<maxcount;i++)
     {
     partics.push_back(partic());
     inipartic(i);
     }


Но в месте присвоения значений программа крашит.
Код

void inipartic(int idx)
{
   partics[idx].life=rand()%(lifemax-lifemin)+lifemin; // тут, например.
....
}
AlkoshaДата: Вторник, 28 Октября 2014, 08:17 | Сообщение # 129 | Тема: Движок Irrlicht
участник
Сейчас нет на сайте
У меня такой вопрос, отсекает ли иррлихт невидимые трианглы?
Или же для этого нужно написать определённый коТ (в этом случае хотелось бы взглянуть на этот самый коТ) ?
AlkoshaДата: Понедельник, 27 Октября 2014, 13:41 | Сообщение # 130 | Тема: Как на с++ делать графические приложения
участник
Сейчас нет на сайте
Цитата elianyyf ()
отрисовать что то и т.д


Я конечно не экспэрт в таких делах, но полагаю, что тут только есть вариант залезть в ДОС, предварительно распаковав турбо си-пи-пи от Борланда. Делаешь асмовскую вставку
Код
asm
     mov ax,13h
     int 10h
     end;  

И в режиме 320*240*8bit рисуешь попиксельно всё шо хошь напрямую,
по адресам сегмента 0XA000
Код

pokeb(0XA000, x*320+y,[0-255])


Никакого тебе высокоуровневого программирования, сам себе хозяин.

Но лучше для ДОСа юзать Watcom.

Добавлено (27.10.2014, 13:41)
---------------------------------------------
Цитата elianyyf ()
Вопрос - как с помощью с++ без различных библиотек, с нуля,

Относительно аппаратной графики, как уже было сказано выше - напиши свою ОСь.... С НУЛЯ.


Сообщение отредактировал Alkosha - Понедельник, 27 Октября 2014, 13:42
AlkoshaДата: Пятница, 24 Октября 2014, 16:18 | Сообщение # 131 | Тема: 3д моделирование под Irrlicht engine
участник
Сейчас нет на сайте
Цитата SEvg ()
Используй х-формат


Точно не помню, но вроде бы даже с пандовской *.X , экспортированной из макса , иррка не в ладах. В смысле со скелеткой.
Со статическим мэшем всё гут.

Добавлено (24.10.2014, 16:11)
---------------------------------------------
И в b3d когда экспортил из макса - искарёжено в иррлихте и в блэндере, причём одинаково.

Добавлено (24.10.2014, 16:12)
---------------------------------------------
может нужно какую-то промежуточную совфтину использовать для экспорта из максовсково формата, в блэндеровский ?

Добавлено (24.10.2014, 16:18)
---------------------------------------------
Так же интересует, какой софт используете для текстурирования.
И ещё, есть симметричные модели, каким образом сделать развёртку, чтоб рисовать текстуру нужно было только на одну половину ?


Сообщение отредактировал Alkosha - Пятница, 24 Октября 2014, 16:18
AlkoshaДата: Пятница, 24 Октября 2014, 00:11 | Сообщение # 132 | Тема: Как вычислить приращения по осям координат?
участник
Сейчас нет на сайте
Цитата OpenGOO ()
Вот здесь ошибка. У тебя начальная точка там где находится pers, а вычитаешь какие то x и y.


Это X и Y того объекта, который должен добраться до оффсета относительно персонажа.

Добавлено (24.10.2014, 00:11)
---------------------------------------------

Цитата OpenGOO ()
У тебя начальная точка там где находится pers,

Начальная точка там, где находится X Y, а не pers->X pers->Y
AlkoshaДата: Четверг, 23 Октября 2014, 21:35 | Сообщение # 133 | Тема: 3д моделирование под Irrlicht engine
участник
Сейчас нет на сайте
Цитата SEvg ()
Редакторы все используют любые, от Блендера до Макса....


Помню делал одну модельку в 3д максе. Анимировал в 3ds - в ирке её искарёжило в кизяк. ровно, как и в блэндере.
Причём статическая модель без анимашки нормально отображается.
И там меш был разбит на сегменты. Может из-за этого ? Там каждый сегмент рандомно был повёрнут и отмасштабирован в самом движке.

Добавлено (23.10.2014, 21:35)
---------------------------------------------
В максе удобнее моделить меш, нежели в блэндре.
Сколько бы я не пытался, всё к блэндеровскому интерфейсу не привыкну.

AlkoshaДата: Четверг, 23 Октября 2014, 09:04 | Сообщение # 134 | Тема: 3д моделирование под Irrlicht engine
участник
Сейчас нет на сайте
Интересуют все тонкости создания 3д моделек для иррлихта.
Если кто занимался подготовкой статических и анимированных моделек, а так же созданием локаций на иррлихт, расскажите вкратце making of, пожалуйста.

Планирую сделать сайдскроллер (леталку-стрелялку ).
Наверное , можно обойтись и без bsp-уровней , достаточно только пару тройку нод перемещать относительно игрока в качестве бэкграунда (но и инфа по созданию bsp-локаций тоже будет интересной).


Сообщение отредактировал Alkosha - Четверг, 23 Октября 2014, 16:48
AlkoshaДата: Вторник, 21 Октября 2014, 18:08 | Сообщение # 135 | Тема: Как вычислить приращения по осям координат?
участник
Сейчас нет на сайте
Цитата MrNesh ()
Один раз находим как надо менять x и y, а потом этот результат прибавлять


Это в случае если пункт назначения статический. В динамике нужно каждый раз обновлять.
AlkoshaДата: Вторник, 21 Октября 2014, 15:29 | Сообщение # 136 | Тема: Как вычислить приращения по осям координат?
участник
Сейчас нет на сайте
Чёто непонятная шляпа какая-то получается (впрочем, как и всегда).

По первому предложенному варианту
Код

{
auto endpointx=pers->x+250, endpointy=pers->y-100;
auto vx = endpointx - x;
auto vy = endpointy - y;
auto len = sqrt(vx*vx + vy*vy);
     if(len!=0){
     vx = vx/len;
     vy = vy/len;

     auto dx = vx * 20;
     auto dy = vy * 20;
}
else {dx=0; dy=0;}


если переменная speed = 10 - то объект движется строго прямо куда-то в бесконечность ( значительно дальше endpoint'ов), при speed = 15 - уже под скос вперёд\вниз.
при 20 - вообще в диаметрально противоположном направлении.

Во втором варианте корректно движется только вперёд.
Код

int endpointx=pers->x+250, endpointy=pers->y-100;
dx=(endpointx-x)/5;
dy=(endpointy-y)/5;
if(x>=endpointx-2&&x<=endpointx+2)trigger=RETURN;


Вот это срабатывает по триггеру в состоянии RETURN
Код
if(trigger==RETURN)
        {
int endpointx=pers->x, endpointy=pers->y;
dx=(endpointx-x)/5;
dy=(endpointy-y)/5;

if(x>=endpointx-10&&x<=endpointx+10)trigger=IDLE;
        }


И именно когда срабатывает RETURN, то тоже непонятно куда назад улетает, хотя курс правильный. Вот только в состояние IDLE он переходит аж далеко-о-о за тем значением endpoint'a, при котором он должен вернутся.

А если в теле триггера RETURN указать endpoint, например, int endpointx=pers->x+350, endpointy=pers->y-150;
То именно в ту точку он правильно переместится.

Это пока ещё не пробовал.
Цитата
Если просто перемещение объекта в заданную точку, самое простое и классическое.


Добавлено (21.10.2014, 15:23)
---------------------------------------------
Код
  {в рабочем цикле}   
          угол=-math.ArcTan2(x-цельX,y-цельY)/pi*180;  // по углу легко поворачивать спрайт   
          x=x+sin(угол*pi/180)*скорость;   
          y=y-cos(угол*pi/180)*скорость;


Смущает тригонометрия в цикле. Может её как-то можно обойти для оптимизации ?

Добавлено (21.10.2014, 15:29)
---------------------------------------------
Хотя тут достаточно единожды высчитать dx dy до следующего изменения конечной позиции. Но если конечная точка динамически будет менятся, и траэкторию нужно расчитать для целого массива объектов (предположим, будут куча самонаводящихся ракет на игрока), то лишняя тригонометрия будет давать о себе знать, наверное.

Хотя на нынешних гигагерцах может и не будет. Не знаю.


Сообщение отредактировал Alkosha - Вторник, 21 Октября 2014, 15:31
AlkoshaДата: Понедельник, 20 Октября 2014, 20:34 | Сообщение # 137 | Тема: Как вычислить приращения по осям координат?
участник
Сейчас нет на сайте
Пасиба.
Версия daun'a, на мой взгляд, менее замудрённая и безо всякой тригонометрии и проверок. Вроде бы пашет корректно.

Добавлено (20.10.2014, 20:34)
---------------------------------------------
правда там равнозамедленное движение... ну в принципе и так сойдёт.

AlkoshaДата: Понедельник, 20 Октября 2014, 18:17 | Сообщение # 138 | Тема: Как вычислить приращения по осям координат?
участник
Сейчас нет на сайте
Цитата OpenGOO ()
ты что вектор скорости хочешь найти?


Хотел найти переменные, которые нужны для инкремента\декремента текущего значения X и Y объекта таким образом, чтоб при каждом проходе в цикле он из пункта А в пункт B переместился по кратчайшему пути, то бишь по отрезку, изображённому выше.

float X,Y; // координаты объекта
float X1,Y1; // координаты конечной позиции
calculate()
{
... // тут считаем dx, dy
}

for (;;)
{
X+=dx;
Y+=dy;
...
}
AlkoshaДата: Понедельник, 20 Октября 2014, 09:29 | Сообщение # 139 | Тема: Как вычислить приращения по осям координат?
участник
Сейчас нет на сайте
Как расчитать dx и dy, зная начальные координаты объекта X1Y1 и конечные X2Y2 (куда этот объект должен переместиться) ?
AlkoshaДата: Понедельник, 13 Октября 2014, 09:02 | Сообщение # 140 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
А вот ещё один нубский вопрос.
Есть два разных класса, и каждому из них необходимо получать результаты переменных друг друга.

То есть
class MyClass1
{
int a=228;
int b;

b=B.b;
}
MyClass1 A;

class MyClass2
{
int a;
int b=1488;

a= A.a;
}
MyClass2 B;

В данном случае если класс А будет объявлен раньше, компилятор выдаст сообщение об ошибке, что не объявлен клас B в строчке присвоения переменной.
И наоборот.


Сообщение отредактировал Alkosha - Понедельник, 13 Октября 2014, 09:02
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг