PMG

Форумы по созданию игр
Текущее время: 28 мар 2024 12:17

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




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: DirectX Неправильно переводятся мировае координаты в экранны
СообщениеДобавлено: 31 окт 2007 15:38 
Не в сети
Новичок

Зарегистрирован: 31 окт 2007 15:32
Сообщения: 2
Здравствуйте!
Подскажите пожалуйста.
У меня такая проблемма
Приложение на управляемом DirectX
рисует в пространстве движение сферы вокруг центра координат в мировых координатах
также рисую три оси координат на них координатные точки (-2, -1, 0, 1, 2 ,3 ,4 , 5 и т.д.)
при помощи CustomVertex.PositionColored
к точкам рисую подписи (-2, -1, 0, 1, 2 ,3 ,4 , 5 и т.д.)
при помощи массива Test2DText = new Vector3[NumberItemsPoint];
далее стартует поток который меняет координаты и сфера движеться
есть управление параметрами отображения сцены во время работы потока
изменение дистанции
и трех углов
OptimizedWorldMatrix = Matrix.Identity;
OptimizedWorldMatrix = Matrix.Multiply(OptimizedWorldMatrix,Matrix.RotationX(Geometry.DegreeToRadian((float)theta)));
OptimizedWorldMatrix = Matrix.Multiply(OptimizedWorldMatrix,Matrix.RotationY(Geometry.DegreeToRadian((float)phi)));
OptimizedWorldMatrix = Matrix.Multiply(OptimizedWorldMatrix,Matrix.RotationZ(Geometry.DegreeToRadian((float)psi)));
далее расчитываються экранные координаты для отображения подписей координат с помощью
Font2D.DrawText(null, text, new Rectangle(x, y, this.Width, this.Height), DrawTextFormat.NoClip|DrawTextFormat.ExpandTabs|DrawTextFormat.WordBreak, c);
суть проблеммы в том что при создании окна координаты расчитаны точно и каждая подпись находиться около нужной точки
при изменении одного угла эти экранные координаты подписей пересчитываються правильно
но при изменении двух других углов экранные координаты подписей вращаються в обратном направлении
Метод расчета экранных координат таков
берутся координаты точек и копируються в массив Test2DText
vertsPoint[0].X = TempFactor;
vertsPoint[0].Y = 0.0f;
vertsPoint[0].Z = 0.0f;
vertsPoint[0].Color = Color.White.ToArgb();
...
...
vertsPoint[2].X = 2.0f*TempFactor;
vertsPoint[2].Y = 0.0f;
vertsPoint[2].Z = 0.0f;
vertsPoint[2].Color = Color.White.ToArgb();
...
...
vertsPoint[29].X = 0.0f;
vertsPoint[29].Y = 0.0f;
vertsPoint[29].Z = -5.0f*TempFactor;
vertsPoint[29].Color = Color.White.ToArgb();
vbPoint.SetData(vertsPoint, 0, LockFlags.None);

for (int i = 0; i < 30; i++)
{
Test2DText[i] = vertsPoint[i].Position;
}
далее при изменении углов пересчитываються матрицы
и пересчитываються экранные координаты подписей точек из координат точек
при помощи метода Vector3.TransformCoordinate
TestMatrix = Matrix.Identity;
TestMatrix = Matrix.Multiply(TestMatrix,WorldMatrix);
TestMatrix = Matrix.Multiply(TestMatrix,ViewMatrix);
TestMatrix = Matrix.Multiply(TestMatrix,ProjFov);
for (int i = 0; i < 30; i++)
{
Vector3 TestVector3 = Vector3.TransformCoordinate(Test2DText[i],TestMatrix);
TestVector3.X = TestVector3.X * this.ClientSize.Width/2;
TestVector3.Y = TestVector3.Y * this.ClientSize.Height/2;
TestVector3.X = TestVector3.X + this.ClientSize.Width/2;
TestVector3.Y = TestVector3.Y + this.ClientSize.Height/2;
if (i < 10)
{
Draw2DText(""+Test2DText[i].X, (int)TestVector3.X, (int)TestVector3.Y, Color.White);
}
else
{
if (i < 20)
{
Draw2DText(""+Test2DText[i].Y, (int)TestVector3.X, (int)TestVector3.Y, Color.White);
}
else
{
Draw2DText(""+Test2DText[i].Z, (int)TestVector3.X, (int)TestVector3.Y, Color.White);
}
}
}
Подскажите пожалуйста что я делаю не так
как это можно исправить?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 01 ноя 2007 09:28 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Не совсем понимаю, в dx разве нет графа сцены?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 01 ноя 2007 13:27 
Не в сети
Новичок

Зарегистрирован: 31 окт 2007 15:32
Сообщения: 2
MagicWolf писал(а):
Не совсем понимаю, в dx разве нет графа сцены?

недопонимаю
если можно поподробнее
(мне нужно ококло точек с координатами X Y Z поставить двухмерный текст)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 02 ноя 2007 11:50 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Граф сцены - это набор взаимосвязанных объектов. Связь - это расположение и поворот. Т.е. есть некий головной объект, относительно оного расположен связанный с ним объект. Если головной объект перемещается или поворачивается, то вместе с ним свзяанный объект перемещается и поворачивается.

Насколько я помню в DX должно быть что-то такое.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 02 ноя 2007 15:43 
Не в сети
Любитель

Зарегистрирован: 19 сен 2007 02:54
Сообщения: 38
MagicWolf писал(а):
Не совсем понимаю, в dx разве нет графа сцены?


ессно нет, этож не движок =))

_________________
c++ foreva!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 06 ноя 2007 09:49 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Но есть же либа D3DX там есть D3DXFRAME - иерархия фреймов, практически это и есть граф сцены.

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


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

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


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

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


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

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