PMG http://forum.pmg.org.ru/ |
|
DirectX Неправильно переводятся мировае координаты в экранны http://forum.pmg.org.ru/viewtopic.php?f=2&t=4892 |
Страница 1 из 1 |
Автор: | vova64 [ 31 окт 2007 15:38 ] |
Заголовок сообщения: | DirectX Неправильно переводятся мировае координаты в экранны |
Здравствуйте! Подскажите пожалуйста. У меня такая проблемма Приложение на управляемом 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); } } } Подскажите пожалуйста что я делаю не так как это можно исправить? |
Автор: | MagicWolf [ 01 ноя 2007 09:28 ] |
Заголовок сообщения: | |
Не совсем понимаю, в dx разве нет графа сцены? |
Автор: | vova64 [ 01 ноя 2007 13:27 ] |
Заголовок сообщения: | |
MagicWolf писал(а): Не совсем понимаю, в dx разве нет графа сцены?
недопонимаю если можно поподробнее (мне нужно ококло точек с координатами X Y Z поставить двухмерный текст) |
Автор: | MagicWolf [ 02 ноя 2007 11:50 ] |
Заголовок сообщения: | |
Граф сцены - это набор взаимосвязанных объектов. Связь - это расположение и поворот. Т.е. есть некий головной объект, относительно оного расположен связанный с ним объект. Если головной объект перемещается или поворачивается, то вместе с ним свзяанный объект перемещается и поворачивается. Насколько я помню в DX должно быть что-то такое. |
Автор: | _dex_ [ 02 ноя 2007 15:43 ] |
Заголовок сообщения: | |
MagicWolf писал(а): Не совсем понимаю, в dx разве нет графа сцены?
ессно нет, этож не движок ) |
Автор: | MagicWolf [ 06 ноя 2007 09:49 ] |
Заголовок сообщения: | |
Но есть же либа D3DX там есть D3DXFRAME - иерархия фреймов, практически это и есть граф сцены. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |