//オブジェクトを描画する void Object::Draw(Model* model, Texture* texture) { //ワールド行列の設定 TransForm(); d3dDevice->SetTransform(D3DTS_WORLD, &m_world); //モデルの描画 D3DXMATERIAL *materials = (D3DXMATERIAL *)model->buffer->GetBufferPointer(); for (DWORD i = 0; i < model->numMaterial; i++) { //マテリアルの設定 d3dDevice->SetMaterial(&materials[i].MatD3D); d3dDevice->SetTexture(0, texture->texture); //分割されたメッシュの描画 model->mesh->DrawSubset(i); } }
// カメラから撮影する void Camera::View(D3DXVECTOR3 pos, D3DXVECTOR3 rota) { // 座標計算 TransForm(pos, rota); // カメラのビュー行列を計算 D3DXMATRIX *m_temp = new D3DXMATRIX; D3DXMatrixIdentity(m_temp); D3DXMatrixInverse(m_temp, nullptr, &m_view); // カメラの逆行列を求める // ビュー行列を設定 d3dDevice->SetTransform(D3DTS_VIEW, m_temp); // 射影行列の初期化 D3DXMatrixIdentity(&m_projection); // 射影行列を作成 D3DXMatrixPerspectiveFovLH(&m_projection, D3DXToRadian(45.0f), aspect, 1.0f, 100000.0f); // 射影行列をパイプラインに設定 d3dDevice->SetTransform(D3DTS_PROJECTION, &m_projection); delete m_temp; }
int main(int argc, char **argv) { TRANS *T; ARGS *A; int Nc=0; int Np=0; int NewT=0, i; POS *P; int *BR, Nbr; if (argc<2) { fprintf(stderr," usage: polytransform <file> [trans 1] [trans 2] ... \n"); return 1; } T=malloc(argc*sizeof(TRANS)); A=malloc(argc*sizeof(ARGS)); i=2; while (i<argc) { if (NewT==0) { if (strncmp(argv[i],"move",4)==0) { T[Nc]=MOVE; Nc++; NewT++; } if (strncmp(argv[i],"rotate",6)==0) { T[Nc]=ROT; Nc++; NewT++; } else if (strncmp(argv[i],"flipx",5)==0) { T[Nc]=FLIPX; Nc++; } else if (strncmp(argv[i],"flipy",5)==0) { T[Nc]=FLIPY; Nc++; } else if (strncmp(argv[i],"scalex",6)==0) { T[Nc]=SCALEX; Nc++; NewT++; } else if (strncmp(argv[i],"scaley",6)==0) { T[Nc]=SCALEY; Nc++; NewT++; } else if (strncmp(argv[i],"scale",5)==0) { T[Nc]=SCALE; Nc++; NewT++; } else if (strncmp(argv[i],"bb_fixR",7)==0) { T[Nc]=BBFIXR; Nc++; NewT++; } else if (strncmp(argv[i],"bb",2)==0) { T[Nc]=BB; Nc++; NewT++; } } else { if (T[Nc-1]==MOVE) { if (NewT==1) { A[Nc-1].P0.x=atof(argv[i]); NewT++; } else { A[Nc-1].P0.y=atof(argv[i]); NewT=0; } } if (T[Nc-1]==ROT) { if (NewT==1) { A[Nc-1].P0.x=atof(argv[i]); NewT++; } else if (NewT==2) { A[Nc-1].P0.y=atof(argv[i]); NewT++; } else if (NewT==3) { A[Nc-1].f=atof(argv[i]); NewT=0; } } if ((T[Nc-1]==SCALE)||(T[Nc-1]==SCALEX)||(T[Nc-1]==SCALEY)) { A[Nc-1].f=atof(argv[i]); NewT=0; } if ((T[Nc-1]==BB)||(T[Nc-1]==BBFIXR)) { if (NewT==1) { A[Nc-1].P0.x=atof(argv[i]); NewT++; } else if (NewT==2) { A[Nc-1].P0.y=atof(argv[i]); NewT++; } else if (NewT==3) { A[Nc-1].P1.x=atof(argv[i]); NewT++; } else { A[Nc-1].P1.y=atof(argv[i]); NewT=0; } } } i++; } P=ReadPoly(argv[1], &BR, &Nbr, &Np); TransForm(P, Np, T, A, Nc); PrintPoly(P, Np, BR, Nbr); fprintf(stderr,"Poly Length: %e\n", LengthPoly(P, Np, BR, Nbr)); free(T); free(A); free(P); free(BR); }