XNA数学库_矩阵变换Demo_MatrixTrans

本文介绍了一个基于DirectX11的3D图形变换实例,演示了如何使用XNA数学库进行平移、旋转和缩放操作,并最终实现三维空间中的综合变换。此外,还展示了如何通过向量变换来观察这些变换的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于DirectX11的3D图形程序设计案例教程——重庆大学出版社

第三章 XNA数学库

MatrixTrans


#include<iostream>
#include<d3dcompiler.h>
#include<xnamath.h>

using namespace std;

//重载"<<",cout<<(XMVECTOR)
ostream & operator <<(ostream& os, XMVECTOR u)
{
	os << "(" << XMVectorGetX(u) << ","
		<< XMVectorGetY(u) << ","
		<< XMVectorGetZ(u) << ","
		<< XMVectorGetW(u) << ")"
		<< endl;
	return os;
}

//重载"<<",cout<<(XMFLOAT4X4)
ostream & operator <<(ostream& os, XMFLOAT4X4 m)
{
	for (int i = 0; i < 4; i++)
	{
		for (int j = 0; j < 4; j++)
		{
			os << "\t" << m(i, j) << " ";
		}
		os << endl;
	}
	os << endl;

	return os;
}

int main()
{
//平移、旋转、缩放矩阵
	XMMATRIX mTrans, mRota, mScal;

	mScal = XMMatrixScaling(0.2f, 0.2f, 0.2f);
	cout << "缩放矩阵为:" << endl;
	XMFLOAT4X4 mScalFL;
	XMStoreFloat4x4(&mScalFL, mScal);
	cout << mScalFL;

	mRota = XMMatrixRotationY(XM_PIDIV4);
	cout << "旋转矩阵为:" << endl;
	XMFLOAT4X4 mRotaFL;
	XMStoreFloat4x4(&mRotaFL, mRota);
	cout << mRotaFL;

	mTrans = XMMatrixTranslation(1.0f, 2.0f, -3.0f);
	cout << "平移矩阵为:" << endl;
	XMFLOAT4X4 mTransFL;
	XMStoreFloat4x4(&mTransFL, mTrans);
	cout << mTransFL;

//利用平移、旋转、缩放矩阵得到最终变换矩阵
	XMMATRIX mFinal;
	mFinal = XMMatrixMultiply(mScal, mRota);
	mFinal = XMMatrixMultiply(mFinal, mTrans);

	cout << "最终变换矩阵为:" << endl;
	XMFLOAT4X4 mFinalFL;
	XMStoreFloat4x4(&mFinalFL, mFinal);
	cout << mFinalFL;

//向量变换
	XMVECTOR mVector = XMVectorSet(5.0f, 0.0f, 0.0f, 1.0f);
	cout << "变换前的向量为:" << endl;
	cout << mVector;

	mVector = XMVector4Transform(mVector, mFinal);

	cout << "变换后的向量为:" << endl;
	cout << mVector;

	system("pause");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值