MicroModelator Objects. Дополнительные точки.

В редакторе MicroModelator предусмотрена возможность создавать т.н. "точки - центры", являющиеся, по сути, центрами группы выбранных вами точек. На этой странице мы рассмотрим применение этих, казалось бы, ненужных объектов.

Допустим, нам хочется иметь трехиерный глобус и список городов, с указаниями их угловых координат и названий, по которым программа будет выводить на глобусе указатели городов и писать названия. Все это должно выглядеть так :


Допустим, мы легко можем изобразить вращающийся глобус и стрелки, указывающие города, но как определить, надо ли выводить название очередного города (не находиться ли он в данный момент на невидимой стороне) и в какой точке экрана он находиться ?
Для этого мы будем использовать следующие функции CUmmObject :
	POINT3d GetExpoint (char *name) ;          //получить положение доп. точки
	POINT3d GetExpointOutPoint (int cx, int cy, char* name) ;  //получить положение доп. точки на экране
Эти функции дают нам после вызова Tick(delta, TRUE) (или UseMatrixSettings()) или SetBaseState() :
1) Узнать положение в пространстве точки-центра с указанным именем.
2) Узнать положение на экране точки-центра с указанным именем (cx и cy - размеры буфера вывода).

Теперь решение очевидно :
1) В MicroModelator мы создаем у объекта - стрелки точку-центр (т.е. точку, определяющую положение надписи на экране).
2) В цикле вывода программы, для каждого города :
---->2.1) Находим матрицу стрелки, которая соответствует положению "указания на тукущий город" и применяем ее к стрелке, вызовом SetBaseState
---->2.2) Находим положение точки-центра. Если координата z>0, то получается, что стрелка указывает на город на задней стороне видимой сферы глобуса (чисто практические соображения), рисовать его не надо и мы переходим к следующему городу.
---->2.3) Рисуем стрелку, заодно определяем положение точки-центра на экране и пишем его название.

Все просто !
Программа идет в любом допустимом разрешении, глубина цвета - 16/24 бита определяется автоматически. Используется DirectDraw. Имеется возможность управлять способом отрисовки.
Предлагаются следующие файлы :
SFX-архив
u_earth.exe 80kb [скачать!]
u_earth.r00 60kb [скачать!]
Здесь готовая программа (читайте about.txt) 140 кб.
multiumm_src.rar [скачать!] Здесь MS VC++ проект этой программы (не забудьте подключить файлы dxdraw.lib и dxguid.lib) 29 кб.


04.09.01

Hosted by uCoz