📄 portals.cpp
字号:
aiConnect[33] = 15; aiConnect[34] = 2; aiConnect[35] = 14;
aiConnect[36] = 0; aiConnect[37] = 7; aiConnect[38] = 4;
aiConnect[39] = 0; aiConnect[40] = 3; aiConnect[41] = 7;
aiConnect[42] = 2; aiConnect[43] = 5; aiConnect[44] = 6;
aiConnect[45] = 2; aiConnect[46] = 1; aiConnect[47] = 5;
TriMesh* pkMesh = new TriMesh(16,akVertex,NULL,NULL,akTexture,16,
aiConnect);
pkMesh->SetRenderState(rspkWall);
rpkCube->AttachChild(pkMesh);
// portals
rapkPortal = new Portal*[2];
Vector3f* akModelVertex = new Vector3f[4];
akModelVertex[0] = akVertex[11];
akModelVertex[1] = akVertex[10];
akModelVertex[2] = akVertex[ 9];
akModelVertex[3] = akVertex[ 8];
rapkPortal[0] = new Portal(4,akModelVertex,0,true);
akModelVertex = new Vector3f[4];
akModelVertex[0] = akVertex[15];
akModelVertex[1] = akVertex[14];
akModelVertex[2] = akVertex[13];
akModelVertex[3] = akVertex[12];
rapkPortal[1] = new Portal(4,akModelVertex,0,true);
// floor
akVertex = new Vector3f[4];
akVertex[0] = Vector3f(-1.0f,-1.0f,0.0f);
akVertex[1] = Vector3f(+1.0f,-1.0f,0.0f);
akVertex[2] = Vector3f(+1.0f,+1.0f,0.0f);
akVertex[3] = Vector3f(-1.0f,+1.0f,0.0f);
akTexture = new Vector2f[4];
akTexture[0] = Vector2f(0.0f,0.0f);
akTexture[1] = Vector2f(1.0f,0.0f);
akTexture[2] = Vector2f(1.0f,1.0f);
akTexture[3] = Vector2f(0.0f,1.0f);
aiConnect = new int[6];
aiConnect[0] = 0; aiConnect[1] = 1; aiConnect[2] = 2;
aiConnect[3] = 0; aiConnect[4] = 2; aiConnect[5] = 3;
pkMesh = new TriMesh(4,akVertex,NULL,NULL,akTexture,2,aiConnect);
pkMesh->SetRenderState(rspkFloor);
rpkCube->AttachChild(pkMesh);
// ceiling
akVertex = new Vector3f[4];
akVertex[0] = Vector3f(-1.0f,-1.0f,2.0f);
akVertex[1] = Vector3f(+1.0f,-1.0f,2.0f);
akVertex[2] = Vector3f(+1.0f,+1.0f,2.0f);
akVertex[3] = Vector3f(-1.0f,+1.0f,2.0f);
akTexture = new Vector2f[4];
akTexture[0] = Vector2f(0.0f,0.0f);
akTexture[1] = Vector2f(1.0f,0.0f);
akTexture[2] = Vector2f(1.0f,1.0f);
akTexture[3] = Vector2f(0.0f,1.0f);
aiConnect = new int[6];
aiConnect[0] = 0; aiConnect[1] = 2; aiConnect[2] = 1;
aiConnect[3] = 0; aiConnect[4] = 3; aiConnect[5] = 2;
pkMesh = new TriMesh(4,akVertex,NULL,NULL,akTexture,2,aiConnect);
pkMesh->SetRenderState(rspkCeiling);
rpkCube->AttachChild(pkMesh);
}
//----------------------------------------------------------------------------
void Portals::CreateEndCube (TextureStatePtr& rspkFloor,
TextureStatePtr& rspkCeiling, TextureStatePtr& rspkWall,
Node*& rpkCube, Portal**& rapkPortal)
{
rpkCube = new Node(3);
// walls
Vector3f* akVertex = new Vector3f[20];
akVertex[ 0] = Vector3f(-1.0f,-1.0f,0.0f);
akVertex[ 1] = Vector3f(+1.0f,-1.0f,0.0f);
akVertex[ 2] = Vector3f(+1.0f,+1.0f,0.0f);
akVertex[ 3] = Vector3f(-1.0f,+1.0f,0.0f);
akVertex[ 4] = Vector3f(-1.0f,-1.0f,2.0f);
akVertex[ 5] = Vector3f(+1.0f,-1.0f,2.0f);
akVertex[ 6] = Vector3f(+1.0f,+1.0f,2.0f);
akVertex[ 7] = Vector3f(-1.0f,+1.0f,2.0f);
akVertex[ 8] = Vector3f(+0.5f,-1.0f,0.0f);
akVertex[ 9] = Vector3f(+0.5f,-1.0f,1.5f);
akVertex[10] = Vector3f(-0.5f,-1.0f,1.5f);
akVertex[11] = Vector3f(-0.5f,-1.0f,0.0f);
akVertex[12] = Vector3f(-0.5f,+1.0f,0.0f);
akVertex[13] = Vector3f(-0.5f,+1.0f,1.5f);
akVertex[14] = Vector3f(+0.5f,+1.0f,1.5f);
akVertex[15] = Vector3f(+0.5f,+1.0f,0.0f);
akVertex[16] = Vector3f(+1.0f,+0.5f,0.0f);
akVertex[17] = Vector3f(+1.0f,+0.5f,1.5f);
akVertex[18] = Vector3f(+1.0f,-0.5f,1.5f);
akVertex[19] = Vector3f(+1.0f,-0.5f,0.0f);
Vector2f* akTexture = new Vector2f[20];
akTexture[ 0] = Vector2f(0.00f,0.00f);
akTexture[ 1] = Vector2f(1.00f,0.00f);
akTexture[ 2] = Vector2f(0.00f,0.00f);
akTexture[ 3] = Vector2f(1.00f,0.00f);
akTexture[ 4] = Vector2f(0.00f,1.00f);
akTexture[ 5] = Vector2f(1.00f,1.00f);
akTexture[ 6] = Vector2f(0.00f,1.00f);
akTexture[ 7] = Vector2f(1.00f,1.00f);
akTexture[ 8] = Vector2f(0.75f,0.00f);
akTexture[ 9] = Vector2f(0.75f,0.75f);
akTexture[10] = Vector2f(0.25f,0.75f);
akTexture[11] = Vector2f(0.25f,0.00f);
akTexture[12] = Vector2f(0.75f,0.00f);
akTexture[13] = Vector2f(0.75f,0.75f);
akTexture[14] = Vector2f(0.25f,0.75f);
akTexture[15] = Vector2f(0.25f,0.00f);
akTexture[16] = Vector2f(0.25f,0.00f);
akTexture[17] = Vector2f(0.25f,0.75f);
akTexture[18] = Vector2f(0.75f,0.75f);
akTexture[19] = Vector2f(0.75f,0.00f);
int* aiConnect = new int[60];
aiConnect[ 0] = 1; aiConnect[ 1] = 8; aiConnect[ 2] = 9;
aiConnect[ 3] = 1; aiConnect[ 4] = 9; aiConnect[ 5] = 5;
aiConnect[ 6] = 5; aiConnect[ 7] = 9; aiConnect[ 8] = 4;
aiConnect[ 9] = 9; aiConnect[10] = 10; aiConnect[11] = 4;
aiConnect[12] = 10; aiConnect[13] = 0; aiConnect[14] = 4;
aiConnect[15] = 11; aiConnect[16] = 0; aiConnect[17] = 10;
aiConnect[18] = 3; aiConnect[19] = 12; aiConnect[20] = 13;
aiConnect[21] = 3; aiConnect[22] = 13; aiConnect[23] = 7;
aiConnect[24] = 7; aiConnect[25] = 13; aiConnect[26] = 6;
aiConnect[27] = 13; aiConnect[28] = 14; aiConnect[29] = 6;
aiConnect[30] = 14; aiConnect[31] = 2; aiConnect[32] = 6;
aiConnect[33] = 15; aiConnect[34] = 2; aiConnect[35] = 14;
aiConnect[36] = 2; aiConnect[37] = 16; aiConnect[38] = 17;
aiConnect[39] = 2; aiConnect[40] = 17; aiConnect[41] = 6;
aiConnect[42] = 6; aiConnect[43] = 17; aiConnect[44] = 5;
aiConnect[45] = 17; aiConnect[46] = 18; aiConnect[47] = 5;
aiConnect[48] = 18; aiConnect[49] = 1; aiConnect[50] = 5;
aiConnect[51] = 19; aiConnect[52] = 1; aiConnect[53] = 18;
aiConnect[54] = 0; aiConnect[55] = 7; aiConnect[56] = 4;
aiConnect[57] = 0; aiConnect[58] = 3; aiConnect[59] = 7;
TriMesh* pkMesh = new TriMesh(20,akVertex,NULL,NULL,akTexture,20,
aiConnect);
pkMesh->SetRenderState(rspkWall);
rpkCube->AttachChild(pkMesh);
// portals
rapkPortal = new Portal*[3];
Vector3f* akModelVertex = new Vector3f[4];
akModelVertex[0] = akVertex[11];
akModelVertex[1] = akVertex[10];
akModelVertex[2] = akVertex[ 9];
akModelVertex[3] = akVertex[ 8];
rapkPortal[0] = new Portal(4,akModelVertex,0,true);
akModelVertex = new Vector3f[4];
akModelVertex[0] = akVertex[15];
akModelVertex[1] = akVertex[14];
akModelVertex[2] = akVertex[13];
akModelVertex[3] = akVertex[12];
rapkPortal[1] = new Portal(4,akModelVertex,0,true);
akModelVertex = new Vector3f[4];
akModelVertex[0] = akVertex[19];
akModelVertex[1] = akVertex[18];
akModelVertex[2] = akVertex[17];
akModelVertex[3] = akVertex[16];
rapkPortal[2] = new Portal(4,akModelVertex,0,true);
// floor
akVertex = new Vector3f[4];
akVertex[0] = Vector3f(-1.0f,-1.0f,0.0f);
akVertex[1] = Vector3f(+1.0f,-1.0f,0.0f);
akVertex[2] = Vector3f(+1.0f,+1.0f,0.0f);
akVertex[3] = Vector3f(-1.0f,+1.0f,0.0f);
akTexture = new Vector2f[4];
akTexture[0] = Vector2f(0.0f,0.0f);
akTexture[1] = Vector2f(1.0f,0.0f);
akTexture[2] = Vector2f(1.0f,1.0f);
akTexture[3] = Vector2f(0.0f,1.0f);
aiConnect = new int[6];
aiConnect[0] = 0; aiConnect[1] = 1; aiConnect[2] = 2;
aiConnect[3] = 0; aiConnect[4] = 2; aiConnect[5] = 3;
pkMesh = new TriMesh(4,akVertex,NULL,NULL,akTexture,2,aiConnect);
pkMesh->SetRenderState(rspkFloor);
rpkCube->AttachChild(pkMesh);
// ceiling
akVertex = new Vector3f[4];
akVertex[0] = Vector3f(-1.0f,-1.0f,2.0f);
akVertex[1] = Vector3f(+1.0f,-1.0f,2.0f);
akVertex[2] = Vector3f(+1.0f,+1.0f,2.0f);
akVertex[3] = Vector3f(-1.0f,+1.0f,2.0f);
akTexture = new Vector2f[4];
akTexture[0] = Vector2f(0.0f,0.0f);
akTexture[1] = Vector2f(1.0f,0.0f);
akTexture[2] = Vector2f(1.0f,1.0f);
akTexture[3] = Vector2f(0.0f,1.0f);
aiConnect = new int[6];
aiConnect[0] = 0; aiConnect[1] = 2; aiConnect[2] = 1;
aiConnect[3] = 0; aiConnect[4] = 3; aiConnect[5] = 2;
pkMesh = new TriMesh(4,akVertex,NULL,NULL,akTexture,2,aiConnect);
pkMesh->SetRenderState(rspkCeiling);
rpkCube->AttachChild(pkMesh);
}
//----------------------------------------------------------------------------
void Portals::CreateDiagonalConnector (TextureStatePtr& rspkFloor,
TextureStatePtr& rspkCeiling, TextureStatePtr& rspkWall,
Node*& rpkCube, Portal**& rapkPortal)
{
rpkCube = new Node(3);
// walls
Vector3f* akVertex = new Vector3f[16];
akVertex[ 0] = Vector3f(3.0f,1.0f,0.0f);
akVertex[ 1] = Vector3f(5.0f,1.0f,0.0f);
akVertex[ 2] = Vector3f(1.0f,5.0f,0.0f);
akVertex[ 3] = Vector3f(1.0f,3.0f,0.0f);
akVertex[ 4] = Vector3f(3.0f,1.0f,2.0f);
akVertex[ 5] = Vector3f(5.0f,1.0f,2.0f);
akVertex[ 6] = Vector3f(1.0f,5.0f,2.0f);
akVertex[ 7] = Vector3f(1.0f,3.0f,2.0f);
akVertex[ 8] = Vector3f(4.5f,1.0f,0.0f);
akVertex[ 9] = Vector3f(4.5f,1.0f,1.5f);
akVertex[10] = Vector3f(3.5f,1.0f,1.5f);
akVertex[11] = Vector3f(3.5f,1.0f,0.0f);
akVertex[12] = Vector3f(1.0f,3.5f,0.0f);
akVertex[13] = Vector3f(1.0f,3.5f,1.5f);
akVertex[14] = Vector3f(1.0f,4.5f,1.5f);
akVertex[15] = Vector3f(1.0f,4.5f,0.0f);
Vector2f* akTexture = new Vector2f[16];
akTexture[ 0] = Vector2f(0.00f,0.00f);
akTexture[ 1] = Vector2f(1.00f,0.00f);
akTexture[ 2] = Vector2f(0.00f,0.00f);
akTexture[ 3] = Vector2f(1.00f,0.00f);
akTexture[ 4] = Vector2f(0.00f,1.00f);
akTexture[ 5] = Vector2f(1.00f,1.00f);
akTexture[ 6] = Vector2f(0.00f,1.00f);
akTexture[ 7] = Vector2f(1.00f,1.00f);
akTexture[ 8] = Vector2f(0.75f,0.00f);
akTexture[ 9] = Vector2f(0.75f,0.75f);
akTexture[10] = Vector2f(0.25f,0.75f);
akTexture[11] = Vector2f(0.25f,0.00f);
akTexture[12] = Vector2f(0.75f,0.00f);
akTexture[13] = Vector2f(0.75f,0.75f);
akTexture[14] = Vector2f(0.25f,0.75f);
akTexture[15] = Vector2f(0.25f,0.00f);
int* aiConnect = new int[48];
aiConnect[ 0] = 1; aiConnect[ 1] = 8; aiConnect[ 2] = 9;
aiConnect[ 3] = 1; aiConnect[ 4] = 9; aiConnect[ 5] = 5;
aiConnect[ 6] = 5; aiConnect[ 7] = 9; aiConnect[ 8] = 4;
aiConnect[ 9] = 9; aiConnect[10] = 10; aiConnect[11] = 4;
aiConnect[12] = 10; aiConnect[13] = 0; aiConnect[14] = 4;
aiConnect[15] = 11; aiConnect[16] = 0; aiConnect[17] = 10;
aiConnect[18] = 3; aiConnect[19] = 12; aiConnect[20] = 13;
aiConnect[21] = 3; aiConnect[22] = 13; aiConnect[23] = 7;
aiConnect[24] = 7; aiConnect[25] = 13; aiConnect[26] = 6;
aiConnect[27] = 13; aiConnect[28] = 14; aiConnect[29] = 6;
aiConnect[30] = 14; aiConnect[31] = 2; aiConnect[32] = 6;
aiConnect[33] = 15; aiConnect[34] = 2; aiConnect[35] = 14;
aiConnect[36] = 0; aiConnect[37] = 7; aiConnect[38] = 4;
aiConnect[39] = 0; aiConnect[40] = 3; aiConnect[41] = 7;
aiConnect[42] = 2; aiConnect[43] = 5; aiConnect[44] = 6;
aiConnect[45] = 2; aiConnect[46] = 1; aiConnect[47] = 5;
TriMesh* pkMesh = new TriMesh(16,akVertex,NULL,NULL,akTexture,16,
aiConnect);
pkMesh->SetRenderState(rspkWall);
rpkCube->AttachChild(pkMesh);
// portals
rapkPortal = new Portal*[2];
Vector3f* akModelVertex = new Vector3f[4];
akModelVertex[0] = akVertex[11];
akModelVertex[1] = akVertex[10];
akModelVertex[2] = akVertex[ 9];
akModelVertex[3] = akVertex[ 8];
rapkPortal[0] = new Portal(4,akModelVertex,0,true);
akModelVertex = new Vector3f[4];
akModelVertex[0] = akVertex[15];
akModelVertex[1] = akVertex[14];
akModelVertex[2] = akVertex[13];
akModelVertex[3] = akVertex[12];
rapkPortal[1] = new Portal(4,akModelVertex,0,true);
// floor
akVertex = new Vector3f[4];
akVertex[0] = Vector3f(3.0f,1.0f,0.0f);
akVertex[1] = Vector3f(5.0f,1.0f,0.0f);
akVertex[2] = Vector3f(1.0f,5.0f,0.0f);
akVertex[3] = Vector3f(1.0f,3.0f,0.0f);
akTexture = new Vector2f[4];
akTexture[0] = Vector2f(0.0f,0.0f);
akTexture[1] = Vector2f(1.0f,0.0f);
akTexture[2] = Vector2f(1.0f,1.0f);
akTexture[3] = Vector2f(0.0f,1.0f);
aiConnect = new int[6];
aiConnect[0] = 0; aiConnect[1] = 1; aiConnect[2] = 2;
aiConnect[3] = 0; aiConnect[4] = 2; aiConnect[5] = 3;
pkMesh = new TriMesh(4,akVertex,NULL,NULL,akTexture,2,aiConnect);
pkMesh->SetRenderState(rspkFloor);
rpkCube->AttachChild(pkMesh);
// ceiling
akVertex = new Vector3f[4];
akVertex[0] = Vector3f(3.0f,1.0f,2.0f);
akVertex[1] = Vector3f(5.0f,1.0f,2.0f);
akVertex[2] = Vector3f(1.0f,5.0f,2.0f);
akVertex[3] = Vector3f(1.0f,3.0f,2.0f);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -