Сообщения на форуме пользователя Andrey (262 стр.)
зацените демку + скрин | 28 июля 2004 | 12:25 | #4 |
---|
а у меня демка не качается
Почему у меня складывается изображение? | 28 июля 2004 | 8:58 | #19 |
---|
Я прислал почту.Посмотри ошибку если не сложно.Спасибо заранее
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 июля 2004 | 16:25 | #16 |
---|
Спасибо конечно
Не работает может завтра тебе на мыло код скину? там около 200кб
Почему у меня складывается изображение? | 27 июля 2004 | 16:13 | #14 |
---|
Я торопился поэтому забыл поставить звездочку.Проверка на 0 это если не было передвижения мыши.
т.е. разница координат между текущем положение и последним равна нулю,тогда движения мыши в данном напрвлении не было.
>И еще: Vector3D лучше возвращать по ссылке.
это не помогло
Почему у меня складывается изображение? | 27 июля 2004 | 15:15 | #11 |
---|
Вот перегрузка оператора для умножения вектора на число:
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 июля 2004 | 14:37 | #10 |
---|
Вот теперь попробую,теперь понятно.
VoidEx
Спасибо разобрался
Irek
А как же без gluPerspective?Конечно использую
Mega
сразу не сообразил,что у тебя вектора,а не их координаты.
Почему у меня складывается изображение? | 27 июля 2004 | 14:19 | #5 |
---|
вот мой код:
//Вычисление координаты 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 июля 2004 | 13:57 | #3 |
---|
Тоже самое изменилось,только начальное положение
Mega
>X' = Xcos - Zsin
>Z' = Xsin + Zcos
а что это можно поподробней?
Правка: 27 июля 2004 14:06
Почему у меня складывается изображение? | 27 июля 2004 | 13:44 | #0 |
---|
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 июля 2004 | 12:54 | #3 |
---|
слишком объемный вопрос
вопрос по gluBuild2DMipmap | 26 июля 2004 | 12: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. Delphi | 22 июля 2004 | 8:50 | #901 |
---|
Visual С++ vs. Delphi | 21 июля 2004 | 18:16 | #835 |
---|
Что-то про мой пример молчат мы их взяли!!!
Visual С++ vs. Delphi | 21 июля 2004 | 18:12 | #833 |
---|
Visual С++ vs. Delphi | 21 июля 2004 | 18:10 | #830 |
---|
const - указание компилятору которое запрещает методам класса менять значения данных класса.
объявления const хороший стиль программирования.