PMG

Форумы по созданию игр
Текущее время: 26 апр 2024 22:29

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Координаты окна
СообщениеДобавлено: 08 май 2011 15:12 
Не в сети
Любитель

Зарегистрирован: 19 янв 2010 15:58
Сообщения: 14
Откуда: Комсомольск-на-Амуре
Здравствуйте. У меня вот такой вопрос. В OpenGL легко нарисовать объект, например линию в мировых координата, которые библиотека пересчитывает в оконные. У меня появилась обратная проблема. Нужно нарисовать линию в экранных координатах, чтобы она была на одном и том же месте, независимо от поворота, масштаба или сдвига системы координат. Короче, аналог, LineTo, только в OpenGL. Мне кажется, что тут можно применить стандартный WinAPI, но я думаю, что это все-таки костыли.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Координаты окна
СообщениеДобавлено: 10 май 2011 15:27 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Посмотри 32 урок, там есть что-то подобное.
Смысл такой, что выбираешь 2D проекцию, делаешь z минимальным (т.е. самый близкий объект). Задаешь viewport так чтобы соответствовал размеру окна, и без всяких поворотов рисуешь линию.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Координаты окна
СообщениеДобавлено: 11 май 2011 02:34 
Не в сети
Любитель

Зарегистрирован: 19 янв 2010 15:58
Сообщения: 14
Откуда: Комсомольск-на-Амуре
Спасибо большое, я тут как раз нашел Opegl-костыль, если кому интересно, выкладываю функцию, которая рисует прямоугольник с заданными размерами, и принимающую мировые координаты в качестве аргумента.

void __fastcall TForm1::glGDIRect(double x, double y, double z)
{
const int fr=4;
const int len=kegl*6;
const int hig=kegl;

int viewport[4]; // Место для данных окна просмотра
double mvmatrix[16], projmatrix[16]; // Место для матрицы трансформации
double winx, winy, winz; // Место для координат проекции

double x1,y1,z1;
glGetIntegerv (GL_VIEWPORT, viewport); // Извлечь текущее окно просмотра
glGetDoublev (GL_MODELVIEW_MATRIX, mvmatrix); // Извлечь текущую матрицу просмотра
glGetDoublev (GL_PROJECTION_MATRIX, projmatrix); // Извлечь матрицу проекции

// Определим 2D позиции 3D точки
gluProject(x, y, z,
mvmatrix, projmatrix, viewport, &winx, &winy, &winz);
winx-=fr;
winy-=fr;
gluUnProject(winx, winy, 0, mvmatrix, projmatrix, viewport, &x, &y, &z);
gluUnProject(winx+len, winy, 0, mvmatrix, projmatrix, viewport, &x1, &y1, &z1);

glBegin(GL_LINES);
glVertex3f(x,y,z);
glVertex3f(x1,y1,z1);
glEnd();

gluUnProject(winx+len, winy+hig+fr, 0, mvmatrix, projmatrix, viewport, &x, &y, &z);
glBegin(GL_LINES);
glVertex3f(x,y,z);
glVertex3f(x1,y1,z1);
glEnd();

gluUnProject(winx, winy+hig+fr, 0, mvmatrix, projmatrix, viewport, &x1, &y1, &z1);
glBegin(GL_LINES);
glVertex3f(x,y,z);
glVertex3f(x1,y1,z1);
glEnd();

gluUnProject(winx, winy, 0, mvmatrix, projmatrix, viewport, &x, &y, &z);
glBegin(GL_LINES);
glVertex3f(x,y,z);
glVertex3f(x1,y1,z1);
glEnd();

}


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 68


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB