|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Координаты в OpenGL
В общем такой вопрос - Рисую паралеллепипед из восьми прямоугольников. Сам процесс это отдельная процедура которой передаются 5 параметров: ширина, высота, глубина и y,z координаты центра паралеллепипеда (все в миллиметрах), а координата х определяется положением курсора (двигаешь курсор - сдвигается пипед)
Как реализовать соответствие экранных координат с реальными (в мм)? Что то подобное видел в книге Краснова, но там никаких объяснений... |
#2
|
|||
|
|||
Кубик, скорее всего, состоит из 6 граней.
1. Можно рисовать отдельно виды спереди, сзади... 2. Определись с 3-хмерной проекцией (обычно перспективная, но можно для чертёжников - изометрию) 3. Вид трёхмерной модели будет зависеть от расстояния до камеры (или зумминга, т.е. увеличения) 4. Советую рисовать оси и сетку (я рисовал горизонтальную сетку, обозначающую пол) 5. Экранные координаты получают от мыши |
#3
|
||||||
|
||||||
_____________________________________
Цитата:
Действительно... что то я зарапортовался _____________________________________ Цитата:
Виды спереди, слева и сверху меняю кнопками с помощью Код:
gluLookAt _____________________________________ Цитата:
Использую перспективную Код:
gluPerspective(40.0,DPanel.Width/DPanel.Height,100,20000); Цитата:
Без комментариев _____________________________________ Цитата:
Есть такое ____________________________________ Цитата:
Вот здесь разъясню поподробнее: Экранные координаты получать я умею. Дело вот в чём - начало координат находится в нижней, левой, дальней точке габаритной сетки и равно 0, 0, 0 в мм.. Новый пипед строю нажатием кнопки + передача данных (ширина, высота и глубина в мм). Он появляется в начале координат. На форме лежит StatusBar и на него выводится "x = 0 :: y = 0 :: z = 0". Что требуется? Я сдвигаю мышь вправо на n-нное расстояние, пипед сдвигается на m-ное расстояние вправо в мм, а на StatusBar выводится "x = m :: y = 0 :: z = 0". Вот это и есть соответствие экранных координат с реальными... ____________________________________ |
#4
|
|||
|
|||
Судя по ответу, всё работает
Скорее всего, речь идёт о пользовательском масштабе. Я-то от OpenGL перешёл к DirectX. Там конечные координаты в пределах -1..+1 для x и y и 0..1 для z или w. |
#5
|
||||
|
||||
ёлки палки!
Цитата:
|
#6
|
|||
|
|||
Я бы делал так. (для DirectX). В буфер вершин лучше лишний раз не лазить. Т.е. занести один раз координаты всех вершин стандартного кубика. Далее к объекту привязываем матрицу сдвига и заодно матрицу масштабирования, вот их и меняем в зависимости от мыши. И ещё определиться с порядком перемножения этих двух матриц. (Скорее всего, первая масштабирует, причём учитывает и относительные пропорции, и перевод мышиных координат в мм, а вторая выполняет сдвиг)
Последний раз редактировалось AlexSku, 28.09.2007 в 14:54. |