Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.09.2007, 21:27
Аватар для AXS
AXS AXS вне форума
Новичок
 
Регистрация: 26.11.2006
Адрес: РК г. Талдыкорган
Сообщения: 67
Репутация: 15
По умолчанию Координаты в OpenGL

В общем такой вопрос - Рисую паралеллепипед из восьми прямоугольников. Сам процесс это отдельная процедура которой передаются 5 параметров: ширина, высота, глубина и y,z координаты центра паралеллепипеда (все в миллиметрах), а координата х определяется положением курсора (двигаешь курсор - сдвигается пипед)
Как реализовать соответствие экранных координат с реальными (в мм)?
Что то подобное видел в книге Краснова, но там никаких объяснений...
Ответить с цитированием
  #2  
Старый 26.09.2007, 16:24
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Кубик, скорее всего, состоит из 6 граней.
1. Можно рисовать отдельно виды спереди, сзади...
2. Определись с 3-хмерной проекцией (обычно перспективная, но можно для чертёжников - изометрию)
3. Вид трёхмерной модели будет зависеть от расстояния до камеры (или зумминга, т.е. увеличения)
4. Советую рисовать оси и сетку (я рисовал горизонтальную сетку, обозначающую пол)
5. Экранные координаты получают от мыши
Ответить с цитированием
  #3  
Старый 26.09.2007, 20:21
Аватар для AXS
AXS AXS вне форума
Новичок
 
Регистрация: 26.11.2006
Адрес: РК г. Талдыкорган
Сообщения: 67
Репутация: 15
По умолчанию

_____________________________________

Цитата:
Кубик, скорее всего, состоит из 6 граней.

Действительно... что то я зарапортовался
_____________________________________

Цитата:
1. Можно рисовать отдельно виды спереди, сзади...

Виды спереди, слева и сверху меняю кнопками с помощью
Код:
gluLookAt
. При этом проекция ортогональная чтобы грани параллельных сторон пипеда совпадали.
_____________________________________

Цитата:
2. Определись с 3-хмерной проекцией (обычно перспективная, но можно для чертёжников - изометрию)

Использую перспективную
Код:
gluPerspective(40.0,DPanel.Width/DPanel.Height,100,20000);
_____________________________________

Цитата:
3. Вид трёхмерной модели будет зависеть от расстояния до камеры (или зумминга, т.е. увеличения)

Без комментариев
_____________________________________

Цитата:
4. Советую рисовать оси и сетку (я рисовал горизонтальную сетку, обозначающую пол)

Есть такое
____________________________________

Цитата:
5. Экранные координаты получают от мыши

Вот здесь разъясню поподробнее: Экранные координаты получать я умею. Дело вот в чём - начало координат находится в нижней, левой, дальней точке габаритной сетки и равно 0, 0, 0 в мм.. Новый пипед строю нажатием кнопки + передача данных (ширина, высота и глубина в мм). Он появляется в начале координат. На форме лежит StatusBar и на него выводится "x = 0 :: y = 0 :: z = 0". Что требуется? Я сдвигаю мышь вправо на n-нное расстояние, пипед сдвигается на m-ное расстояние вправо в мм, а на StatusBar выводится "x = m :: y = 0 :: z = 0". Вот это и есть соответствие экранных координат с реальными...
____________________________________
Ответить с цитированием
  #4  
Старый 27.09.2007, 17:07
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Судя по ответу, всё работает
Скорее всего, речь идёт о пользовательском масштабе. Я-то от OpenGL перешёл к DirectX. Там конечные координаты в пределах -1..+1 для x и y и 0..1 для z или w.
Ответить с цитированием
  #5  
Старый 27.09.2007, 19:10
Аватар для AXS
AXS AXS вне форума
Новичок
 
Регистрация: 26.11.2006
Адрес: РК г. Талдыкорган
Сообщения: 67
Репутация: 15
По умолчанию

ёлки палки!
Цитата:
Я сдвигаю мышь вправо на n-нное расстояние, пипед сдвигается на m-ное расстояние вправо в мм, а на StatusBar выводится "x = m :: y = 0 :: z = 0".
КАК ЭТО РЕАЛИЗОВАТЬ???
Ответить с цитированием
  #6  
Старый 28.09.2007, 14:50
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Я бы делал так. (для DirectX). В буфер вершин лучше лишний раз не лазить. Т.е. занести один раз координаты всех вершин стандартного кубика. Далее к объекту привязываем матрицу сдвига и заодно матрицу масштабирования, вот их и меняем в зависимости от мыши. И ещё определиться с порядком перемножения этих двух матриц. (Скорее всего, первая масштабирует, причём учитывает и относительные пропорции, и перевод мышиных координат в мм, а вторая выполняет сдвиг)

Последний раз редактировалось AlexSku, 28.09.2007 в 14:54.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:02.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter