Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
#1

Как правильно высчитать координаты - C++

15.06.2012, 18:58. Просмотров 1178. Ответов 14
Метки нет (Все метки)

использую функцию glulookat
задача камера должна вращается вокруг точки posx,posy,0 ,высота heigh так же есть два угла поворота rx и ry
подскажите пожалуйста как высчитать новое положение камеры в зависимости от углов поворота и расстояния .с материалом из викепедии не получилось(точнее получилось но объекты резко изменяли положение при определённых углах).
заранее гигантское спасибо!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2012, 18:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как правильно высчитать координаты (C++):

Как правильно брать координаты курсора по событию WM_LBUTTONDOWN в x64? - C++
Как правильно брать координаты курсора по событию WM_LBUTTONDOWN в x64? В x32 было x=LOWORD(Lparam); y=HIWORD(Lparam);. А в x64 как? По...

Как высчитать факториал? - C++
Не могу понять, как сделать программу, которая будет высчитывать факториал (2n+1). Помогите пожалуйста.

Как высчитать сумму элементов определенной строки матрицы? - C++
Надо посчитать сумму элементов каждой строки массива и определить где самая большая сумма.

Как правильно вписать функцию в h-файл и правильно её отразить в основной функции? - C++
Создать внешнюю библиотеку, в которой написана функция вывода символьного массива обратном порядке. Подключить данную библиотеку к ...

Как правильно унаследовать TPoint2D от TPoint3D/ Правильно ли наследовать? ООП - C++
Два пользовательских класса: Точка в 2D пространстве и точка в 3D пространстве. class TPoint3D{ int X,Y,Z; public: ...

Высчитать значение выражения с приоритетами - C++
Дана строка символов, представляющих собой арифметическое выражение, содержащее только знаки +,-,*,/,(,) и строчные буквы английского...

14
NoMasters
Псевдослучайный
1762 / 1105 / 73
Регистрация: 13.09.2011
Сообщений: 3,141
15.06.2012, 19:20 #2
Я не понял, heigh — это просто расстояние от камеры до точки? Вообще в таком раскладе проще отказаться от glulookat и руками двигать-вращать, а так это школьный курс геометрии, сферические координаты.
1
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
15.06.2012, 19:27  [ТС] #3
NoMasters, в том то и дело я сделал с помощью сферических координат но камера дёргается при определённых углах и движение как то глючит вот код

C++
1
2
3
4
5
radius=posz;
deltax=sin(rotatey) *cos(rotatex) *radius;
deltay=sin(rotatey) *sin(rotatex) *radius;
deltaz=cos(rotatey) *radius;
gluLookAt(posx,posy,posz,deltax,deltay,deltaz,0,0,1);
за расстояния я принял высоту(posz) так как мы находимся над объектом
0
NoMasters
Псевдослучайный
1762 / 1105 / 73
Регистрация: 13.09.2011
Сообщений: 3,141
15.06.2012, 19:32 #4
А где учитывается, что вращение идёт не вокруг начала координат?
Цитата Сообщение от Van111 Посмотреть сообщение
за расстояния я принял высоту(posz) так как мы находимся над объектом
Это с какой радости?
1
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
15.06.2012, 19:34 #5
чтобы повернуть объект относительно точки вращения необходимо 1) поместить объект ( все точки объекта) в центр точки вращения затем
2) сделать поворот, относительно нулевых координат http://ru.wikipedia.org/wiki/%D0%9C%...BE%D1%82%D0%B0

вам по видимому нужен пункт про 2-мерное пр-во.

3) вернуть объект назад на столько на сколько мы его сдвинули чтобы поместить в точку вращения...
1
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
15.06.2012, 19:35  [ТС] #6
Цитата Сообщение от NoMasters Посмотреть сообщение
А где учитывается, что вращение идёт не вокруг начала координат?
как это сделать
Цитата Сообщение от NoMasters Посмотреть сообщение
Это с какой радости?
не знаю может потому ,что камера находится точно над объектом

можете сделать рабочий код?
0
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
15.06.2012, 19:40 #7
во ...
1
Миниатюры
Как правильно высчитать координаты  
NoMasters
Псевдослучайный
1762 / 1105 / 73
Регистрация: 13.09.2011
Сообщений: 3,141
15.06.2012, 19:42 #8
Цитата Сообщение от Van111 Посмотреть сообщение
как это сделать
Нужно добавить к каждой координате переносную компоненту, то есть просто соответствующую координату точки, вокруг которой происходит вращение.
1
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
15.06.2012, 19:53  [ТС] #9
OstapBender, надо чтоб вращался по двум осям

Добавлено через 4 минуты
Цитата Сообщение от NoMasters Посмотреть сообщение
Нужно добавить к каждой координате переносную компоненту, то есть просто соответствующую координату точки, вокруг которой происходит вращение.
NoMasters, вот так чтоли
deltax+=posx;
deltay+=posy;
deltaz+=posz;

Добавлено через 5 минут
можете скинуть рабочие формулы или код?

Добавлено через 19 секунд
можете скинуть рабочие формулы или код?
0
NoMasters
Псевдослучайный
1762 / 1105 / 73
Регистрация: 13.09.2011
Сообщений: 3,141
15.06.2012, 19:53 #10
Цитата Сообщение от Van111 Посмотреть сообщение
deltax+=posx;
deltay+=posy;
deltaz+=posz;
Да.
Но вообще стоит прислушаться к Остапу, он дело говорит(особенно, если в состоянии самостоятельно сформировать ровно одну матрицу для переноса и обоих поворотов).
1
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
15.06.2012, 19:56  [ТС] #11
NoMasters, мне надо не просто вращаться вокруг объекта а вращаться над определённой точкой вокруг кучи объектов
0
NoMasters
Псевдослучайный
1762 / 1105 / 73
Регистрация: 13.09.2011
Сообщений: 3,141
15.06.2012, 20:00 #12
Van111, и как это влияет? Последовательность действий ровна та же, вращение всё равно происходит вокруг какой-то там одной точки.
0
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
15.06.2012, 20:01  [ТС] #13
Цитата Сообщение от NoMasters Посмотреть сообщение
Van111, и как это влияет? Последовательность действий ровна та же, вращение всё равно происходит вокруг какой-то там одной точки.
а после этого вращения мы сможем крутить объекты вокруг своей оси?
0
NoMasters
Псевдослучайный
1762 / 1105 / 73
Регистрация: 13.09.2011
Сообщений: 3,141
15.06.2012, 20:05 #14
Цитата Сообщение от Van111 Посмотреть сообщение
а после этого вращения мы сможем крутить объекты вокруг своей оси?
glu делает ровно тоже самое.
1
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
16.06.2012, 12:49  [ТС] #15
вот получился такой бред ,что не так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
GLvoid DrawGLScene(GLvoid)
{
 
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// Очистка экрана и буфера глубины
 
 
 
 
 
 
 
 
for(int i=0,size=GAME.GetCounterUnit();i<size;i++)
    {
        glPushMatrix();
        glTranslatef(posx,posy,0);
        glRotatef(rotatey,0,0,1);
        glRotatef(rotatex,1,1,0);
 
        glTranslatef(GAME.GetX(i),GAME.GetY(i),-posz);  
        glBegin(GL_TRIANGLES);                          
        for(int j1=0;j1<counter_triangles;j1++)
        {
     
     
            for(int j2=0;j2<counter_vertices_in_triangle;j2++)
            {
                
                glColor3f(my_piramid_colors[j1][j2][0],my_piramid_colors[j1][j2][1],my_piramid_colors[j1][j2][2]);
                glVertex3f(my_piramid[j1][j2][0], my_piramid[j1][j2][1], my_piramid[j1][j2][2]  );
            
            }
        }
        glEnd(); 
        glPopMatrix();
    }
Добавлено через 1 час 50 минут
вот сделал так ,что именно неправильно? камера как то не совсем так вращается как я ожидал
C++
1
2
3
4
5
6
float radius= sqrt(pow(posz,2));
deltax=radius * cos(rotatey) * cos(rotatex);
deltay=radius * cos(rotatey) ;
deltaz=radius * cos(rotatey) * sin(rotatex);
 
gluLookAt(posx+deltax,posy+deltay,-posz-deltaz,posx,posy,0,0,1,0);
0
16.06.2012, 12:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2012, 12:49
Привет! Вот еще темы с ответами:

Задан массив, нужно высчитать некую m - C++
Привет всем, нужна помощь.. Вообщем само задание: Задан массив {Aij} размерности MxM Требуется найти m={max}_{i}({min(Aij)}_{j}) Вот...

Высчитать количество дней между двумя датами - C++
Короче,много тем на форуме по этому поводу,но нету ниодной правильной,которая мне нужна. Суть программы в том,что нужно ввести 2 даты....

Высчитать площади четырех кругов с помощью функции - C++
Написать программу, которая считает площадь четырех кругов. Вычисление площади выполнять в функции.

Даны координаты вершин треугольника и координаты некоторой точки внутри него - C++
Даны координаты вершин треугольника и координаты некоторой точки внутри него. Найти расстояние от данной точки до ближайшей стороны...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru