void CScene::BuildObjects(ID3D11Device *pd3dDevice) { CShader *pShader = new CShader(); pShader->CreateShader(pd3dDevice); //객체(직육면체 객체와 사람 객체) 2개를 생성한다. m_nObjects = 2; m_ppObjects = new CGameObject*[m_nObjects]; CCubeMesh *pCubeMesh = new CCubeMesh(pd3dDevice, 25.0f, 25.0f, 25.0f); CRotatingObject *pCubeObject = new CRotatingObject(); pCubeObject->SetMesh(pCubeMesh); pCubeObject->SetShader(pShader); //직육면체 객체의 위치를 (-50.0f, 50.0f, 0.0f)로 설정한다. pCubeObject->m_d3dxmtxWorld._41 = -50.0f; pCubeObject->m_d3dxmtxWorld._42 = 50.0f; m_ppObjects[0] = pCubeObject; CHumanoidMesh *pHumanMesh = new CHumanoidMesh(pd3dDevice); CRotatingObject *pHumanObject = new CRotatingObject(); pHumanObject->SetMesh(pHumanMesh); pHumanObject->SetShader(pShader); //사람 객체의 위치를 (20.0f, 0.0f, 0.0f)로 설정한다. pHumanObject->m_d3dxmtxWorld._41 = 20.0f; m_ppObjects[1] = pHumanObject; }
void CScene::BuildObjects(ID3D11Device *pd3dDevice) { CShader *pShader = new CShader(); pShader->CreateShader(pd3dDevice); m_nObjects = 51; m_ppObjects = new CGameObject*[m_nObjects]; //가로x세로x높이가 15x15x15인 정육면체 메쉬를 생성한다. CCubeMesh *pMesh = new CCubeMesh(pd3dDevice, 50.0f, 50.0f, 50.0f); // random color cube draw CRotatingObject *pObject = new CRotatingObject(); //pObject->SetPosition(0, 0, 0); pObject->SetMesh(pMesh); pObject->SetShader(pShader); m_ppObjects[0] = pObject; for (int i = 1; i <= 50; ++i) { CCubeMesh *pMesh = new CCubeMesh(pd3dDevice, 5.0f, 5.0f, 5.0f); // random color cube draw CRotatingObject *pObject = new CRotatingObject(); pObject->SetPosition(-10.0f, 0, 0); pObject->SetMovingDirection(D3DXVECTOR3(float(rand() % 10) / 100.f, float(rand() % 10) / 100.f, float(rand() % 10) / 100.f)); pObject->SetMovingSpeed(0.03f); pObject->SetMesh(pMesh); pObject->SetShader(pShader); m_ppObjects[i] = pObject; } }
void CScene::BuildObjects(ID3D11Device *pd3dDevice) { CShader *pShader = new CShader(); pShader->CreateShader(pd3dDevice); //가로x세로x높이가 12x12x12인 정육면체 메쉬를 생성한다. CCubeMesh *pMesh = new CCubeMesh(pd3dDevice, 15.0f, 15.0f, 15.0f); /*x-축, y-축, z-축 양의 방향의 객체 개수이다. 각 값을 1씩 늘려가면서 실행할 때 프레임 레이트가 어떻게 변하는 가를 살펴보기 바란다.*/ int xObjects = 2, yObjects = 2, zObjects = 2; //<그림 2>와 같이 x-축, y-축, z-축으로 7개씩 총 7 x 7 x 7 = 343개의 정육면체를 배치한다. m_nObjects = (xObjects * 2 + 1)*(yObjects * 2 + 1)*(zObjects * 2 + 1); m_ppObjects = new CGameObject*[m_nObjects]; float fxPitch = 12.0f * 2.5f; float fyPitch = 12.0f * 2.5f; float fzPitch = 12.0f * 2.5f; CRotatingObject *pObject = NULL; for (int i = 0, z = +zObjects; z >= -zObjects; z--) { for (int y = -yObjects; y <= yObjects; y++) { for (int x = -xObjects; x <= xObjects; x++) { pObject = new CRotatingObject(); pObject->SetMesh(pMesh); pObject->SetShader(pShader); //각 정육면체 객체의 위치를 설정한다. pObject->SetPosition(fxPitch*x, fyPitch*y, fzPitch*z); m_ppObjects[i++] = pObject; } } } }
void CScene::BuildObjects(ID3D11Device *pd3dDevice) { CShader *pShader = new CShader(); pShader->CreateShader(pd3dDevice); //가로x세로x높이가 12x12x12인 정육면체 메쉬를 생성한다(기본 색상은 파란색). CCubeMesh *pCubeMesh = new CCubeMesh(pd3dDevice, 12.0f, 12.0f, 12.0f, D3DCOLOR_XRGB(0, 0, 128)); int xObjects = 5, yObjects = 5, zObjects = 5, i = 0; /*<그림 21>과 같이 x-축, y-축, z-축으로 11개씩 총 11 x 11 x 11 = 1,331개의 정육면체를 배치한다. x-축, y-축, z-축에서 원점의 왼쪽으로 5개, 오른쪽으로 5개, 축 위에 1개 배치한다.*/ m_nObjects = (xObjects * 2 + 1)*(yObjects * 2 + 1)*(zObjects * 2 + 1); m_ppObjects = new CGameObject*[m_nObjects]; float fxPitch = 12.0f * 2.5f; float fyPitch = 12.0f * 2.5f; float fzPitch = 12.0f * 2.5f; //정육면체 객체는 자전한다. CRotatingObject *pRotatingObject = NULL; for (int x = -xObjects; x <= xObjects; x++) { for (int y = -yObjects; y <= yObjects; y++) { for (int z = -zObjects; z <= zObjects; z++) { pRotatingObject = new CRotatingObject(); pRotatingObject->SetMesh(pCubeMesh); pRotatingObject->SetShader(pShader); //각 정육면체 객체의 위치를 설정한다. pRotatingObject->SetPosition(fxPitch*x, fyPitch*y, fzPitch*z); //각 정육면체 객체의 회전축을 y-축으로 설정한다. pRotatingObject->SetRotationAxis(D3DXVECTOR3(0.0f, 1.0f, 0.0f)); pRotatingObject->SetRotationSpeed(30.0f + 10.0f*(i % 10)); m_ppObjects[i++] = pRotatingObject; } } } }