⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cube.cpp

📁 手机 GAME c++ 版
💻 CPP
字号:
////////////////////////////////////////////////////////////////////////
//
// Cube.cpp
//
// Copyright (c) 2003 Nokia Mobile Phones Ltd.  All rights reserved.
//
////////////////////////////////////////////////////////////////////////

#include "Cube.h"
#include "ScanConverter.h"

////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////

TCube::TCube(TInt aRadius) :
iPos()
	{
	TVector3 unitVertex[ numVerts ] =
		{
		TVector3(  1,  1,  1 ),	// 0
		TVector3( -1,  1,  1 ),	// 1
		TVector3( -1, -1,  1 ),	// 2
		TVector3(  1, -1,  1 ),	// 3
		TVector3(  1,  1, -1 ),	// 4
		TVector3( -1,  1, -1 ),	// 5
		TVector3( -1, -1, -1 ),	// 6
		TVector3(  1, -1, -1 ),	// 7
		};

	TInt face[ numFaces ][ 4 ] =
		{
			{ 5, 4, 7, 6, 	},
			{ 0, 1, 2, 3, 	},
			{ 3, 2, 6, 7, 	},
			{ 1, 0, 4, 5, 	},
			{ 6, 2, 1, 5, 	},
			{ 4, 0, 3, 7, 	},
		};

	//
	// Note: these values assume 16 bpp and a pixel format of 444 RGB
	//
	TUint16 faceColor[ numFaces ] =
		{
		0x0f00,
		0x0f00,
		0x0ff0,
		0x0ff0,
		0x0f80,
		0x0f80,
		};

	for ( TInt v = 0 ; v < numVerts ; v++ )
		{
		iVertex[ v ].ScaleFrom(unitVertex[ v ], aRadius);
		}

	for ( TInt f = 0 ; f < numFaces ; f++ )
		{
		iFace[ f ] = TFace(faceColor[f], 4, face[ f ], iVertex);
		}

	}

////////////////////////////////////////////////////////////////////////

void TCube::SetPosition(const TVector3 &aPos)
	{
	iPos = aPos;
	}

////////////////////////////////////////////////////////////////////////

void TCube::Simulate()
	{
	iRotX += omegaX;
	iRotY += omegaY;
	iRotZ += omegaZ;
	}

////////////////////////////////////////////////////////////////////////

void TCube::Render( TScanConverter &aScanConverter, TMathLookup &aMath )
	{
	TMatrix3x3 matRX;
	TMatrix3x3 matRY;
	TMatrix3x3 matRZ;

	matRX.MakeRx(iRotX >> 1, aMath);
	matRY.MakeRy(iRotY >> 1, aMath);
	matRZ.MakeRz(iRotZ >> 1, aMath);

	TMatrix3x3 matScratch;
	matScratch.MakeCompound(matRX, matRY);
	matScratch.MakeCompound(matScratch, matRZ);

	TAffineTransform affModelToWorld(matScratch);
	affModelToWorld.SetVector(iPos);

	TScreenVertex transVertex[ numVerts ];

	// Transform verts into camera space:
	TVector3 aCameraInModelSpace;
	aScanConverter.TransformVerts( numVerts, &iVertex[ 0 ], 
				affModelToWorld, &transVertex[ 0 ], aCameraInModelSpace);

	for ( TInt f = 0 ; f < numFaces ; f++ )
		{
		iFace[ f ].Render(aScanConverter, aMath, &transVertex[0], aCameraInModelSpace);
		}
	}

////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -