![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
OpenGL - Perspective feat. gluUnProject [D5, WinXP]
grouzd[E]v © (2005-06-06 17:26:00)Hi, пипл! У меня очередная проблема:
мне нужно передвигать 3D объекты с помощью мыши (менять нужно
только их X и Y). Делаю так:
Перевожу экранные координаты в пространственные
procedure GetWorldCoordinates(x, y : integer);
var
matrix_viewport : Array [0..3] of integer;
matrix_model, matrix_projection : Array [0..15] of double;
z : single;
begin
glGetIntegerv(GL_VIEWPORT, @matrix_viewport);
glGetDoublev(GL_MODELVIEW_MATRIX, @matrix_model);
glGetDoublev(GL_PROJECTION_MATRIX, @matrix_projection);
y := matrix_viewport[3] - y - 1;
glReadPixels(x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, @z);
gluUnProject(x, y, z, @matrix_model, @matrix_projection,
@matrix_viewport, world_x, world_y, world_z);
end;
А в MouseMove:
x := world_y;
y := world_x;
Объект перемещается, но двигается или быстрее или медленнее курсора.
Причем зависит это от Z камеры (у меня gluPerspective + gluLookAt)
Этот пример из книги Краснова, но у него там тоже вроде все коряво двигается.
ЗЫ Кстати, а когда result'ы насчет конкурса появятся?
Zer0 (2005-06-06 20:01:00) [1]я блин тоже замучился с этой pick matrix transformation
по идее все просто - нужно получить обратную матрицу (projection)^-1, но она получается какая-то кривая.
в итоге луч из камеры летит хз куда но только не туда, куда надо