3D 图形转换(3D Transformation)

1. 移动




图形学中,有以下几种空间概念: object space, world space, view space, projection space, 和  screen space

通常物品显示出来,需要经如下变换

                              image

 

旋转: 如下分别表示沿X,Y,Z 旋转

                      image

缩放变换:sx, sy, sz分别表示沿X,Y,Z的缩放因子

                        image

切换变换  Shearing

                       image

                     image

D3D 实现 思路

1.定义世界矩阵(world transformation):

D3DXMATRIX matWorld;
D3DXMatrixRotationY( &matWorld, timeGetTime()/150.0f );
g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );

2.定义视图矩阵(View Transformation):

D3DXVECTOR3 vEyePt ( 0.0f, 3.0f,-5.0f );      // 定义 eye point
D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );    //  look-at  point
D3DXVECTOR3 vUpVec ( 0.0f, 1.0f, 0.0f );       // “up” direction
D3DXMATRIXA16 matView; 
D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );   // 计算view Matrix
g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );

3. 定义投影矩阵(Projection Transformation): 把3D 物品投影到2D 屏幕

D3DXMATRIX matProj;
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );   //  建立 projection Matrix, 1/4 pi 定义视野角度,后面的1,100 定义视锥远近
g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );

在D3D 中可以使用 XMMatrixRotationY(t)  表示绕自身Y轴旋转


以原点为中心,4 为半径,圆周运动

 

// 2nd Cube: Rotate around origin
XMMATRIX mSpin = XMMatrixRotationZ( -t );
XMMATRIX mOrbit = XMMatrixRotationY( -t * 2.0f );
XMMATRIX mTranslate = XMMatrixTranslation( -4.0f, 0.0f, 0.0f );
XMMATRIX mScale = XMMatrixScaling( 0.3f, 0.3f, 0.3f );
matWorld2 = mScale * mSpin * mTranslate * mOrbit;

// Update variables for the second cube //
ConstantBuffer cb2;
cb2.mWorld = XMMatrixTranspose(matWorld2 );
cb2.mView = XMMatrixTranspose( matView );
cb2.mProjection = XMMatrixTranspose( matProj );
g_pImmediateContext->UpdateSubresource( g_pConstantBuffer, 0, NULL, &cb2, 0, 0 );
//
// Render the second cube
//
g_pImmediateContext->DrawIndexed( 36, 0, 0 );


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不负初心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值