コード例 #1
0
void		CFVec4::SetXYZ( CFVec3Arg fv3Source )
{
	const XMVECTOR& v3V = *reinterpret_cast<const XMVECTOR*>( &fv3Source );
	XMVECTOR& v4V = *reinterpret_cast<XMVECTOR*>(this);

	v4V = XMVectorSetX( v4V, XMVectorGetX( v3V ) );
	v4V = XMVectorSetY( v4V, XMVectorGetY( v3V ) );
	v4V = XMVectorSetZ( v4V, XMVectorGetZ( v3V ) );
}
コード例 #2
0
void		CFVec4::Z( FLOAT32 fVal )
{
	XMVECTOR& V4 = *reinterpret_cast<XMVECTOR*>(this);
	V4 = XMVectorSetZ( V4, fVal );
}
コード例 #3
0
void		CFVec4::ZAdd( FLOAT32 fVal )
{
	XMVECTOR& v4V = *reinterpret_cast<XMVECTOR*>(this);
	
	v4V = XMVectorSetZ( v4V, XMVectorGetZ( v4V ) + fVal );
}
コード例 #4
0
ファイル: Frustum.cpp プロジェクト: AceMice/Ze3DProject
void Frustum::CreateFrustum(float screenDepth, XMMATRIX viewMatrix, XMMATRIX projMatrix)
{
	float zMinimum, r;
	XMFLOAT4X4 projMatrixFloat;
	XMFLOAT4X4 frustumMatrix;
	XMStoreFloat4x4(&projMatrixFloat, projMatrix);

	// Calculate the minimum Z distance in the frustum.
	zMinimum = -projMatrixFloat._43 / projMatrixFloat._33;
	r = screenDepth / (screenDepth - zMinimum);
	projMatrixFloat._33 = r;
	projMatrixFloat._43 = -r * zMinimum;

	XMMATRIX updatedProjMatrix = XMLoadFloat4x4(&projMatrixFloat);

	//Create the frustum from the viewMatrix and updated projectionMatrix
	XMStoreFloat4x4(&frustumMatrix, XMMatrixMultiply(viewMatrix, updatedProjMatrix)); ;

	//Calculate near plane of frustum
	XMVectorSetX(this->planes[0], frustumMatrix._14 + frustumMatrix._13);
	XMVectorSetY(this->planes[0], frustumMatrix._24 + frustumMatrix._23);
	XMVectorSetZ(this->planes[0], frustumMatrix._34 + frustumMatrix._33);
	XMVectorSetW(this->planes[0], frustumMatrix._44 + frustumMatrix._43);
	this->planes[0] = XMPlaneNormalize(this->planes[0]);
	//this->planes[0] = XMVector3Normalize(this->planes[0]);

	//Calculate far plane of frustum
	XMVectorSetX(this->planes[1], frustumMatrix._14 - frustumMatrix._13);
	XMVectorSetY(this->planes[1], frustumMatrix._24 - frustumMatrix._23);
	XMVectorSetZ(this->planes[1], frustumMatrix._34 - frustumMatrix._33);
	XMVectorSetW(this->planes[1], frustumMatrix._44 - frustumMatrix._43);
	this->planes[1] = XMPlaneNormalize(this->planes[1]);
	//this->planes[1] = XMVector3Normalize(this->planes[1]);

	//Calculate left plane of frustum
	XMVectorSetX(this->planes[2], frustumMatrix._14 + frustumMatrix._11);
	XMVectorSetY(this->planes[2], frustumMatrix._24 + frustumMatrix._21);
	XMVectorSetZ(this->planes[2], frustumMatrix._34 + frustumMatrix._31);
	XMVectorSetW(this->planes[2], frustumMatrix._44 + frustumMatrix._41);
	this->planes[2] = XMPlaneNormalize(this->planes[2]);
	//this->planes[2] = XMVector3Normalize(this->planes[2]);

	//Calculate right plane of frustum
	XMVectorSetX(this->planes[3], frustumMatrix._14 - frustumMatrix._11);
	XMVectorSetY(this->planes[3], frustumMatrix._24 - frustumMatrix._21);
	XMVectorSetZ(this->planes[3], frustumMatrix._34 - frustumMatrix._31);
	XMVectorSetW(this->planes[3], frustumMatrix._44 - frustumMatrix._41);
	this->planes[3] = XMPlaneNormalize(this->planes[3]);
	//this->planes[3] = XMVector3Normalize(this->planes[3]);

	//Calculate top plane of frustum
	XMVectorSetX(this->planes[4], frustumMatrix._14 - frustumMatrix._12);
	XMVectorSetY(this->planes[4], frustumMatrix._24 - frustumMatrix._22);
	XMVectorSetZ(this->planes[4], frustumMatrix._34 - frustumMatrix._32);
	XMVectorSetW(this->planes[4], frustumMatrix._44 - frustumMatrix._42);
	this->planes[4] = XMPlaneNormalize(this->planes[4]);
	//this->planes[4] = XMVector3Normalize(this->planes[4]);

	//Calculate bottom plane of frustum
	XMVectorSetX(this->planes[5], frustumMatrix._14 + frustumMatrix._12);
	XMVectorSetY(this->planes[5], frustumMatrix._24 + frustumMatrix._22);
	XMVectorSetZ(this->planes[5], frustumMatrix._34 + frustumMatrix._32);
	XMVectorSetW(this->planes[5], frustumMatrix._44 + frustumMatrix._42);
	this->planes[5] = XMPlaneNormalize(this->planes[5]);
	//this->planes[5] = XMVector3Normalize(this->planes[5]);

	/*for (int i = 0; i < 6; i++) {
		float denom = 1.0f / XMVectorGetX(XMVector3Length(this->planes[i]));
		XMVectorSetX(this->planes[i], XMVectorGetX(this->planes[i]) * denom);
		XMVectorSetY(this->planes[i], XMVectorGetY(this->planes[i]) * denom);
		XMVectorSetZ(this->planes[i], XMVectorGetZ(this->planes[i]) * denom);
		XMVectorSetW(this->planes[i], XMVectorGetW(this->planes[i]) * denom);
	}*/

	return;
}