Результаты поиска
| |
AlexeyBond | Дата: Воскресенье, 06 Января 2013, 20:53 | Сообщение # 1 | Тема: Пожалуйста, проверьте код на грубые ошибки |
был не раз
Сейчас нет на сайте
| Saitei, исключительно средствами glut - никак. Для вывода текста существуют различные способы - можно использовать функции WinAPI и wgl, а можно, например, грузить текстуру с нарисованными символами и выводить соответствующие её фрагменты. У NeHe есть несколько уроков на эту тему ( 13, 14, 15, 17 ).
|
|
| |
AlexeyBond | Дата: Воскресенье, 06 Января 2013, 14:28 | Сообщение # 2 | Тема: Пожалуйста, проверьте код на грубые ошибки |
был не раз
Сейчас нет на сайте
| Цитата (Saitei) Код void timer(int = 0) { display(); glutTimerFunc(33,timer,0); }
этого делать не обязательно т.к. ты уже передал glut указатель на функцию отрисовки, и он сам вызовет её когда надо.
Все коды клавиш определены где-то в заголовках винды, и выглядят примерно так: VK_* ( VK_LEFT, VK_ESCAPE etc. ).
По поводу этикета: я склонен считать, что каждый программист имеет право на собственный стиль. Я, например, никогда не пишу названия функций с маленькой буквы, и всегда перехожу на новую строку перед { в начале функции. Но, думаю, каждый может писать так как ему удобнее, главное соблюдать единство стиля.
|
|
| |
AlexeyBond | Дата: Пятница, 04 Января 2013, 09:59 | Сообщение # 3 | Тема: Вопрос-Ответ (C++) |
был не раз
Сейчас нет на сайте
| goldsphere, правильно. Старая функция просто меняла спрайт и выводила его, а новая меняет его, выводит, ждёт, потом снова меняет и выводит, а между сменами спрайтов вывода графики не происходит. И ещё: пожалуй, задам наводящий вопрос: где вызывается Gfx_EndScene( ) и что она делает?
|
|
| |
AlexeyBond | Дата: Четверг, 03 Января 2013, 22:21 | Сообщение # 4 | Тема: [C++] Считывание матрицы из файла |
был не раз
Сейчас нет на сайте
| Цитата (netcha) Теперь просто пустое поле А что, собственно, было до того?
|
|
| |
AlexeyBond | Дата: Четверг, 03 Января 2013, 22:01 | Сообщение # 5 | Тема: [C++] Считывание матрицы из файла |
был не раз
Сейчас нет на сайте
| Ну, вроде бы, всё правильно, за исключением Код ifstream file("data\\conf\\l_0.t", "r"); правильнее будет так: Код ifstream file("data\\conf\\l_0.t", ifstream::in);
|
|
| |
AlexeyBond | Дата: Четверг, 03 Января 2013, 19:15 | Сообщение # 6 | Тема: Вопрос-Ответ (C++) |
был не раз
Сейчас нет на сайте
| Цитата (goldsphere) Смысл данного кода, при нажатие на клавишу отобразить на пол секунды другую текстуру и вернуть потом прежнюю.
Похоже, проблема в том, что всё это происходит в течение одного кадра, т.е. один спрайт просто накладывается на другой, и только потом это всё выводится.
|
|
| |
AlexeyBond | Дата: Четверг, 03 Января 2013, 18:03 | Сообщение # 7 | Тема: Вопрос-Ответ (C++) |
был не раз
Сейчас нет на сайте
| Цитата (goldsphere) массив должен быть глобальным.
А в чём, собственно, проблема? Можно же создать глобальный объект для массива, а память выделять только тогда, когда становится известно, сколько её нужно ( при загрузке данных из файла в данном случае ). Например это можно сделать так: Код class Map { private: int* Data; int sizeX, sizeY; public: Map( ) :Data(NULL),sizeX(0),sizeY(0) {}; ~Map( ) { if( Data ) delete [] Data;//Если память была выделена, освобождаем её. } void Alloc( int x, int y ) {//Выделить память под массив размером x на y Data = new int[(sizeX = x)*(sizeY = y)]; } int& operator () ( int y, int x ) {//Получение ссылки на элемент a[y][x] if( (x >= sizeX)||(y>=sizeY) ) throw;//выход за пределы массива return Data[x+sizeX*y]; } };
//Объявляем глобальный объект Map map; . . . //Перед записью в массив: map.Alloc( newSzX, newSzY );
//И доступ к элементу: map( i, j ) = n;
|
|
| |
AlexeyBond | Дата: Среда, 02 Января 2013, 14:39 | Сообщение # 8 | Тема: Вопрос-Ответ (C++) |
был не раз
Сейчас нет на сайте
| Цитата (goldsphere) Принцип в том, что после размер будет браться из файла
В таком случае, использовать шаблон - неправильное решение т.к. аргументы передаваемые в шаблон можно определить только на этапе компиляции ( из исходного кода ), а изменить их во время исполнения невозможно. В данном случае рекомендую использовать динамическое выделение памяти с помощью оператора new или функций malloc/calloc и имитацию двухмерного массива с использованием одномерного.
|
|
| |
AlexeyBond | Дата: Четверг, 27 Декабря 2012, 11:44 | Сообщение # 9 | Тема: Работа с файлами |
был не раз
Сейчас нет на сайте
| Похоже, дело в том, что в конце выводимой строки отсутствует завершающий символ ('\0'). В чём точно причина, сказать не могу, но вот ошибки, которые сразу бросаются в глаза:
Код char* nc = new char[std::strlen(ch1) + std::strlen(ch2)](); Здесь не выделяется память под тот самый '\0'.
Код char* tmp = new char(); fgets(tmp,100,f); Здесь в массив из одного символа записывается сразу 100 (удивительно, что программа вообще работает).
Этот вызов вообще ничего не делает.
И вообще: память используется очень нерационально, как и время( нужно заново разбирать файл чтобы найти каждое следующее значение ).
|
|
| |
AlexeyBond | Дата: Вторник, 25 Декабря 2012, 16:21 | Сообщение # 10 | Тема: Подскажите компилятор |
был не раз
Сейчас нет на сайте
| Для изучения C++ под Windows больше подходит Microsoft Visual Studio ( версии 2005 Express Edition вполне достаточно ). При использовании других IDE, в особенности Code::Blocks может возникнуть много проблем с настройкой.
|
|
| |
AlexeyBond | Дата: Суббота, 22 Декабря 2012, 16:58 | Сообщение # 11 | Тема: Загрузка файла в память? |
был не раз
Сейчас нет на сайте
| Можно, например, так:
Код int LoadFileToMemory( const char* fileName, char** data ) { FILE* f = fopen( fileName, "rb" ); fseek( f, 0, SEEK_END ); int sz = ftell( f ); fseek( f, 0, SEEK_SET ); *data = (char*)malloc( sz ); fread( *data, 1, sz, f ); fclose( f ); return sz; }; //Использовать так: char* modelData; int size = LoadFileToMemory( "myfile.ply", &modelData );
|
|
| |
|