Результаты поиска
| |
Alkosha | Дата: Понедельник, 27 Октября 2014, 13:41 | Сообщение # 101 | Тема: Как на с++ делать графические приложения |
участник
Сейчас нет на сайте
| Цитата 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 | Дата: Вторник, 28 Октября 2014, 08:17 | Сообщение # 102 | Тема: Движок Irrlicht |
участник
Сейчас нет на сайте
| У меня такой вопрос, отсекает ли иррлихт невидимые трианглы? Или же для этого нужно написать определённый коТ (в этом случае хотелось бы взглянуть на этот самый коТ) ?
|
|
| |
Alkosha | Дата: Вторник, 28 Октября 2014, 23:15 | Сообщение # 103 | Тема: Вопрос-Ответ (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 | Дата: Среда, 29 Октября 2014, 21:57 | Сообщение # 104 | Тема: Вопрос-Ответ (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 | Дата: Пятница, 31 Октября 2014, 23:51 | Сообщение # 105 | Тема: Партиклы |
участник
Сейчас нет на сайте
| Делаю самодельную систему партикл https://www.youtube.com/watch?feature=player_detailpage&v=H7410ubOs1Q
И по ходу дела возник вопрос.
есть флаг enable который выключает\включает партиклы. В данный момент в цикле апдейта
Код if(enable){ for(int i=0;i<maxcount;i++) { Апдейт партикл }
То есть, при изменении значения enable будет происходить резкое исчезновение\появление всех частиц. Не красиво.
|
|
| |
Alkosha | Дата: Воскресенье, 02 Ноября 2014, 09:30 | Сообщение # 106 | Тема: Партиклы |
участник
Сейчас нет на сайте
| Вот коТ.
Код 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 | Дата: Воскресенье, 02 Ноября 2014, 23:42 | Сообщение # 107 | Тема: Партиклы |
участник
Сейчас нет на сайте
| Цитата MR_Borg (  ) создаем еще цастиц();
дело в том, что создаются они единожды - при инициализации. В дальнейшем в цикле они циркулируют. То бишь, когда время жизни заканчивается, всё та же частица принимает начальное положение.
|
|
| |
Alkosha | Дата: Понедельник, 03 Ноября 2014, 15:13 | Сообщение # 108 | Тема: Партиклы |
участник
Сейчас нет на сайте
| спасибо за подсказку. В принципе, я так с самого начала и предполагал, но думал, что есть более оптимальный подход. Так как придётся каждый раз в холостую проходиться по циклу, даже если все партиклы давно потухли (так как присутствуют i-тые элементы в условии). А может можно сделать какой-то флаг, определяющий что абсолютно все частицы вымерли ?
|
|
| |
Alkosha | Дата: Понедельник, 10 Ноября 2014, 09:50 | Сообщение # 109 | Тема: Движок 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 | Дата: Понедельник, 10 Ноября 2014, 18:40 | Сообщение # 110 | Тема: Движок Irrlicht |
участник
Сейчас нет на сайте
| Цитата stalker5889 (  ) долго парился подгоняя разные irrlicht.dll
Ах да... точноо.. Длл...
Её-то я забыл подменить. Лежала со старой версии.
Но теперь когда положил соответствующую длл, выдаёт такое.

Теперь тут что-то с компоновщиком не то, видать.
|
|
| |
Alkosha | Дата: Вторник, 11 Ноября 2014, 11:56 | Сообщение # 111 | Тема: Движок Irrlicht |
участник
Сейчас нет на сайте
| Цитата Kwant (  ) какой именно нужен то?
Оптимальный по производительности.
А вообще, это я потом посмотрю. Для начала хотелось бы понять, чего происходит с этим 1.8
Ключ "-static" (статическая линковка) не помогает.
|
|
| |
Alkosha | Дата: Пятница, 14 Ноября 2014, 19:08 | Сообщение # 112 | Тема: Unity-shader to GLSL |
участник
Сейчас нет на сайте
| Хочу этот шейдер в GLSL виде.
SuperFX диззеринг пикселей
С синтаксисом шейдеров юнити (и не только) не знаком.
|
|
| |
Alkosha | Дата: Суббота, 15 Ноября 2014, 18:38 | Сообщение # 113 | Тема: Unity-shader to GLSL |
участник
Сейчас нет на сайте
| Цитата Archido (  ) Почему кто-то за тебя это должен сделать?
Не знаю
Сообщение отредактировал Alkosha - Суббота, 15 Ноября 2014, 18:39 |
|
| |
Alkosha | Дата: Вторник, 18 Ноября 2014, 23:06 | Сообщение # 114 | Тема: Вопрос-Ответ (C++) |
участник
Сейчас нет на сайте
| как извлечь символ из строки string ? Так не получается print1.display(input[0][i]);
error: invalid conversion from 'char' to 'char*' [-fpermissive]|
В функцию print1.display() должен передаваться char*.
Можно весь стринг передать, а не посимвольно. Но нужно его сконвертить в char*Добавлено (18.11.2014, 23:06) --------------------------------------------- Ой... даже не так... Считываю из файла таким образом. Код void readfile() { ifstream file;
int i=0;
file.open("maps", ios::in); if (file) { while (!file.eof()) { file>>input[i]; i++; } file.close(); } }
Сперва думал, что разобьёт по отдельным стрингам строки файла (после каждого /n)... но теперь мне кажется, что разобъётся всё по словам, после каждого пробела.
Сообщение отредактировал Alkosha - Вторник, 18 Ноября 2014, 23:00 |
|
| |
Alkosha | Дата: Среда, 19 Ноября 2014, 22:03 | Сообщение # 115 | Тема: Вопрос-Ответ (C++) |
участник
Сейчас нет на сайте
| Цитата goldsphere (  ) так и есть. Если нужно вывести всю строку, считанную из файла, можно сделать так
ну вообще хочу сделать систему диалогов. Диалоги хранятся в файле. Каждая реплика отделяется ключевым словом (допустим "next"). И при считывании из файла, нужно каждую реплику расфасовать по отдельным строковым массивам , типа char* (или string, если заюзать c_str()), для последующего вывода.
Добавлено (19 ноября 2014, 18:12) --------------------------------------------- В диалогах будет присутствовать символ \n, разумеется.Добавлено (19 ноября 2014, 22:03) ---------------------------------------------
Цитата goldsphere (  ) а потом print1.display(input.c_str());
Што за?
Цитата E:\TURBO\platform3\main.cpp|974|error: invalid conversion from 'const char*' to 'char*' [-fpermissive]|
Не нравится ему, что константное значение.
Сообщение отредактировал Alkosha - Среда, 19 Ноября 2014, 21:48 |
|
| |
Alkosha | Дата: Четверг, 20 Ноября 2014, 19:36 | Сообщение # 116 | Тема: Вопрос-Ответ (C++) |
участник
Сейчас нет на сайте
| Цитата froex (  ) void display(const char* src);
Спасибо, сразу полегчало...
но теперь какая-то фигня с кодировками. Латиница правильно отображается, а кириллица - нет. Фонты TTF содержат в себе русскоязычный алфавит. Пробовал файл сохранить в UTF8 и в ANSI - всё равно кракозябры, только в разной кодировке по-своему. Файл редактирую через notepad++ Если выводить буквы непосредственно из программы [print1.display("Аллаху акбар")] , то с кодировкой проблем нет.
|
|
| |
Alkosha | Дата: Четверг, 20 Ноября 2014, 21:58 | Сообщение # 117 | Тема: Вопрос-Ответ (C++) |
участник
Сейчас нет на сайте
| Цитата froex (  ) Отображается где? На какой платформе? Если вывод в консоль, то можно использовать несколько вариантов:
Не дос, не консоль, а SDL2 под windows Код textSurface=TTF_RenderText_Solid(fnt,text,color); texxture=SDL_CreateTextureFromSurface(renderer,textSurface); SDL_RenderCopy(renderer, texxture, NULL, &Dest); Где переменная text - та самая const char*.
|
|
| |
Alkosha | Дата: Пятница, 21 Ноября 2014, 18:38 | Сообщение # 118 | Тема: Вопрос-Ответ (C++) |
участник
Сейчас нет на сайте
| Цитата froex (  ) после чего используешь функцию, которая переведёт в char*
Похоже, что такая функция есть в вижуал студии и борландовском билдере. Я же использую кодблокс mingw gcc
|
|
| |
Alkosha | Дата: Воскресенье, 23 Ноября 2014, 22:46 | Сообщение # 119 | Тема: Вопрос-Ответ (C++) |
участник
Сейчас нет на сайте
| .....всё равно не понятно.....
считываю не посимольно, а построково. Код while (!file.eof()) { getline(file, input[i]); i++; } file.close(); Но функция getline не работает с wstring, только string.
|
|
| |
Alkosha | Дата: Понедельник, 24 Ноября 2014, 21:12 | Сообщение # 120 | Тема: Вопрос-Ответ (C++) |
участник
Сейчас нет на сайте
| Вроде бы сделал как тута: http://littletechnibbles.com/2009....ng-in-c
Результат всё тот же -> каракули вместо символов.
Код string conv (const wstring& wstr) { return (string(wstr.begin(), wstr.end())); } ... wfstream file; int i=0;
file.open("maps//dialog.dlg", ios::in); if (file) { while (!file.eof()) { getline(file, input[i]); i++; } file.close(); } ... string lin=conv(input[0]); print1.display(lin.c_str(),80,50,w*25,18,200,200,200); ...
|
|
| |
|