디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

다이렉트 x 회전 행렬 질문이요

야망인(124.137) 2013.02.18 18:41:06
조회 119 추천 0 댓글 0

12222123123123.png?type=w620

제가 지금 테트리스를 만들고 있는데 그림처럼 1번 그림이 2번 그림처럼 되기를 원하는데 행렬 곱하는걸 어떻게 해줘야 할지
감이 안잡히네요

지금 처럼 특정키를 누르면 특정 축을 기준으로 회전 하는 소스인데요
if(KeyDown(DIK_Z))
{
  list<BLUCK>::iterator Bliter= BluckList.begin();

  for(BluckIter = BluckList.begin(); BluckIter != BluckList.end(); ++BluckIter)
  {
   if(BluckIter->m_BluckState== BLUCK_MOVE)
   {

    //BluckIter->m_vRot.z=D3DXToRadian(90);
    
    //D3DXMatrixRotationZ(&BluckIter->m_mRot,90);
    
    
    //D3DXMatrixRotationAxis(&BluckIter->m_mRot,&BluckIter->m_vPos,90);
    //D3DXVec3TransformCoord(&BluckIter->m_vPos,&BluckIter->m_v_Z,&BluckIter->m_mTM);

     //float temp=BluckIter->m_vPos.x;
     //BluckIter->m_vPos.x+=BluckIter->m_vPos.y;
     //BluckIter->m_vPos.y=temp;

  
    //회전된 벡터 = (원래 벡터 - 회전 중심 벡터) * 회전 행렬 + 회전 중심 벡터
    //BluckIter->m_vRot=(BluckIter->m_vPos - BluckList.begin()->m_vPos) * BluckIter->m_mRot + BluckList.begin()->m_vPos;
    //이럴경우에는 주위의 모델을 회전시킬때..
    // 기준모델과,  회전하려는 모델의 차이만큰
    // 원점에서 이동시킨후 회전을 시켜야지..
   }
  }
}

변수들의 역할을 정했구요
  D3DXVECTOR3     m_vPos;//정육면체 위치
D3DXVECTOR3     m_vRot;//정육면체 회전
D3DXVECTOR3     m_vScale;//정육면체 크기

D3DXMATRIX     m_mTM;//정육면체 통합행렬
D3DXMATRIX     m_mTrans;//정육면체 이동행렬
D3DXMATRIX     m_mRot;//정육면체 회전행렬
D3DXMATRIX     m_mScale;//정육면체 크기행렬

제가 하려는건 특정 블럭을 기준으로 회전하려고 하는건데요 이게 자꾸 월드행렬 좌표원점을 기준으로 회전을 해서요

참고로 저는 정육면체 클래스를 만들어서 리스트를 사용했구요 사용방식은 스위치문으로 블럭위치를 일일이 다 초기화 해줘서 특정 모양처럼 보이게 했습니다

case 1://일자형
  bluck.m_vPos  = D3DXVECTOR3(1,52,0);
  bluck.m_vRot  = D3DXVECTOR3(0,0,0);
  bluck.m_vScale = D3DXVECTOR3(1,1,1);
  D3DXMatrixIdentity(&bluck.m_mTM);
  D3DXMatrixIdentity(&bluck.m_mScale);
  D3DXMatrixIdentity(&bluck.m_mTrans);
  D3DXMatrixIdentity(&bluck.m_mRot);
  bluck.m_v_X=D3DXVECTOR3(1,0,0);
  bluck.m_v_Y=D3DXVECTOR3(0,1,0);
  bluck.m_v_Z=D3DXVECTOR3(0,0,1);
  bluck.m_BluckState = BLUCK_MOVE;

  BluckList.push_back(bluck);

  bluck.m_vPos  = D3DXVECTOR3(1,50,0);
  bluck.m_vRot  = D3DXVECTOR3(0,0,0);
  bluck.m_vScale = D3DXVECTOR3(1,1,1);
  D3DXMatrixIdentity(&bluck.m_mTM);
  D3DXMatrixIdentity(&bluck.m_mScale);
  D3DXMatrixIdentity(&bluck.m_mTrans);
  D3DXMatrixIdentity(&bluck.m_mRot);
  bluck.m_v_X=D3DXVECTOR3(1,0,0);
  bluck.m_v_Y=D3DXVECTOR3(0,1,0);
  bluck.m_v_Z=D3DXVECTOR3(0,0,1);
  bluck.m_BluckState = BLUCK_MOVE;

  BluckList.push_back(bluck);

  bluck.m_vPos  = D3DXVECTOR3(1,48,0);
  bluck.m_vRot  = D3DXVECTOR3(0,0,0);
  bluck.m_vScale = D3DXVECTOR3(1,1,1);
  D3DXMatrixIdentity(&bluck.m_mTM);
  D3DXMatrixIdentity(&bluck.m_mScale);
  D3DXMatrixIdentity(&bluck.m_mTrans);
  D3DXMatrixIdentity(&bluck.m_mRot);
  bluck.m_v_X=D3DXVECTOR3(1,0,0);
  bluck.m_v_Y=D3DXVECTOR3(0,1,0);
  bluck.m_v_Z=D3DXVECTOR3(0,0,1);
  bluck.m_BluckState = BLUCK_MOVE;

  BluckList.push_back(bluck);

  bluck.m_vPos  = D3DXVECTOR3(1,46,0);
  bluck.m_vRot  = D3DXVECTOR3(0,0,0);
  bluck.m_vScale = D3DXVECTOR3(1,1,1);
  D3DXMatrixIdentity(&bluck.m_mTM);
  D3DXMatrixIdentity(&bluck.m_mScale);
  D3DXMatrixIdentity(&bluck.m_mTrans);
  D3DXMatrixIdentity(&bluck.m_mRot);
  bluck.m_v_X=D3DXVECTOR3(1,0,0);
  bluck.m_v_Y=D3DXVECTOR3(0,1,0);
  bluck.m_v_Z=D3DXVECTOR3(0,0,1);
  bluck.m_BluckState = BLUCK_MOVE;

  BluckList.push_back(bluck);

  break;

화면에 뿌려주는 소스입니다
for(BluckIter=BluckList.begin(); BluckIter != BluckList.end() ; ++BluckIter )
{

  D3DXMatrixTranslation( &BluckIter->m_mTrans, BluckIter->m_vPos.x, BluckIter->m_vPos.y,  BluckIter->m_vPos.z);
  D3DXMatrixRotationYawPitchRoll(&BluckIter->m_mRot, BluckIter->m_vRot.y, BluckIter->m_vRot.x,  BluckIter->m_vRot.z);
  D3DXMatrixScaling(&BluckIter->m_mScale, BluckIter->m_vScale.x, BluckIter->m_vScale.y,  BluckIter->m_vScale.z);
  

  BluckIter->m_mTM = BluckIter->m_mScale * BluckIter->m_mTrans  * BluckIter->m_mRot ;

  g_pDevice->SetTransform(D3DTS_WORLD,&BluckIter->m_mTM);//통합행렬을 월드 좌표계로

  g_pDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
  g_pDevice->SetStreamSource(0,m_pVB,0,sizeof(D3DFVF_XYZ_COLOR));
  g_pDevice->SetFVF(FVF_XYZ_COLOR);

  g_pDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,36);
}

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 끝까지 다 본 걸 후회하게 만든 용두사미 드라마는? 운영자 25/07/07 - -
공지 프로그래밍 갤러리 이용 안내 [88] 운영자 20.09.28 45345 65
2870829 어깨 아프다 [4] 루도그담당(211.235) 16:43 19 0
2870828 연봉인상 15%면 많이 오른거냐 [2] 프갤러(220.87) 16:16 27 0
2870827 군대에서 이거 진짜 된적 있나요? [7] 프갤러(106.101) 15:57 33 0
2870826 내 몸에서 한남냄새가나요 [9] 개멍청한유라갤로그로 이동합니다. 15:51 46 0
2870825 카카오 코테 질문 [2] 프갤러(219.255) 15:46 44 0
2870824 기술토론 하는건 좋은데 과도하면 비호감임 [2] 프갤러(106.101) 15:39 39 0
2870823 냥덩이가 웅장해진당.. ♥냥덩이♥갤로그로 이동합니다. 15:33 16 0
2870822 인생 참 부질 없어 [1] 프갤러(59.26) 15:32 18 0
2870821 140 [1] ♥냥덩이♥갤로그로 이동합니다. 15:31 14 0
2870820 체력은 정직하당 By 나님 ♥냥덩이♥갤로그로 이동합니다. 15:00 12 0
2870819 나님 보물창고 발겨어언!!!!!!!!! [1] ♥냥덩이♥갤로그로 이동합니다. 14:57 27 0
2870818 불법 프로그램 사용하는 학원 이거 뭐임 [1] 프갤러(218.148) 14:10 36 0
2870817 뿡야하구푼데 자꾸 끙야 나오려행.. [1] ♥냥덩이♥갤로그로 이동합니다. 14:09 23 0
2870816 어떤 새끼가 ai 10배 생산성 물타기 했는진 모르겠는데 [6] 프갤러(218.154) 14:02 58 1
2870815 크래프톤 정글 게임랩 4기 / 게임테크랩 2기 (~7.18) [1] 프갤러(175.223) 14:02 94 0
2870814 파이썬 쓸꺼면 pylance 사용해서 써야함 ㅆㅇㅆ(124.216) 13:59 26 0
2870813 파이썬 좀 짜증난다. [2] 프갤러(218.154) 13:58 36 0
2870812 게임쪽이랑 서버쪽 밴엔드가 많이 다르긴해 [2] ㅆㅇㅆ(124.216) 13:48 38 0
2870810 더럽고 치사해서 때려치기 전에 해봐야할 것 프갤러(218.154) 13:44 17 0
2870809 게임회사 개발자 출신들은 별로 잘 인정 안해줌? [1] 프갤러(110.13) 13:42 48 0
2870808 자기가 말한거 다 되는데 자기가 깜빡해서 말 안한걸 [6] ㅆㅇㅆ(124.216) 13:37 43 0
2870807 chatgpt 이새끼 진짜 존나 빡대가리네 [1] 프갤러(61.72) 13:24 29 0
2870806 스윗 40 50 야옹아재는 못하는거 프갤러(211.235) 13:15 23 0
2870805 115 ♥냥덩이♥갤로그로 이동합니다. 13:00 16 0
2870804 잼각하 25마넌 감사합니다 꾸벅~~~ 프갤러(112.144) 12:54 18 1
2870803 하드웨어 속도체감 [2] ♥냥덩이♥갤로그로 이동합니다. 12:43 43 0
2870802 [대한민국] 많은 사람들이 트럼프를 지지하는 이유 프갤러(121.172) 12:36 26 0
2870800 정좌불능증 재현갤로그로 이동합니다. 12:06 14 0
2870799 자바 책 추천좀 프갤러(211.54) 12:05 12 0
2870797 자료구조 책은 머 봐야됨? [2] 프갤러(49.167) 11:01 56 0
2870796 나님 기분 ㄱㅆㅅㅌㅊ !! ♥냥덩이♥갤로그로 이동합니다. 10:59 23 0
2870795 윅스같이 홈피만드는 서비스들 ai 땜에 ㅇㅇ(118.235) 10:55 30 0
2870794 Sm은 프로그램 다 파악해노니 ㅇㅇ(211.235) 10:44 28 0
2870792 드럽고 치사해서 때려칠까? [1] 프갤러(59.16) 10:23 34 1
2870791 짱깨폭염 ㅅㅂ 짱깨들이 더 날씨좋누 뒷통수한방(1.213) 10:03 17 0
2870790 나 누구랑 키배떳는데 ㅇㅇ갤로그로 이동합니다. 09:50 23 0
2870789 "1691명 유혹해 성관계·불법 촬영"…여장남자에 발칵 발명도둑잡기(211.246) 09:19 28 0
2870788 나님 목표 ㅆㅅㅌㅊ !! ♥냥덩이♥갤로그로 이동합니다. 09:18 39 0
2870787 내 시급이 이런 식으로 정해진다니... 황당하실 겁니다 발명도둑잡기(211.246) 09:10 23 0
2870786 尹 재수감되는 3.7평 독방 발명도둑잡기(211.246) 09:04 24 0
2870785 정권교체되고 냥덩이 [1] 발명도둑잡기(211.246) 08:58 39 0
2870784 노트북 시장 근황 [1] 발명도둑잡기(211.246) 08:52 37 0
2870783 축하합니다 발명도둑잡기(211.246) 08:49 18 0
2870782 당뇨가 오는 과정 발명도둑잡기(211.246) 08:47 27 0
2870780 이렇게 보니 별로 더러워보이지 않네..ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 08:21 31 0
2870779 태연 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 08:09 19 0
2870778 하루 한 번 헤르미온느 찬양 헤르 미온느갤로그로 이동합니다. 08:06 23 0
2870777 dos에서 x윈도우 Xappeal 발명도둑잡기(211.246) 07:56 15 0
2870775 요즘 존나 후회됨 ㅇㅇ(211.234) 07:31 71 0
뉴스 “말 많이 하면 대가 따르더라”…이효리, 시험관 발언 간접 해명 디시트렌드 10:00
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2