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

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

GUNgine27 окт. 20048:59#562
Zack
>Подолжать обучение.
В принципе основу он дал дальше самому юзать надо.Можешь у Fly'я проходить обучение.
Прблема с текстурированием Ландшафта27 окт. 20048:55#8
Disabled
>Мог бы и в статье посмотреть
>>>const GLfloat TextureBit = 1.0f/(float)MapSize;
читал пост 1?
>Если изменять значение TextureBit то можно изменять границу где текстура правильно накладывается.
Изначально было 1.0 / MapSize;
Всем спасибо нужно быдло просто изменить параметры текстуры.
Тема закрыта.

Раздел ОБУЧЕНИЕ проекта Almighty.27 окт. 20048:51#569
kronos_vano
>a13 = -SinYaw;
>...
>a23 = SinPitch*CosYaw;
>a33 = CosPitch*CosYaw;

Что то я не понял мвтрица поворота это матрица 3х3 а откуда там 4 элемент взялся? т.е. a13,a23,a33 ?
a33 вообще 1 должен быть

Раздел ОБУЧЕНИЕ проекта Almighty.27 окт. 20048:44#568
alex_r
>Я спрашиваю какая матрица у тебя активна ? GL_MODELVIEW ?
Конечно активна GL_MODELVIEW
Вот как у меня все работает:
//Сбрасываем видовую матрицу OpenGL
glLoadIdentity();
//Сбрасываем локальную
localTM.loadIdentity();
//Перемещаемся вглубь на 10
localTM.translate(0, 0, -10);
//Перемножаем с видовой
glMultMatrixf(&localTM.Matrix[0][0]);
//Сбрасываем локальную
localTM.loadIdentity();
//Получем матицу поворота вокруг оси X
localTM.rotateX(x);
//Перемножаем с видовой
glMultMatrixf(&localTM.Matrix[0][0]);
//Сбрасываем локальную
localTM.loadIdentity();
//Получем матицу поворота вокруг оси Y
localTM.rotateY(y);
//Перемножаем с видовой
glMultMatrixf(&localTM.Matrix[0][0]);
//Сбрасываем локальную
localTM.loadIdentity();
//Получем матицу поворота вокруг оси Z
localTM.rotateZ(z);
//Перемножаем с видовой
glMultMatrixf(&localTM.Matrix[0][0]);
//...отрисовка кубика
Но правильней будет вот так:
//Сбрасываем видовую матрицу OpenGL
glLoadIdentity();
//Перемещаемся вглубь на 10
localTM.translate(0, 0, -10);
//Перемножаем с видовой
glMultMatrixf(&localTM.Matrix[0][0]);
//Получаем матрицу поворота вокруг 3 осей
localTM.rotateXYZ(x, y, z);
//Перемножаем с видовой
glMultMatrixf(&localTM.Matrix[0][0]);
//...отрисовка кубика
Но у меня кубик складывается!!! что у меня неправильно в методе rotateXYZ?
я напишу еще раз:
//Матрица вращения по всем 3 углам
inline void rotateXYZ(float pitch, float yaw, float roll)
{
        register float CosPitch = cosf(pitch);
        register float SinPitch = sinf(pitch);
        register float CosYaw = cosf(yaw);
        register float SinYaw = sinf(yaw);
        register float CosRoll = cosf(roll);
        register float SinRoll = sinf(roll);

        Matrix[0][0] =  CosYaw*CosRoll;
        Matrix[0][1] = -SinRoll*CosYaw;
        Matrix[0][2] =  SinYaw;
        Matrix[0][3] =  0.0f;
        Matrix[1][0] =  SinPitch*SinYaw*CosRoll + SinRoll*CosPitch;
        Matrix[1][1] =  SinPitch*SinYaw*SinRoll + CosPitch*CosRoll;
        Matrix[1][2] = -SinPitch*CosYaw;
        Matrix[1][3] =  0.0f;

        Matrix[2][0] = -SinYaw*CosPitch*CosRoll + SinPitch*SinRoll;
        Matrix[2][1] =  SinRoll*SinYaw*CosPitch + SinRoll*SinPitch;
        Matrix[2][2] =  CosPitch*CosYaw;
        Matrix[2][3] =  0.0f;

        Matrix[3][0] =  0.0f;
        Matrix[3][1] =  0.0f;
        Matrix[3][2] =  0.0f;
        Matrix[3][3] =  1.0f;

}

Помогите пожалуйста что не так в методе rotateXYZ,почему кубик складывается?
заранее всем спасибо

Раздел ОБУЧЕНИЕ проекта Almighty.26 окт. 200417:13#560
alex_r
>А что у тебя стоит перед glLoadIdentity(); ?
x += 0.1f;
y += 0.1f;
z += 0.1f;
смотри пост 553
Раздел ОБУЧЕНИЕ проекта Almighty.26 окт. 200416:06#558
Fly
>А где присваивание Matrix[3][3] = 1.0f ???
это я уже поставил.Вообще-то она изначально единичная.
jack
>В смысле "складывается"?
Ну получается что-то вроде деформации
Прблема с текстурированием Ландшафта26 окт. 200415:59#4
Guyver

>почему тут нет зума никакого
> glTexCoord2f(x * TextureBit, z * TextureBit);
  >glVertex3f(x, k * HeightMap[j], z);

>а тут есть
>glTexCoord2f((x + Zoom) * TextureBit, z * TextureBit);
>glVertex3f(x + Zoom, k * HeightMap[i+1][j], z);

Дак ты представляешь как массив высот считывается?
тут все правильно посмотри саттью в первом посте
>ну и так в дагонку .... зачем внутри цыкла Вегин и енд поставил ?????!!!!! срочно их из цыкла .. глядиш чуть пошустрее >будет ..
Спасибо уже сделал!!! :)

Раздел ОБУЧЕНИЕ проекта Almighty.26 окт. 200415:29#555
alex_r
>Попробуй перед трансформацией локальной матрицы поставить LocalTM.LoadIdetity() или как ты там её к еденичной >приводишь

тогда кубик вообще не вращается я и приращения углов пробовал менять.

разрешение26 окт. 200415:22#1
keiko
>можно ли установить разрешение в GL-вском окне, когда оно не на fullscreen'е ? Типа чтобы в окне было 800x600, а на >мониторе 1024х768 ?
Может и можно попробуюй
создай окно 800х600
и область просмотра вот так:
glViewport(0, 0, 1024, 768);
Прблема с текстурированием Ландшафта26 окт. 200415:17#2
Lex_Sochi
>По ходу дела, у тебя неправильные текстурные координаты...
Я знаю что они неправильные, но дело в чтом что они становятся неправильные только начиная с какого-то определенного места.Но если изменять TextureBit то текстура растягивается что очень логично.Но я не могу же ее растянуть полностью.
Как быть?
All
Кто нибудь  еще подскажет?

Правка: 26 окт. 2004 15:17

Раздел ОБУЧЕНИЕ проекта Almighty.26 окт. 200415:13#553
Уважаемые All и коллеги по обучению!!!, посомтрите где может быть ошибка
//Матрица вращения по всем 3 углам
	inline void rotateXYZ(float pitch, float yaw, float roll)
	{
		register float CosPitch = cosf(pitch);
		register float SinPitch = sinf(pitch);
		register float CosYaw = cosf(yaw);
		register float SinYaw = sinf(yaw);
		register float CosRoll = cosf(roll);
		register float SinRoll = sinf(roll);

		Matrix[0][0] =  CosYaw*CosRoll;
		Matrix[0][1] = -SinRoll*CosYaw;
		Matrix[0][2] =  SinYaw;
		Matrix[0][3] =  0.0f;

		Matrix[1][0] =  SinPitch*SinYaw*CosRoll + SinRoll*CosPitch;
		Matrix[1][1] =  SinPitch*SinYaw*SinRoll + CosPitch*CosRoll;
		Matrix[1][2] = -SinPitch*CosYaw;
		Matrix[1][3] =  0.0f;


		Matrix[2][0] = -SinYaw*CosPitch*CosRoll + SinPitch*SinRoll;
		Matrix[2][1] =  SinRoll*SinYaw*CosPitch + SinRoll*SinPitch;
		Matrix[2][2] =  CosPitch*CosYaw;
		Matrix[2][3] =  0.0f;


		Matrix[3][0] =  0.0f;
		Matrix[3][1] =  0.0f;
		Matrix[3][2] =  0.0f;


	}

теперь отображение вращающегося кубика:

//угол поворота вокруг оси X
x += 0.01f;
//угол поворота вокруг оси Y
y += 0.01f;
//угол поворота вокруг оси Z
z += 0.01f;

//Сброс видовой матрицы
glLoadIdentity();
glTranslatef(0,0,-10); //Это пока временно

//собственно  поворот матрицы вокруг 3 осей
localTM.rotateXYZ(x, y, z);
//Перемножение на видовую
glMultMatrixf(&localTM.Matrix[0][0]);

//Отрисовка кубика
...

Вопрос почему кубик складывается?
все нормально работает если перемножать на матриуц поворота
только вокруг 1 оси например

//Сброс видовой матрицы
glLoadIdentity();
glTranslatef(0,0,-10); //Это пока временно
//Вращение матрицы вокруг оси
localTM.rotateX(x);//localTM.rotateZ(z) или localTM.rotateZ(z);
//Перемножение на видовую
glMultMatrixf(&localTM.Matrix[0][0]);
//Отрисовка кубика
...

Кто нибудь знает в чем проблема?
Заранее всем спасибо

Прблема с текстурированием Ландшафта26 окт. 200414:53#0
Привет всем игровым программистам.
Программирую на Visual C++ 6.0, Api OpenGL.
прочитал статью на этом сайте:http://www.gamedev.ru/coding/20208.shtml
пробую проводить рендер ландшафта
взял карту высот из готового *.raw файла.
загрузил карту и текстуру.
вот код вывода:
//Отобраражение
void LandScape::Draw(const Camera& camera)
{
	int x, z, i, j;
                //Для масштаба
	const float k = 1.0f;

	//Шаг изменения координат текстуры
	const float TextureBit = float (0.1f / MapSize);
	glEnable(GL_TEXTURE_2D);
	//Выбираем текстуру по индексу
	glBindTexture(GL_TEXTURE_2D, textId);
	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
	for (i = 0;i < MapSize - 1;i ++) {
		for (j = 0; j < MapSize - 1;j ++) {
			//Вычисление координыты x
			x = i * Zoom;
			//Вычисление координыты y
			z = j * Zoom;
			glBegin(GL_TRIANGLE_STRIP);
				glTexCoord2f(x * TextureBit, z * TextureBit);
				glVertex3f(x, k * HeightMap[i][j], z);
				glTexCoord2f((x + Zoom) * TextureBit, z * TextureBit);
				glVertex3f(x + Zoom, k * HeightMap[i+1][j], z);
				glTexCoord2f(x * TextureBit, (z + Zoom) * TextureBit);
				glVertex3f(x, k * HeightMap[i][j+1], z + Zoom);
				glTexCoord2f((x + Zoom) * TextureBit, (z + Zoom) * TextureBit);
				glVertex3f(x + Zoom, k * HeightMap[i+1][j+1], z + Zoom);
			glEnd();
		}
	}
	glDisable(GL_TEXTURE_2D);
//...
}

но при вводи получается так что если инди по ландшафту то текстуры как бы не хватает.
Если изменять значение TextureBit то можно изменять границу где текстура правильно накладывается.
Может ее надо как нибудь правильно растянуть?
проблема на рисунке показана подробнее:
Изображение удалено

В чем может быть проблема?
Спасибо всем заранее

Правка: 26 окт. 2004 15:23

Реалистичные волосы в проге26 окт. 200412:08#26
lightmap
Ты просто молодец мне очень понравилось :)
Глюки в MS VC++ 6.026 окт. 200412:03#2
XperienS
Надо поподробней запостить ошибки.Поставь Service Pack.
GUNgine25 окт. 200412:12#560
Zack
А что делать?

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

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