디시인사이드 갤러리

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

갤러리 본문 영역

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

야망인(124.137) 2013.02.18 18:41:06
조회 118 추천 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/06/30 - -
AD 휴대폰 바꿀까? 특가 구매 찬스! 운영자 25/07/02 - -
346552 같잖은 vi와 오지랖 많은 단축키 찬양은 이제 그만!!! [15] 경번갑(121.167) 13.02.20 248 0
346548 심심할 때 가지고 놀기 딱 좋은 언어!!! [1] 경번갑(121.167) 13.02.20 106 0
346545 이 함수가 도대체 어떻게 돌아가는지 설명좀 해주세여 [4] Sorghum갤로그로 이동합니다. 13.02.20 164 0
346540 프갤성님들 조언좀 [2] ㅂㅂㅂ(14.32) 13.02.20 60 0
346539 형들 조언좀 부탁해 [12] 해물(175.192) 13.02.20 190 0
346538 웹페이지 다루는거 종결법 - 파이썬 [2] DART(116.41) 13.02.20 285 0
346537 오늘 면접 후기 [7] topandbottom갤로그로 이동합니다. 13.02.20 295 0
346536 프로그램 야근너무많다. 그냥 아빠회사밑에서 일하는게 적성에 맞는듯하다. [5] 흐아(211.237) 13.02.20 187 0
346535 네이티브 어플리케이션의 정의가 뭐냐 [41] ㅇㅇ(210.94) 13.02.20 356 0
346534 근데 보안쪽이 그렇게 쓰레기냐... 만지자갤로그로 이동합니다. 13.02.20 96 0
346533 멍청한 내 자신이 너무 밉습니다...이 멍청한새1끼.. [4] 도레기(221.138) 13.02.20 154 0
346532 솔까 vim까진 인정한다 vi는 아니지 않나? [2] 이런...(210.125) 13.02.20 133 0
346531 형들 정말 미안한데 오토핫키 진짜 1초질문 하나만 받아주라 [5] ㅠㅠ(1.241) 13.02.20 87 0
346530 대학내 인맥관리 진리.txt [4] MUFF갤로그로 이동합니다. 13.02.20 246 0
346529 go언어가 앞으로 흥할까 의심이 된다 [1] ㅇㅇ(58.102) 13.02.20 99 0
346528 vi 쓰면 뭐가 좋나요? [8] 12(59.12) 13.02.20 118 0
346527 프로그래머 할려고 하는데~ [2] ㅋㅌㅊ(183.109) 13.02.20 103 0
346526 파이썬 다시 한번만 도와주삼 형들.. 1(1.245) 13.02.20 69 0
346524 프갤성들 자동댓글 봇같은건 원리가 뭐죠? [2] aaa(125.178) 13.02.20 79 0
346523 프갤성님들은 롤 플래는 좆밥이라던데 김트루??? [3] 럼블좆도안귀여움갤로그로 이동합니다. 13.02.20 108 0
346522 노트북 쓰는 게이들아 봐바 [5] ㅁㄴㅇㄹ(121.134) 13.02.20 183 0
346521 피방 진심 개쓰레기다... 黑猫갤로그로 이동합니다. 13.02.20 107 0
346518 파이썬 질문 다시점 ㅜㅜ 파싱.. [17] 1(1.245) 13.02.20 164 0
346517 너클볼! 이라는 영화를 보니 자신감이 생긴다 ㅇㅇ(58.102) 13.02.20 42 0
346516 다들 연봉 공개해봐. [10] 켁큇갤로그로 이동합니다. 13.02.20 326 0
346515 형들 파이선 파싱좀 도와줘 ㅜㅜ [10] 1(1.245) 13.02.20 161 0
346512 얘들아 이거 풀어봐봐 [4] furcht(112.185) 13.02.20 117 0
346510 리눅스 emacs에서 C소스코드 작성하려면 실행한다음에 어떻게해?? [8] 씨발(14.37) 13.02.20 111 0
346508 수강신청이다아아아.... 黑猫갤로그로 이동합니다. 13.02.20 51 0
346507 DC찌질반 0.5.2 [2] 땡칠도사갤로그로 이동합니다. 13.02.20 260 0
346506 마노교수가 누구야??? 컴구조 책 좀 사려는데... [3] dd(125.31) 13.02.20 232 0
346505 마우스 커서로 드래그해서 윈도우 익스플로러 창 뜯는거 뭐라고해요? [1] -_-(211.196) 13.02.20 94 0
346504 쿼간 긔여어! 'ㅡ^v [1] Quaggan갤로그로 이동합니다. 13.02.20 109 0
346503 아아ㅏㅏ으ㅓㅏ [3] 루비•‿•갤로그로 이동합니다. 13.02.20 89 0
346500 얘들아 일배애들이 또 똥지린내 풍기고 다녔다며? [9] onepair(125.131) 13.02.20 247 0
346498 티비에 사설 토토 얘기 나온다.. [1] ㅋㄱ(183.96) 13.02.19 93 0
346495 초속 5센치미터는 진짜 프갤 공식 애니목록중 하나로 지정해야된다 지젼.. [1] onepair(125.131) 13.02.19 171 0
346494 sadf 씨발(14.37) 13.02.19 35 0
346493 VMware player 로 리눅스깔앗는데 존나신기하다!!! [3] 씨발(14.37) 13.02.19 178 0
346490 야 니들 예전 [만화갤러리] [이전만화갤러리]로 바뀐거 앎? [2] onepair(125.131) 13.02.19 472 0
346489 포항의 봄 씹새야 말이 좀 아니네? ㅋㅋ 아놔 ㅋㅋㅋㅋ [5] onepair(125.131) 13.02.19 176 0
346485 오프라인에서 USB살려는대 8기가 정도면 얼마할까 [3] 다크애쉬갤로그로 이동합니다. 13.02.19 99 0
346484 형들 웹 호스팅 개념이 햇갈려서 그런데 내가 생각하는게 맞는건가? [9] sdf(125.131) 13.02.19 183 0
346483 이거 봤는데 중급개발자면 해킹할수 있다더라 [3] ㅇㅇ(222.112) 13.02.19 8928 0
346482 win32api 활성화된 richedit 핸들값 구하기?? [3] 이힝(118.39) 13.02.19 65 0
346481 내노트북에 윈도우8깔려있는데 리눅스환경에서 실습하려그러는데 어떻게해야돼? [1] 프러그레머(14.37) 13.02.19 85 0
346480 방금 1대100 본 프갤형님 있나 [4] (59.14) 13.02.19 169 1
346479 횽들 g++ STL 라이브러리 링크점; [1] ㅇㅇ(219.255) 13.02.19 60 0
346476 왜 자꾸 fopen에서 에러가 나냐 [5] 12(59.12) 13.02.19 90 0
346475 아이비브릿지가 틱이자나 [1] ㅋㄱ(183.96) 13.02.19 108 0
뉴스 신지 예비신랑 문원, 과거 논란 해명하며 진실 밝혀 디시트렌드 07.04
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2