Войти
ПрограммированиеФорумГрафика

Преобразования в локальной системе координат

#0
10:45, 8 мая 2011

Не получается трансформировать плоскость в ее локальной системе координат (растягивать, двигать, вращать):
Имею структуру:

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE)          // Положение, Нормали, Цвет
CUSTOMVERTEX VertT[] =
    {
      {  0.0f,  0.5f, -0.5f,  -1.0f, 0.0f, 0.0f,  0xffffffff},
      {  0.0f,  0.5f,  0.5f,  -1.0f, 0.0f, 0.0f,  0xffffffff},
      {  0.0f, -0.5f,  0.5f,  -1.0f, 0.0f, 0.0f,  0xffffffff},
      {  0.0f, -0.5f, -0.5f,  -1.0f, 0.0f, 0.0f,  0xffffffff},
      
    };
    const unsigned short Index[] =  {0,1,3,    1,2,3};

Копирую в память:

  //Буфер вершин
  D3DDevice->CreateVertexBuffer(6*sizeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &N_Vert, NULL);
  VOID* pBV;
  if (FAILED(N_Vert->Lock(0, sizeof(VertT), (void**)&pBV, 0))) return;
  memcpy(pBV,VertT,sizeof(VertT));
  N_Vert->Unlock();
  //Буфер индексный    
  D3DDevice->CreateIndexBuffer(6*sizeof(CUSTOMVERTEX),0, D3DFMT_INDEX16, D3DPOOL_DEFAULT, &N_indx, NULL);
  VOID* pBI;
  if (FAILED(N_indx->Lock(0, sizeof(Index), (void**)&pBI, 0))) return;
  memcpy(pBI,Index,sizeof(Index));
  N_indx->Unlock();

  И вывожу на экран:

  D3DDevice->SetStreamSource(0, N_Vert, 0, sizeof(CUSTOMVERTEX));
  D3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
  D3DDevice->SetIndices(N_indx);  
  D3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,6,0,4);
  D3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,6,0,4);

Вопрос:
Так как данную структуры трансформировать в ее локальных координатах? Или необходимо использовать другую структуру?


Я пробовал только изменяя VertT[1].x = 123; затем поновой:  блокирую, копирую, разблокирую... рисую.
N_Vert->Lock(0, sizeof(VertT), (void**)&pBV, 0);
memcpy(pBV,VertT,sizeof(VertT));
N_Vert->Unlock();

Скажите как правильно... пожалуйста.


#1
15:15, 8 мая 2011

А в каких координатах сейчас трансформируешь?

#2
15:35, 8 мая 2011

DX_M
Device->SetTransform(D3DTS_WORLD, &m);

#3
16:43, 8 мая 2011

DX_M
А какая задача ?  Нарисовать плоскость ??

#4
2:34, 9 мая 2011

Хочу ее трансформировать относительно себя (вращать вокруг своих осей).
И перемещать в мире. Какие функции для того и другого использовать?
SetTransform(D3DTS_WORLD, &m); вращает мир целиком...

ПрограммированиеФорумГрафика

Тема в архиве.