Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2010, 20:51   #1
Dima6120
Пользователь
 
Аватар для Dima6120
 
Регистрация: 04.06.2010
Сообщений: 18
Печаль Как реолизовать построение отрезка в 3D пространстве, как в SketchUp?

Делаю 3D редактор. Столкнулся с проблемой рисования фигур мышью(например отрезка).
Сделал процедуру нахождения пространственных координат. Находил с помощью неё точки и по ним строил отрезок. Но отрезок строился вообще не в том месте, где предполагалось! Нахождение пространственных координат вычитал в книжке "OpenGL грвфика в проектах Delphi".
Кто-нибудь ,кроме этого способа нахождения пространственных координат, знает другой?Если знаете - подскажите! Хотелось чтоб построение ,ну например отрезка ,было как в SketchUp!

Процедура нахождения пространственных координат

Цитата:
procedure Form1.GetWorldXYZ(mx,my:Integer;Var wx,wy,wz:GLDouble);
Var Viewport : Array [0..3] of GLInt;
mvMatrix, ProjMatrix: Array [0..15] of GLDouble;
RealY : GLint ;
Zval : GLfloat;
begin
glPushMatrix;
glGetIntegerv (GL_VIEWPORT, @Viewport);
glGetDoublev (GL_MODELVIEW_MATRIX, @mvMatrix);
glGetDoublev (GL_PROJECTION_MATRIX, @ProjMatrix);

RealY := viewport[3] - my - 1;
glReadPixels(mx, RealY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, @Zval);
gluUnProject (mx, RealY, Zval,@mvMatrix, @ProjMatrix, @Viewport, wx, wy, wz);
glPopMatrix;
end;
Dima6120 вне форума Ответить с цитированием
Старый 19.06.2010, 11:03   #2
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Я делал не совсем так. Поочерёдно выбирал нужные плоскости и считал пересечения с ними (всмысле, образованные осями координат или сдвинутой СК), запоминал точки пересечения и без всяких извратов рисовал прямо в пространстве... Этот способ, правда, подойдёт только для простых случаев, когда рисовать надо не на других объектах. В противном случае способ нужно будет модифицировать, добавив получение нормали к плоскости полигона и его положения (это уже вашим способом + проверка изменения глубины под мышью при отрисовке).
Что касается ошибки в вашем коде, меня смущает эта строка:
Код:
RealY := viewport[3] - my - 1
Проверьте, а у вас действительно viewport перевёрнутый по матрицам?
А ещё проверьте соответствие типов в параметрах последних двух функций, хитрые они...
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 19.06.2010, 20:19   #3
Dima6120
Пользователь
 
Аватар для Dima6120
 
Регистрация: 04.06.2010
Сообщений: 18
Вопрос

Цитата:
Сообщение от Selestis Посмотреть сообщение
Проверьте, а у вас действительно viewport перевёрнутый по матрицам?
А как проверить?
Dima6120 вне форума Ответить с цитированием
Старый 19.06.2010, 21:58   #4
Dima6120
Пользователь
 
Аватар для Dima6120
 
Регистрация: 04.06.2010
Сообщений: 18
По умолчанию

Вау! Я нашел решение!Странно, но если находить пространственные координаты в процедуре рисования (FormPaint) координаты по x и z находятся правильно, а по y не находятся! Правда это не совсем решение, но строить линии на осях x и z я могу!
Хотел начать писать по нормальному, но опять придётся писать через одно место!
Dima6120 вне форума Ответить с цитированием
Старый 19.06.2010, 22:48   #5
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Ах да, проверьте, не вызываете ли вы эту ф-ию внутри блока glBegin ... glEnd. Такого делать нельзя
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 20.06.2010, 13:51   #6
Dima6120
Пользователь
 
Аватар для Dima6120
 
Регистрация: 04.06.2010
Сообщений: 18
По умолчанию

Нет не вызываю.
Dima6120 вне форума Ответить с цитированием
Старый 23.06.2010, 19:55   #7
Dima6120
Пользователь
 
Аватар для Dima6120
 
Регистрация: 04.06.2010
Сообщений: 18
По умолчанию

Спасибо за помощь!
Нашел решение проблемы!
Dima6120 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Точка в трехменом пространстве( Дима я Общие вопросы Delphi 3 11.05.2010 10:12
построение диаграммы в пространстве (эксель) alex(21) Помощь студентам 0 28.12.2009 17:50
Обнаружение картинки в пространстве Altera Свободное общение 7 21.02.2009 20:25
Звук в пространстве. Манжосов Денис :) Помощь студентам 1 02.06.2008 22:39
Прямая в пространстве Neuros1s Общие вопросы Delphi 12 29.06.2007 00:06