Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Перекрючивание координат

247
16 октября 2005 года
wanja
1.2K / / 03.02.2003
Как перекрючить оконные, виндявые координаты, в OpenGL'евские?
279
18 октября 2005 года
bave
456 / / 07.03.2004
Цитата:
Originally posted by wanja
Как перекрючить оконные, виндявые координаты, в OpenGL'евские?



Ну так переходи в плоский режим...
И у тебя в OpenGL уже виндюшные координаты.

glDisable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0, uWidth, 0, uHeight, -1, 1);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();

//Здесь твой код...

glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glEnable(GL_DEPTH_TEST);


--------------------
Ну а если тебе нужны МИРОВЫЕ координаты в 3D,
тогда правилней говорить координаты СЕЛЕКТИРУЮЩЕГО
отрезка - СО(координаты на ближней и дальней плоскости отсечения... )

class CVector3
{
public:
void setVector3d(double wx, double wy, double wz) {
x = wx;
y = wy;
z = wz;
}
double x,y,z;
};

calc_select_line(int mouse_x, //Это виндюшая по x
int mouse_y, //виндюшная по y
CVector3 *p1, //Координаты СО на ближней плоскости
CVector3 *p2 //Координаты СО на дальней...
)
{
GLint viewport[4]; // параметры viewport-a.
GLdouble projection[16]; // матрица проекции.
GLdouble modelview[16]; // видовая матрица.
GLdouble vx,vy,vz; // координаты
//курсора мыши в системе координат viewport-a.
GLdouble wx,wy,wz; // возвращаемые
//мировые координаты.

glGetIntegerv(GL_VIEWPORT, viewport); //Параметры viewport'a
glGetDoublev(GL_PROJECTION_MATRIX,projection);
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
vx = mouse_x;
vy = uHeight - mouse_y - 1;
vz = -1; //для ближнего конца
gluUnProject(vx, vy, vz, modelview, projection, viewport, &wx, &wy, &wz);
p1->setVector3d(wx, wy, wz);

vz = 1; //для дальнего
gluUnProject(vx, vy, vz, modelview,projection, viewport, &wx, &wy, &wz);
p2->setVector3d(wx, wy, wz);
}

Ну а если тебе нужны конкретные мировые координаты пересечения СО и полигона - Ну, блин,
это математиком надо быть :) - Я могу свой вариант решения такой задачи выложить, но он
медленный, сам с этим парюсь :)
---------------------------------

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог