GameDev.ru
/ GameDev.ru / Пользователи / Andrey / Сообщения на форуме пользователя Andrey (238 стр.)

Сообщения на форуме пользователя Andrey (238 стр.)

Зацени29 ноя. 20048:55#23
Andrewk
Intel(R) Celeron(R) CPU 2.40GHz
GeForce FX 5200/AGP/SSE2
256 RAM
FPS 60
где надо располагать gluLookAt?22 ноя. 200415:54#1
Katraites
>но насколько я понимаю, gluLookAt должна отвечать за матрицу вида и стоять после glMatrixMode(GL_MODELVIEW).

Ты сам ответил на свой вопрос.Эта функция изменяет видовую матрицу.

Проблема с загрузкой Gif файла (для текстуры)18 ноя. 200412:08#5
deni
Я просто для универсальной поддержки форматов.И текстуры gif для каких нибудь иконок подойдут.там качество не нужно особое.
>Есть PNG, грузи его.
А есть исходники на занрузку или описание формата?
скинь ссылку
gluLookAt18 ноя. 200411:49#3
komrad
Для камеры задаешь 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 ноя. 20048:37#3
Не ужели никто не знает и не сталкивался с этим?
Проблема с загрузкой Gif файла (для текстуры)17 ноя. 200411: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 ноя. 200411: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 ноя. 200411: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 ноя. 200411:12#12
Smally
>Кстати какой предел старости (или молодости)? А то мне уже 24, и еще 2 года учится на заочном, а я еще ничего не сделал >толкового. Мож я уже слишкой старый?
Мне тоже 24 и я много времени потерял.И тоже так думаю.
Крик души - Спасите мою душу17 ноя. 200411:10#11
Smally

На счет всего сказанного в первом посте.Главное не падать духом и стремиться что-то изучить как-бы не было это сложно.
Вдобавок трехмерная графика одна из сложных областей программирования.Тем более в таких задачах связанных еще с математикой алгоритмами и ООП и т.д.Это так сразу не дается.Я например отчасти тоже испытываю трудности в изучении.
Посмотрел код в DirectX особо не вникал т.к. использовал только DirectInput и программирую с использованием OpenGL
вот например что бросилось в глаза:

VOID Render()
{
//...

// Проверяем Direct3dDevice на потерянность
	hr = g_pd3dDevice->TestCooperativeLevel();
//...
    if( NULL == g_pd3dDevice )
		return;

//...
    }

}
ты верху используешь указаель g_pd3dDevice, а проверяешь его на NULL в cередине тела функции
просто программа может упасить если указкаель NULL.Проверять тогда надо в самом начале.

Раздел ОБУЧЕНИЕ проекта Almighty.16 ноя. 200413:20#785
Progs
>DevC++ - оболочка нд MinGW
>Просто я физически не могу поставить ВС
А совместимость есть с Visual C++ ? просто как потом проект открывать?
Формат карт для 3D бродилки16 ноя. 200411:08#3
Wiener
>А что значит стандартный формат?
1.Сделать уровень например в формате 3DS
2.Прочитать с него данные.
3.Презаписать его в файл своего формата, заренее разработанного.
Точно также можно поступить с моделями например.
Раздел ОБУЧЕНИЕ проекта Almighty.16 ноя. 20049:40#780
kronos_vano
>bounding сфера, bounding box - а это что такое??
Вот коллега почитай
http://gdlinks.hut.ru/cdfaq/
Формат карт для 3D бродилки16 ноя. 20049:18#1
mikeol
Сначала читать из стандартного, а потом писать в свой собственный.
Урок 3 Геец Андрей15 ноя. 200413: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;
так не правильно

Следующие темы >>

2001—2012 © GameDev.ru — Разработка игр