📄 cube.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 + -