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

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

зацените демку + скрин28 июля 200412:25#4
stasi
а у меня демка не качается
Почему у меня складывается изображение?28 июля 20048:58#19
IPSer
Я прислал почту.Посмотри ошибку если не сложно.Спасибо заранее
Mega

Если не правильно то исправь как должно быть,если не сложно.Спасибо заранее

    Vector 3D temp;

   if (anY)  {//Поворот в плоскости 0yz
       anY = - anY;//Поворот противоположно движению мыши
       temp = *Up;
       *Up = (*Up) * cos(anY) -  (*Direction) * sin(anY);
       *Direction = temp * sin(anY) + (*Direction) * cos(anY);
   }

   if (anX)  { //Поворот в плоскости 0xz
      anX = - anX;//Поворот противоположно движению мыши
      temp = *Right;
     *Right = (*Right) * cos(anX) - (*Direction) * sin(anX);
     *Direction = temp * sin(anX) + (*Direction) * cos(anX);
  }
Почему у меня складывается изображение?27 июля 200416:25#16
IPSer
Спасибо конечно
Не работает может завтра тебе на мыло код скину? там около 200кб
Почему у меня складывается изображение?27 июля 200416:13#14
IPSer
Я торопился поэтому забыл поставить звездочку.Проверка на 0 это если не было передвижения мыши.
т.е. разница координат между текущем положение и последним равна нулю,тогда движения мыши в данном напрвлении не было.
>И еще: Vector3D лучше возвращать по ссылке.
это не помогло
Почему у меня складывается изображение?27 июля 200415:15#11
irek,irek,Mega,VoidEx,IPSer

Вот перегрузка оператора для умножения вектора на число:

Vector3D operator * (const Vector3D& Vector, GLfloat Value)
{
	Vector3D vector;
	vector.x = Vector.x * Value;
	vector.y = Vector.y * Value;
	vector.z = Vector.z * Value;
	return vector;
}

теперь:

if (anY)  {
    anY = - anY;//Поворот противоположно движению мыши
    *Up = (*Up) * cos(anY) -  (*Direction) * sin(anY);
    *Direction = (*Direction) * sin(anY) + (*Up) * cos(anY);
}

if (anX)  {//Поворот противоположно движению мыши
   anX = - anX;
   *Right = (*Right) * cos(anX) - (*Direction) * sin(anX);
   *Direction = (*Right) * sin(anX) + (*Direction) * cos(anX);
}


Получается тоже самое, что вы скажите теперь?

Правка: 27 июля 2004 16:02

Почему у меня складывается изображение?27 июля 200414:37#10
IPSer
Вот теперь попробую,теперь понятно.
VoidEx
Спасибо разобрался
Irek
А как же без gluPerspective?Конечно использую
Mega
сразу не сообразил,что у тебя вектора,а не их координаты.
Почему у меня складывается изображение?27 июля 200414:19#5
VoidEx
вот мой код:
 //Вычисление координаты Y новой точки после поворота
Y = GLfloat(Y * cos(anY) - Y * sin(anY));
 //Вычисление координаты Z новой точки после поворота
 Z = GLfloat(Z * sin(anY) + Z * cos(anY));
вот твои формулы:
>Новое значение вектора X :
>X' = X * cosA - Z * sinA
>Новое значение вектора Z :
>Z' = X * sinA + Z * cosA

В чем разница? Я все правильно делаю.
Дак почему изображение складывается в плоскости 0xz?

Правка: 27 июля 2004 14:21

Почему у меня складывается изображение?27 июля 200413:57#3
irek
Тоже самое изменилось,только начальное положение
Mega
>X' = Xcos - Zsin
>Z' = Xsin + Zcos
а что это можно поподробней?

Правка: 27 июля 2004 14:06

Почему у меня складывается изображение?27 июля 200413:44#0
Камеру представляю 4 векторами:
Up - направление вверх
Right - направление вправо
Direction - направление вперед
Position - позиция камеры

при повороте в плоскости 0xz изменяю вектора Right,Direction
при повороте в плоскости 0yz изменяю вектора Up,Direction

вот код

//Поворот
void Camera::Rotate(GLfloat x, GLfloat y)
{
	flagRotate = true;//Камера повернулась
	const GLfloat kx = 10; //Масштаб угла по x
	const GLfloat ky = 30;//Масштаб угла по у
	GLfloat X;
	GLfloat Z;
	GLfloat Y;
	anY = (point2d -> r1 - y) / ky;
	if  (anY) {
 	    anY = - anY;//Поворот противоположно движению мыши
                   //Вращение 2 векторов Up,Direction
	   Y = Up -> y;
	   Z = Up -> z;
                   Y = GLfloat(Y * cos(anY) - Y * sin(anY));
	   Z = GLfloat(Z * sin(anY) + Z * cos(anY));
	   Up -> y = Y;
	   Up -> z = Z;
	   Y = Direction -> y;
	   Z = Direction -> z;
	   Y = GLfloat(Y * cos(anY) - Y * sin(anY));
	  //Вычисление координаты Z новой точки после поворота
	   Z = GLfloat(Z * sin(anY) + Z * cos(anY));
	   Direction -> y = Y;
	   Direction -> z = Z;
	}
	anX = (point2d -> r0 - x) / kx;
	if (anX) {
               //Вращение 2 векторов Up,Direction
                anX = - anX;   //Поворот противоположно движению мыши		X = Right -> x;
	Z = Right -> z;
	//Вычисление координаты X новой точки после поворота
	X = GLfloat(X * cos(anX) - Z * sin(anX));
	//Вычисление координаты Z новой точки после поворота
	Z = GLfloat(Z * sin(anX) + Z * cos(anX));
	Right -> x = X;
	Right -> z = Z;
	X = Direction -> x;
	Z = Direction -> z;
	X = GLfloat(X * cos(anX) - Z * sin(anX));
	//Вычисление координаты Z новой точки после поворота
	Z = GLfloat(Z * sin(anX) + Z * cos(anX));
	Direction -> x = X;
	Direction -> z = Z;
	}
	//Сохранение текущих координат мыши
	point2d -> r0 = x;
	point2d -> r1 = y;
}

после этого формирую матрицу камеры:

void Camera::SetMatrix()
{
      if (!flagMove && !flagRotate)
         return;
      Direction -> Normalize();
      Right -> Normalize();
      Up -> Normalize();
      Matrix -> Matrix[0][0] = Right -> x;
      Matrix -> Matrix[1][0] = Up -> x;
      Matrix -> Matrix[2][0] = - Direction -> x;
      Matrix -> Matrix[3][0] =  Position -> x;
      Matrix -> Matrix[0][1] = Right -> y;
      Matrix -> Matrix[1][1] = Up -> y;
      Matrix -> Matrix[2][1] = - Direction -> y;
      Matrix -> Matrix[3][1] = Position -> y;
      Matrix -> Matrix[0][2] = Right -> z;
      Matrix -> Matrix[1][2] = Up -> z;
      Matrix -> Matrix[2][2] = - Direction -> z;
      Matrix -> Matrix[3][2] = Position -> z;
      Matrix -> Matrix[0][3] = 0;
      Matrix -> Matrix[1][3] = 0;
      Matrix -> Matrix[2][3] = 0;
      Matrix -> Matrix[3][3] = 1;
}

Далее вывод сцены:

void Render::DrawScene()
{
     //.........
     glMatrixMode(GL_MODELVIEW);
     glLoadIdentity();
     gluLookAt(0,5.0,20.0, 0,0,0, 0,1,0);
     camera -> SetMatrix();
     glMultMatrixf(camera->GetMatrix());

     //.........

}

Подскажите что я делаю не так при повороте камеры в плоскости 0xz происходит складывание сцены

Правка: 27 июля 2004 14:10

SOS Перемещение26 июля 200412:54#3
FuCk
слишком объемный вопрос
вопрос по gluBuild2DMipmap26 июля 200412:05#1
вот пример:

AUX_RGBImageRec *Texture = // загрузка текстуры;

gluBuild2DMipmaps(GL_TEXTURE_2D,3,Texture->sizeX,Texture->sizeY,
GL_RGB,GL_UNSIGNED_BYTE,Texture->data);
Texture->data - последний параметр это указатель на данные рисунка.

Visual С++ vs. Delphi22 июля 20048:50#901
Ого сколько тут написали наверное народу делать нечего...Ладно на www.GameDev.ru большинство используют С++,так что хоть спотрьте прогеры на Delphi, хоть не спорьте.Все равно С++ круче!!!!
Visual С++ vs. Delphi21 июля 200418:16#835
prVovik
Что-то про мой пример молчат мы их взяли!!!
Visual С++ vs. Delphi21 июля 200418:12#833
Народ а что вы насчет моего примера молчите? как абстракцию реализовать? или в Delphi только множества да units?
Visual С++ vs. Delphi21 июля 200418:10#830
bw
const - указание компилятору которое запрещает методам класса менять значения данных класса.
объявления const хороший стиль программирования.

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

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