Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перевод OpenGL-> DirectX 
:(
    Опции темы
kurlyak
Дата 8.3.2012, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 7.11.2007

Репутация: 1
Всего: 3



Я пробую кусок программы из OpenGL перевести в DirectX и стокнулся с проблемой матриц. А именно glPushMatrix, glPopMatrix. Я аналогично этим GL функциям сделал так в программе DirectX (просьба не обращать внимания на неизвестность в  коде и неизвестные переменные меня интересует только работа glPushMatrix, glPopMatrix):

Код

bool bPopMx;
D3DXMATRIX mxRes;
D3DXMatrixIdentity(&mxRes);
i=0;

for (UINT k = 0; k < m_pMeshes[i].nNumMeshes; k++)
{
if (k == 0)
{ 
// first mesh - position to world coordinates, set rotation
D3DXMATRIX RotYAbs, Transl1, Transl2;
D3DXMatrixTranslation(&Transl1, ItemAbsX, ItemAbsY, ItemAbsZ);
D3DXMatrixRotationY(&RotYAbs, ItemAbsRotY);
D3DXMatrixTranslation(&Transl2, ItemAnimX, ItemAnimY, ItemAnimZ);
            
mxRes = Transl1 * RotYAbs * Transl2;
/*
glTranslated(ItemAbsX, ItemAbsY, ItemAbsZ);
glRotated(ItemAbsRotY, 0, 1, 0);
glTranslated(ItemAnimX, ItemAnimY, ItemAnimZ);
*/

ItemRelX = 0;
ItemRelY = 0;
ItemRelZ = 0;
}
else
{   // (i > 0): second+ meshes - position relative to first mesh (from MeshTree)
bit32 *itmp;
tr2_meshtree *MeshTree;

itmp = (bit32 *)Level->MeshTrees;
MeshTree = (tr2_meshtree *)&itmp[Level->Moveables[k].MeshTree + ((i - 1) * 4)];

ItemRelX = MeshTree->x;
ItemRelY = MeshTree->y;
ItemRelZ = MeshTree->z;
if (MeshTree->Flags & 0x01)
{ // return to last anchor
//glPopMatrix();
bPopMx = true;
}
if (MeshTree->Flags & 0x02)
{ // make new anchor
//glPushMatrix();
bPopMx = false;
}
}            

// translate, rotate, and render.
//glTranslated(ItemRelX, ItemRelY, ItemRelZ);
D3DXMATRIX mxTransl3;
D3DXMatrixTranslation(&mxTransl3,ItemRelX, ItemRelY, ItemRelZ);
D3DXMATRIX mxRotY, mxRotX, mxRotZ;
if (FrameRotationY[i])
{
D3DXMatrixRotationY(&mxRotY,FrameRotationY[i]);
//glRotated(FrameRotationY[i], 0, 1, 0);
}
if (FrameRotationX[i])
{
D3DXMatrixRotationX(&mxRotX,FrameRotationX[i]);
//glRotated(FrameRotationX[i], 1, 0, 0);
}
if (FrameRotationZ[i])
{
D3DXMatrixRotationZ(&mxRotZ,FrameRotationZ[i]);
//glRotated(FrameRotationZ[i], 0, 0, 1);
}

if(bPopMx)
{
mxRes = mxRes * mxRotX * mxRotY * mxRotZ;
}
else
{
D3DXMatrixIdentity(&mxRes);
}

m_pD3DDevice->SetTransform(D3DTS_WORLD, &mxRes);

Заранее благодарен.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0366 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.