디시인사이드 갤러리

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

갤러리 본문 영역

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

야망인(124.137) 2013.02.18 18:41:06
조회 120 추천 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/14 - -
AD 디지털 액세서리 기간한정 세일! 운영자 25/07/11 - -
346695 형들 진지하게 물어볼꺼 있어 [2] 뉴뉴비(121.133) 13.02.21 97 0
346694 진짜 몇달간 밤새서 코딩만 하는사람들 존경스럽다 [4] 웹프(175.215) 13.02.21 183 0
346693 야 시간당 돈내고 코딩/프로젝트 방향 상담받을 사람 있냐 [7] c(175.208) 13.02.21 185 0
346690 linux => CentOs 쓰는데 수정사항 어캐 세이브함? [8] 천국거지갤로그로 이동합니다. 13.02.21 91 0
346689 횽들 교착상태 예방하는 함수가 있어요? [2] 플초보(218.209) 13.02.21 79 0
346688 야 게임핵만들라면 리버싱만잘하면되냐? [5] ㅁㄴㅇㄹ(39.7) 13.02.21 209 0
346687 처음 대학교 갈때 간지 폭발의 그래픽이 난무하는 프로그램을 만드는 줄 멍청닭(182.211) 13.02.21 88 0
346686 게임핵만드는 혛들중에 저좀 가르쳐줄혛들없나여 [7] ㅇㅇ(121.170) 13.02.21 185 0
346685 횽들아 곧 대딩되는데요 레포트 좀 해주세여~ [5] 멍청닭(182.211) 13.02.21 95 0
346684 자바 첫 프로그래밍 에러났는데.. [8] 상상(175.123) 13.02.21 156 0
346683 이제 1개월 후면 드디어... [3] aa(123.142) 13.02.21 81 0
346682 저번에 어디서 본건데 [5] furcht(112.185) 13.02.21 76 0
346681 이거 이미지클릭하면 보라색뜨는데 어떻게없앰?? [4] 23ㄷ2(175.215) 13.02.21 85 0
346680 게임 핵만드는 혛들 대충 이런개념맞음? [1] ㅇㅇ(121.170) 13.02.21 135 0
346679 오늘부터 카톡게임 개발 들어간다 질문받는다 [2] ㅇㅇ(1.241) 13.02.21 132 0
346678 집에서 or 혼자 공부하는건 시간은 많아서 좋은데 능률이 안나오네;; [1] 개마무사갤로그로 이동합니다. 13.02.21 110 0
346677 리눅스 설정이 안됀다 !! ㅠ [3] 천국거지갤로그로 이동합니다. 13.02.21 68 0
346675 리눅스 쉘에서 wget명령어 능숙하게 쓰는사람 필독 [7] ㅁㄴㅇㄹ(14.37) 13.02.21 260 0
346673 왜 무인약국 없음? [15] DART(116.41) 13.02.21 207 0
346672 Centos 6.3 버젼 쓰는데 천국거지갤로그로 이동합니다. 13.02.21 67 0
346670 유능한 해커들은 대부분 리눅스를 많이쓴다고 들었는데 왜그런거야?? [4] 엽산(14.37) 13.02.21 192 0
346669 오라클 DBA 되고싶은데 C언어 해야됨? [2] w(115.145) 13.02.21 165 0
346667 이거 바이러스냐 ?(123.142) 13.02.21 53 0
346666 횽들이 추첮해준 책이 이책 맞음? 나리링갤로그로 이동합니다. 13.02.21 70 0
346665 자바 배우기 좋은 사이트 없음용? 인강은 너무 말이 빠름 [1] 상상(175.123) 13.02.21 112 0
346664 혹시 은행 전산팀 근무하시는분 계십니까 [1] ㅇㅇ(112.220) 13.02.21 143 0
346660 일주일만에 덱스터시즌5까지 봤다 [1] 옵저버(61.255) 13.02.21 53 0
346659 요새 리눅스질문글이 많이올라오네.. 옵저버(61.255) 13.02.21 61 0
346658 오늘부터 자바 배우는데.. 드디어 시작인가 싶음. [1] 상상(175.123) 13.02.21 111 0
346657 삼성이나 엘지전자 소프트웨어 개발자들은 무슨 일 하나요? [1] 아쥬아쥬(115.23) 13.02.21 317 0
346655 dll좀 아는 사람? [4] dㅣㅣ(121.164) 13.02.21 107 0
346654 유니티 프로그래밍 가능자중 구직중인 사람 필독 [3] MalJa갤로그로 이동합니다. 13.02.21 189 0
346653 형들 sdl은 렌더링엔진임? [3] 성게밥(175.223) 13.02.21 96 0
346652 (C++) 객체를 const 화 한다는 것의 의미를 설명하시오 [3] ㅁㄴㄻㄹ갤로그로 이동합니다. 13.02.21 132 0
346651 요 근래 맨날 파이썬 파싱 질문하러 오는 새끼 [1] c(39.7) 13.02.21 212 0
346649 페북의 운명은 과연 어케될까 [4] DART(116.41) 13.02.21 183 0
346648 win32api richedit위로 검색이 안되요... 이힝(175.223) 13.02.21 34 0
346647 쉘에서의 스크립트랑 perl스크립트같은 스크립트언어랑 어떤관련이야??? [3] 엽산(14.37) 13.02.21 60 0
346646 rm `find . -newer text.txt -type f`가뭔지아냐 [1] 와나(14.37) 13.02.21 52 0
346645 쉘 프로그래밍 존나 능숙한녀석 있니? [3] Linux(14.37) 13.02.21 342 0
346643 이번에 한게임 경력공채 지원하신분 있나요 ㅇㅇ(125.152) 13.02.21 70 0
346641 IT특기병/전공대비/고졸,미취업자 중소기업친화과정취업반국비지원전액지원안내 김민섭팀장(211.48) 13.02.21 44 0
346640 형들 파이썬으로 파싱하는거... 아는형... [41] (1.245) 13.02.21 302 0
346637 애초에 더블포인터 예제는 이런거 밖에없음? [5] Sorghum갤로그로 이동합니다. 13.02.21 137 0
346636 오라클 머깔아야댐? [6] 오라클(175.197) 13.02.21 91 0
346635 수원 소멥이 광교 u타워냐? [3] sadads(59.11) 13.02.21 70 0
346634 웹표준에 대해서알고싶은데 어디가서 봄? [7] 작성자(175.215) 13.02.21 110 0
346633 홈페이지만들면ssh인가뭔가해야된다며.. [5] 작성자(175.215) 13.02.21 106 0
346632 컴퓨터구조 선수과목이 디지털 논리다??? [9] ㅇㅇ(125.31) 13.02.21 632 0
346631 프갤의 역대 명작 글.txt [3] Quaggan갤로그로 이동합니다. 13.02.21 290 0
뉴스 강호동 사주풀이, 어떻게 보시나요? 디시트렌드 07.14
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2