2013-10-10 4 views
0

У меня есть небольшой игровой уровень, выложенный с декартовой системой координат. У меня есть класс камеры, что я хочу, чтобы перевести все точки из декартова пространства в изометрическое пространство с помощью этой матрицы:2D изометрическая матрица камеры

[Cos (45), SIN (45)]

[-sin (45), cos (45)]

На бумаге, умножая любой вектор на матрицу, успешно помещает этот вектор в изометрическое пространство после первого поворота.

Прямо сейчас, я только в состоянии получить уровень рисовать в соответствии с положением камеры, используя эту матрицу:

public Matrix GetTransformation() 
    { 
     _mTransform = 
      Matrix.CreateTranslation(-Position.X, -Position.Y, 0); 

     return _mTransform; 
    } 

Где я запутался, где матрица я перечислял выше вписывается в это уравнение.

CameraIso2D не принимает никаких параметров, но здесь есть функция Draw

public void Draw(SpriteBatch sb) 
    { 
     // Start drawing from this GameLayer 
     sb.Begin(
      SpriteSortMode.FrontToBack, 
      BlendState.AlphaBlend, 
      null, 
      null, 
      null, 
      null, 
      _transformation); 

     // Draw all contained objects 
     foreach (DrawableGameObject dgo in _drawableGameObjects) 
      dgo.Draw(sb); 

     // End drawing from this GameLayer 
     sb.End(); 
    } 

_transformation матрица _mTransform возвращается из CameraIso2D каждое обновление

+0

Можете ли вы добавить код своей камеры? – pinckerman

+0

Объект камеры не принимает никаких аргументов. GameLevel содержит GameLayers и камеру. GameLayers содержат GameObjects, которые они рисуют. GameLayers используют камеру GameLevels для получения каждой матрицы преобразования. Я добавил код рисования, надеюсь, это поможет. благодаря –

ответ

0

Я решил эту проблему с помощью двух матриц. Первая матрица использует регулярное преобразование камеры и передается в spriteBatch.Begin как матрицу преобразования. Для матрицы изометрического преобразования я использовал Matrix.CreateRotationZ, чтобы имитировать изометрическое вращение оси Y, а затем я использовал Matrix.CreateScale, чтобы имитировать изометрическое вращение вниз от оси Y. GameObjects нужна позиция для декартовых координат, а вектор2 - для их изометрических координат. Передайте декартовы координаты GameObject через матрицу изометрического преобразования, чтобы получить изометрические координаты, а затем нарисуйте это место.

Смежные вопросы