Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определение положения курсора, Как найти координаты курсора 
V
    Опции темы
Ofer
Дата 14.10.2007, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.10.2006
Где: КривбаСС

Репутация: нет
Всего: 5



Доброе время суток! Подскажите пожалуйста, как можно определить координаты курсора мыши в системе координат OpenGL?
PM MAIL ICQ   Вверх
chemodan
Дата 14.10.2007, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 21.3.2007

Репутация: нет
Всего: нет



курить gluUnProject(...)
PM MAIL   Вверх
Ofer
Дата 14.10.2007, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.10.2006
Где: КривбаСС

Репутация: нет
Всего: 5



Не особо информативный ответ. Не плохо было бы примерчик  smile  
PM MAIL ICQ   Вверх
Alexeis
Дата 14.10.2007, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Цитата(http://www.gamedev.ru/articles/?id=20101)

функция gluUnProject, прототип которой находится в файле glu.h имеет вид:

Код

int APIENTRY gluUnProject (
    GLdouble       winx, 
    GLdouble       winy, 
    GLdouble       winz, 
    const GLdouble modelMatrix[16], 
    const GLdouble projMatrix[16], 
    const GLint    viewport[4], 
    GLdouble       *objx, 
    GLdouble       *objy, 
    GLdouble       *objz);


, где
winx, winy    - x,y координаты курсора мыши в системе координат viewport-a.
winz          - z координата курсора мыши. Задаётся в пределах -1..+1
              (-1 для ближней плоскости отсечения и +1 для дальней).
modelMatrix    - текущая матрица видового преобразования.
projMatrix    - текущая матрица проективного преобразования.
viewport      - текущие параметры viewport-a.
objx,objy,objz - возвращаемые мировые координаты. 



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ofer
Дата 16.10.2007, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.10.2006
Где: КривбаСС

Репутация: нет
Всего: 5



Попытался поэкспериментировать с этой функцией, но:
Код

procedure TForm1.FormClick(Sender: TObject);
var
  winx, winy, winz : Double;
  modematrix, projmatrix : PGLDouble;
  vievport : PGLInt;
  objx, objy, objz : Double;
begin
gluUnProject(winx, winy, winz, modematrix, projmatrix, vievport, objx, objy, objz);
Form1.Caption := 'winx ' + FloatToStr(winx) + ';  winy ' + FloatToStr(winy) + '; winz ' + FloatToStr(winz) + '; objx ' + FloatToStr(objx) + '; objy ' + FloatToStr(objy) + '; objz ' + FloatToStr(objz);
end;



после первого щелчка координаты выводятся, но после всех последующих они не меняються. В чем дело? Может я не так понял работу gluUnProject? smile 
PM MAIL ICQ   Вверх
Alix
Дата 17.10.2007, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 1
Всего: 23



если я правильно понял описание функции, то winx, winy - текущие координаты курсора, а где у Вас в функции они заполняются? используйте getCursorPos для получения координат курсора или событие onMouseUp, где они передаются в обработчик.

кроме того не понятно как Вы так передаете матрицы... как минимум там должен быть массив значений. или я чего то не понимаю?


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
Ofer
Дата 17.10.2007, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.10.2006
Где: КривбаСС

Репутация: нет
Всего: 5



Alix, getCursorPos возвращает координаты в двумерной системе Windows, а мне необходимо знать положение в трехмерной системе координат OpenGL.

А как правильно использовать функцию я нашел. Теперь получил что требовалось

Код

// X,Y - экранные координаты относительно левого верхнего угла окна OpenGL
var Viewport:array[0..3] of GLInt;
    mvMatrix,ProjMatrix:array[0..15] of GLDouble;
    RealY:GLInt;
    wx,wy,wz:GLDouble;
    ZVal:GLFloat;
  begin
    glGetIntegerV(GL_ViewPort,@Viewport);
    glGetDoubleV(GL_ModelView_Matrix,@mvMatrix);
    glGetDoubleV(GL_Projection_Matrix,@ProjMatrix);
    RealY:=ViewPort[3]-Y-1;
    glReadPixels(X,RealY,1,1,GL_Depth_Component,GL_Float,@ZVal);
    gluUnProject(X,RealY,ZVal,@mvMatrix,@ProjMatrix,@Viewport,wx,wy,wz);
    // wx,wy,wz - искомые пространственные координаты
  end;

PM MAIL ICQ   Вверх
Alix
Дата 18.10.2007, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 1
Всего: 23



Ofer, а то я не знаю. Просто у Вас было написано var winx, winy : ... ; и не было их инициализации перед передачи в функцию gluUnProject, как и инициализации матриц, о чем я с удивлением и упоминал в предыдущем посте. Теперь Вы написали что "X,Y - экранные координаты" и они берутся откуда-то выше, что и надо было делать.


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0816 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.