示例#1
0
//オブジェクトを描画する
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);
	}
}
示例#2
0
// カメラから撮影する
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;
}
示例#3
0
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);
}