Результаты поиска
| |
Alkosha | Дата: Понедельник, 10 Ноября 2014, 18:40 | Сообщение # 121 | Тема: Движок Irrlicht |
участник
Сейчас нет на сайте
| Цитата stalker5889 ( ) долго парился подгоняя разные irrlicht.dll
Ах да... точноо.. Длл...
Её-то я забыл подменить. Лежала со старой версии.
Но теперь когда положил соответствующую длл, выдаёт такое.
Теперь тут что-то с компоновщиком не то, видать.
|
|
| |
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 |
|
| |
|