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

📄 portals.cpp

📁 3D Game Engine Design Source Code非常棒
💻 CPP
📖 第 1 页 / 共 4 页
字号:
    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 + -