Сообщения на форуме пользователя Andrey (238 стр.)
Зацени | 29 ноя. 2004 | 8:55 | #23 |
---|
Intel(R) Celeron(R) CPU 2.40GHz
GeForce FX 5200/AGP/SSE2
256 RAM
FPS 60
где надо располагать gluLookAt? | 22 ноя. 2004 | 15:54 | #1 |
---|
>но насколько я понимаю, gluLookAt должна отвечать за матрицу вида и стоять после glMatrixMode(GL_MODELVIEW).
Ты сам ответил на свой вопрос.Эта функция изменяет видовую матрицу.
Проблема с загрузкой Gif файла (для текстуры) | 18 ноя. 2004 | 12:08 | #5 |
---|
Я просто для универсальной поддержки форматов.И текстуры gif для каких нибудь иконок подойдут.там качество не нужно особое.
>Есть PNG, грузи его.
А есть исходники на занрузку или описание формата?
скинь ссылку
gluLookAt | 18 ноя. 2004 | 11:49 | #3 |
---|
Для камеры задаешь 4 вектора
Up - Верх
Dir - направление
Right - правое направыление
Pos - позиция камеры
меняешь эти вектора и вызываешь
void Camera::Update() { ... gluLookAt(Pos.x,Pos.y,Pos.z, Dir.x,Dir.y,Dir.z,Up.x,Up.y,Up.z); ... }
Правка: 18 ноя. 2004 11:50
Проблема с загрузкой Gif файла (для текстуры) | 18 ноя. 2004 | 8:37 | #3 |
---|
Проблема с загрузкой Gif файла (для текстуры) | 17 ноя. 2004 | 11:39 | #2 |
---|
//Формирование текстуры из данных void Texture::Upload(unsigned char *data) { //Проверка данных для текстуры if (!isOk() || !data) return; glGenTextures(1, &IndexTexture); glBindTexture(GL_TEXTURE_2D, IndexTexture); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); gluBuild2DMipmaps(GL_TEXTURE_2D, type, width, height, type, GL_UNSIGNED_BYTE, data); delete data; }
Спасибо всем заранее.
с Уважением Андрей
Правка: 17 ноя. 2004 11:42
Проблема с загрузкой Gif файла (для текстуры) | 17 ноя. 2004 | 11:38 | #1 |
---|
//Загрузка ресурса из файла по имени bool GifResource::Load(const char* FileName) { fstream In; //Открывем файл In.open(FileName, std::ios::in | std::ios::binary); if (!In.is_open()) //Не удалось открыть return false; //Читаем сигнатуру файла In.read((char*)Gif.Signature, sizeof(Gif.Signature)); //Если не GIF файл.В функции парметр sizeof(Gif.Version) - 1 //минус единица с утетом последнего символа конец строки if (memcmp("GIF", Gif.Signature, sizeof(Gif.Signature) - 1)) throw " Неправильный формат файла Gif\n"; //Чтение версии файла In.read((char*)Gif.Version, sizeof(Gif.Version)); //Проверка версий.В функции парметр sizeof(Gif.Version) - 1 //минус единица с утетом последнего символа конец строки if (memcmp("87a", Gif.Version, sizeof(Gif.Version) - 1)) if (memcmp("89a", Gif.Version, sizeof(Gif.Version) - 1)) throw " Неверная версия файла gif\n"; //Считывание ширины логическог дискриптора In.read((char *)&Gif.LogicalScreenWidth, sizeof(Gif.LogicalScreenWidth)); //Ширина изображения width = Gif.LogicalScreenWidth; //Игнорируем 1 байт In.ignore(1); //Считывание высоты логическог дискриптора In.read((char *)&Gif.LogicalScreenHeight, sizeof(Gif.LogicalScreenHeight)); //Высота изображения height = Gif.LogicalScreenHeight; //Игнорируем 1 байт In.ignore(1); //Считывание байта информации In.read((char *)&Gif.PackedFields, sizeof(Gif.PackedFields)); //3 первых бита + 1 - это число бит на pixel int n = (Gif.PackedFields & 0x07) + 1; //Число элементов глобальную таблицу цветов n = 1 << n; //3 байта на пиксель type = GL_RGB; //Последний бит unsigned char LastBit = Gif.PackedFields & 0x80; //Если он единичный то считывем глобальную таблицу цветов if (LastBit == 128) { //Выделение памяти под глобальной таблицу цветов Gif.Rgb = new GIF::RGB[n]; //Считывание глобальной таблицы цветов for (int i = 0; i < n; i++) { In.read((char *)&Gif.Rgb[i].Red, sizeof(Gif.Rgb[i].Red)); In.read((char *)&Gif.Rgb[i].Green, sizeof(Gif.Rgb[i].Green)); In.read((char *)&Gif.Rgb[i].Blue, sizeof(Gif.Rgb[i].Blue)); } } //Игнорируем 2 байта In.ignore(2); //Чтение заголовока дискриптора изображения In.read((char *)&Gif.imageDiscriptor.sign, sizeof(Gif.imageDiscriptor.sign)); //Если не заголовок if (Gif.imageDiscriptor.sign != ',') throw " Неправильный заголовок декриптора изображения\n"; //Чтение координаты x начала изображения In.read((char *)&Gif.imageDiscriptor.x, sizeof(Gif.imageDiscriptor.x)); //Игнорируем 1 байт In.ignore(1); //Чтение координаты x начала изображения In.read((char *)&Gif.imageDiscriptor.y, sizeof(Gif.imageDiscriptor.y)); //Игнорируем 1 байт In.ignore(1); //Чтение ширины изображения In.read((char *)&Gif.imageDiscriptor.ImageWidth, sizeof(Gif.imageDiscriptor.ImageWidth)); //Игнорируем 1 байт In.ignore(1); //Чтение высоты изображения In.read((char *)&Gif.imageDiscriptor.ImageHeight, sizeof(Gif.imageDiscriptor.ImageHeight)); //Игнорируем 1 байт In.ignore(1); //Считывание байта информации In.read((char *)&Gif.imageDiscriptor.PackedFields, sizeof(Gif.imageDiscriptor.PackedFields)); //Растровые данные data = new unsigned char[width * height * 3]; //Если установлен бит "I" if (Gif.imageDiscriptor.PackedFields & 0x40) { //Локальная таблица цветов } else { //Индекс массива data int j = 0; int i;//Индекс строки int k;//инкремент номера строки //Cчитывание растровых данных //Происходт в 4 прохода //1.Первый проход //При первом проходе записывается каждая 8-мая строка //начиная с верхней строки изображения k = 8;//инкремент номера строки for (j = 0; j < height; j +=k) for (i = 0; i < width; i ++) { In.read((char*)&data[j + i], 1); In.read((char*)&data[j + i + 1], 1); In.read((char*)&data[j + i + 2], 1); } //2.Второй проход //При втором проходе записывается //каждая 8-мая строка начиная с 5 строки сверху for (j = 4; j < height; j += k) for (i = 0; i < width; i ++) { In.read((char*)&data[j + i], 1); In.read((char*)&data[j + i + 1], 1); In.read((char*)&data[j + i + 2], 1); } //3.Проход //При третьем-проходе записывается //каждая 4 строка начиная с 3 строки //сверху k = 4;//инкремент номера строки for (j = 2; j < height; j += k) for (i = 0; i < width; i ++) { In.read((char*)&data[j + i], 1); In.read((char*)&data[j + i + 1], 1); In.read((char*)&data[j + i + 2], 1); } //4.Проход При 4 проходе записывается каждая вторая стока начиная //со второй строки сверху k = 2;//инкремент номера строки for (j = 1; j < height; j += k) for (i = 0; i < width; i ++) { In.read((char*)&data[j + i], 1); In.read((char*)&data[j + i + 1], 1); In.read((char*)&data[j + i + 2], 1); } } //... } |
Правка: 29 ноя. 2004 10:18
Проблема с загрузкой Gif файла (для текстуры) | 17 ноя. 2004 | 11:37 | #0 |
---|
Вот нашел документацию по графическим форматам:
http://www.gamedev.ru/download/?id=1458
в том числе по Gif. Решил написать загрузку файла для текстуры
вот код загрузки:
//Класс ресурса для файлов формата Gif class GifResource : public GraphicResource { private: //Структура GIF файла struct GIF { //Идентифицирует Поток Данных GIF. //Эта область содержит фиксированную величину 'GIF. unsigned char Signature[3]; //Номер Версии использовал, чтобы сформатировать поток данных. //Идентифицирует минимальный комплект возможностей необходимый //на дешифраторе чтобы полностью обработать содержимое Потока Данных. //"87a" - May 1987 //"89a" - July 1989 unsigned char Version[3]; //Логический Экранный Дескриптор содержит параметры //необходимые, чтобы определить область дисплейного устройства в //пределах которого образы будут представлены. Координаты в этом //блоке даются что касается верхнего-левого угла виртуального экрана; //они обязательно не ссылаются на абсолютные координаты на дисплейном //устройстве.Это подразумевает, который они могли бы ссылаться на //координаты окна в окно среде или координатах принтера, когда //принтер использован. //Этот блок ТРЕБУЕТСЯ; точно один Логический Экранный Дескриптор должен //представлять за Поток Данных. unsigned char LogicalScreenWidth;//Ширина unsigned char LogicalScreenHeight;//Высота //Байт информации осчет от начала //7 6 5 4 3 2 1 0 //M¦ cr ¦0¦pixel //3 первых бита число бит на пихел //3 Бит - Сортирующий Флаг //3 следующих бита - cr+1 = число битов цветового разрешения //7 бит если установлен,то за дискриптором //следует глобалная таблица цветов unsigned char PackedFields; struct RGB { //Красная компонента цвета unsigned char Red; //Зеленая компонента цвета unsigned char Green; //Синяя компонента цвета unsigned char Blue; }; //Глобальная таблица цветов RGB *Rgb; //Дисриптор изиображения struct ImageDiscriptor { //Знак "," - начало изображения unsigned char sign; //Ширина Изображения unsigned char ImageWidth; //Высота Изображения unsigned char ImageHeight; //Координата X начала изображения unsigned char x; //Координата Y начала изображения unsigned char y; //Байт информации осчет от начала //7 6 5 4 3 2 1 0 //M¦I¦0¦0¦0¦pixel //3 первых бита - число на пиксел в данном изображении //3,4,5 - не используется //6 бит: //если установлен - Изображение отформатировано в после- //довательном порядке //если не установлен //Изображение отформатировано в порядке переплетения //6 бит: //если установлен //Использовать глобальную таблицу цветов, игнорировать 'pixel' //если не установлен //Далее следует локальная таблица цветов, использовать 'pixel' unsigned char PackedFields; }; ImageDiscriptor imageDiscriptor; }; //Переменная для gif файла GIF Gif; //... }
Правка: 30 ноя. 2004 13:48
Крик души - Спасите мою душу | 17 ноя. 2004 | 11:12 | #12 |
---|
>Кстати какой предел старости (или молодости)? А то мне уже 24, и еще 2 года учится на заочном, а я еще ничего не сделал >толкового. Мож я уже слишкой старый?
Мне тоже 24 и я много времени потерял.И тоже так думаю.
Крик души - Спасите мою душу | 17 ноя. 2004 | 11:10 | #11 |
---|
На счет всего сказанного в первом посте.Главное не падать духом и стремиться что-то изучить как-бы не было это сложно.
Вдобавок трехмерная графика одна из сложных областей программирования.Тем более в таких задачах связанных еще с математикой алгоритмами и ООП и т.д.Это так сразу не дается.Я например отчасти тоже испытываю трудности в изучении.
Посмотрел код в DirectX особо не вникал т.к. использовал только DirectInput и программирую с использованием OpenGL
вот например что бросилось в глаза:
VOID Render() { //... // Проверяем Direct3dDevice на потерянность hr = g_pd3dDevice->TestCooperativeLevel(); //... if( NULL == g_pd3dDevice ) return; //... } }
просто программа может упасить если указкаель NULL.Проверять тогда надо в самом начале.
Раздел ОБУЧЕНИЕ проекта Almighty. | 16 ноя. 2004 | 13:20 | #785 |
---|
>DevC++ - оболочка нд MinGW
>Просто я физически не могу поставить ВС
А совместимость есть с Visual C++ ? просто как потом проект открывать?
Формат карт для 3D бродилки | 16 ноя. 2004 | 11:08 | #3 |
---|
>А что значит стандартный формат?
1.Сделать уровень например в формате 3DS
2.Прочитать с него данные.
3.Презаписать его в файл своего формата, заренее разработанного.
Точно также можно поступить с моделями например.
Раздел ОБУЧЕНИЕ проекта Almighty. | 16 ноя. 2004 | 9:40 | #780 |
---|
>bounding сфера, bounding box - а это что такое??
Вот коллега почитай
http://gdlinks.hut.ru/cdfaq/
Формат карт для 3D бродилки | 16 ноя. 2004 | 9:18 | #1 |
---|
Сначала читать из стандартного, а потом писать в свой собственный.
Урок 3 Геец Андрей | 15 ноя. 2004 | 13:45 | #11 |
---|
Спасибо за советы!! Сколько много написано.Я тут на выходных немного исправил.
Buka
Исправил по поводу пункта 5... Oleg Kuznecov
Oleg Kuznecov
Только не надо спорить, а просто послушай дядю, ок?
:) конечно вот послушал исправил, и задаю вопросы:
>clear после создания вектора не нужен
это я на всякий случай.Ну получается не нужен.
>У тебя for (it = listObj -> begin(); it < listObj -> end(); it++)
Небольшая описка но могла привести к падению движка.
>Заведи привычку
>delete listObj;
>listObj = NULL;
>А то ведь второй раз вызовут и будет бага
Ну всетаки это меры предосторожности, но зачем они при завершении программы?
>timer тоже рестартуй за циклом
сделал
>dt - должно быть общим для всех объектов. Выноси за цикл. Сейчас вообще бред.
> //Получение приращения времени
> dt = float(timer -> diffTime()) / 800; // !!! нафига деление на 800 - это надо убрать, если уж делить так на 1000 =)
>for (it = listObj -> begin(); it < listObj -> end(); it++) {
> //Обновление сцены
>(*it) -> update(dt);
>//Отображение сцены
>(*it) -> draw();
> }
А вот при таком коде кубик не крутьться вроде dt должно увеличиваться
>8.
>не правильно Engine* engine = NULL;
>правильно:
>namespace {
>Engine* engine = NULL;
>}
>либо:
>static Engine* engine = NULL;
Поясни поподробней пожалуйста
почему
Engine* engine = NULL;
так не правильно