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

📄 testquadricsurface.cpp

📁 《3D游戏引擎设计》的源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// Magic Software, Inc.
// http://www.magic-software.com
// Copyright (c) 2000, All Rights Reserved
//
// Source code from Magic Software is supplied under the terms of a license
// agreement and may not be copied or disclosed except in accordance with the
// terms of that agreement.  The various license agreements may be found at
// the Magic Software web site.  This file is subject to the license
//
// FREE SOURCE CODE
// http://www.magic-software.com/License.html/free.pdf

#include <windows.h>
#include "MgcQuadricSurface.h"

#define WSIZE 512
//#define PERSPECTIVE
#define CreatePoly CreateOctahedron
//#define CreatePoly CreateTetrahedron

//---------------------------------------------------------------------------
void CreateTetrahedron (MgcQuadricSurface::ConvexPolyhedron& rkTetra)
{
    rkTetra.m_iNumVertices = 4;
    rkTetra.m_apkVertex = new MgcQuadricSurface::Vertex[4];
    rkTetra.m_iNumEdges = 6;
    rkTetra.m_apkEdge = new MgcQuadricSurface::Edge[6];
    rkTetra.m_iNumTriangles = 4;
    rkTetra.m_apkTriangle = new MgcQuadricSurface::Triangle[4];

    // vertices
    rkTetra.m_apkVertex[0].m_pkPoint = new MgcVector3;
    rkTetra.m_apkVertex[0].m_pkPoint->x = 1.0;
    rkTetra.m_apkVertex[0].m_pkPoint->y = 0.0;
    rkTetra.m_apkVertex[0].m_pkPoint->z = 0.0;
    rkTetra.m_apkVertex[0].m_iNumEdges = 3;
    rkTetra.m_apkVertex[0].m_apkEdge = new MgcQuadricSurface::Edge*[3];
    rkTetra.m_apkVertex[0].m_apkEdge[0] = &rkTetra.m_apkEdge[0];
    rkTetra.m_apkVertex[0].m_apkEdge[1] = &rkTetra.m_apkEdge[2];
    rkTetra.m_apkVertex[0].m_apkEdge[2] = &rkTetra.m_apkEdge[3];

    rkTetra.m_apkVertex[1].m_pkPoint = new MgcVector3;
    rkTetra.m_apkVertex[1].m_pkPoint->x = 0.0;
    rkTetra.m_apkVertex[1].m_pkPoint->y = 1.0;
    rkTetra.m_apkVertex[1].m_pkPoint->z = 0.0;
    rkTetra.m_apkVertex[1].m_iNumEdges = 3;
    rkTetra.m_apkVertex[1].m_apkEdge = new MgcQuadricSurface::Edge*[3];
    rkTetra.m_apkVertex[1].m_apkEdge[0] = &rkTetra.m_apkEdge[0];
    rkTetra.m_apkVertex[1].m_apkEdge[1] = &rkTetra.m_apkEdge[1];
    rkTetra.m_apkVertex[1].m_apkEdge[2] = &rkTetra.m_apkEdge[4];

    rkTetra.m_apkVertex[2].m_pkPoint = new MgcVector3;
    rkTetra.m_apkVertex[2].m_pkPoint->x = 0.0;
    rkTetra.m_apkVertex[2].m_pkPoint->y = 0.0;
    rkTetra.m_apkVertex[2].m_pkPoint->z = 1.0;
    rkTetra.m_apkVertex[2].m_iNumEdges = 3;
    rkTetra.m_apkVertex[2].m_apkEdge = new MgcQuadricSurface::Edge*[3];
    rkTetra.m_apkVertex[2].m_apkEdge[0] = &rkTetra.m_apkEdge[1];
    rkTetra.m_apkVertex[2].m_apkEdge[1] = &rkTetra.m_apkEdge[2];
    rkTetra.m_apkVertex[2].m_apkEdge[2] = &rkTetra.m_apkEdge[5];

    rkTetra.m_apkVertex[3].m_pkPoint = new MgcVector3;
    rkTetra.m_apkVertex[3].m_pkPoint->x = MgcMath::Sqrt(1.0/3.0);
    rkTetra.m_apkVertex[3].m_pkPoint->y = MgcMath::Sqrt(1.0/3.0);
    rkTetra.m_apkVertex[3].m_pkPoint->z = MgcMath::Sqrt(1.0/3.0);
    rkTetra.m_apkVertex[3].m_iNumEdges = 3;
    rkTetra.m_apkVertex[3].m_apkEdge = new MgcQuadricSurface::Edge*[3];
    rkTetra.m_apkVertex[3].m_apkEdge[0] = &rkTetra.m_apkEdge[3];
    rkTetra.m_apkVertex[3].m_apkEdge[1] = &rkTetra.m_apkEdge[4];
    rkTetra.m_apkVertex[3].m_apkEdge[2] = &rkTetra.m_apkEdge[5];

    // edges
    rkTetra.m_apkEdge[0].m_apkVertex[0] = &rkTetra.m_apkVertex[0];
    rkTetra.m_apkEdge[0].m_apkVertex[1] = &rkTetra.m_apkVertex[1];
    rkTetra.m_apkEdge[0].m_apkTriangle[0] = &rkTetra.m_apkTriangle[0];
    rkTetra.m_apkEdge[0].m_apkTriangle[1] = &rkTetra.m_apkTriangle[1];

    rkTetra.m_apkEdge[1].m_apkVertex[0] = &rkTetra.m_apkVertex[1];
    rkTetra.m_apkEdge[1].m_apkVertex[1] = &rkTetra.m_apkVertex[2];
    rkTetra.m_apkEdge[1].m_apkTriangle[0] = &rkTetra.m_apkTriangle[0];
    rkTetra.m_apkEdge[1].m_apkTriangle[1] = &rkTetra.m_apkTriangle[2];

    rkTetra.m_apkEdge[2].m_apkVertex[0] = &rkTetra.m_apkVertex[2];
    rkTetra.m_apkEdge[2].m_apkVertex[1] = &rkTetra.m_apkVertex[0];
    rkTetra.m_apkEdge[2].m_apkTriangle[0] = &rkTetra.m_apkTriangle[0];
    rkTetra.m_apkEdge[2].m_apkTriangle[1] = &rkTetra.m_apkTriangle[3];

    rkTetra.m_apkEdge[3].m_apkVertex[0] = &rkTetra.m_apkVertex[0];
    rkTetra.m_apkEdge[3].m_apkVertex[1] = &rkTetra.m_apkVertex[3];
    rkTetra.m_apkEdge[3].m_apkTriangle[0] = &rkTetra.m_apkTriangle[1];
    rkTetra.m_apkEdge[3].m_apkTriangle[1] = &rkTetra.m_apkTriangle[3];

    rkTetra.m_apkEdge[4].m_apkVertex[0] = &rkTetra.m_apkVertex[1];
    rkTetra.m_apkEdge[4].m_apkVertex[1] = &rkTetra.m_apkVertex[3];
    rkTetra.m_apkEdge[4].m_apkTriangle[0] = &rkTetra.m_apkTriangle[1];
    rkTetra.m_apkEdge[4].m_apkTriangle[1] = &rkTetra.m_apkTriangle[2];

    rkTetra.m_apkEdge[5].m_apkVertex[0] = &rkTetra.m_apkVertex[2];
    rkTetra.m_apkEdge[5].m_apkVertex[1] = &rkTetra.m_apkVertex[3];
    rkTetra.m_apkEdge[5].m_apkTriangle[0] = &rkTetra.m_apkTriangle[2];
    rkTetra.m_apkEdge[5].m_apkTriangle[1] = &rkTetra.m_apkTriangle[3];

    // triangles
    rkTetra.m_apkTriangle[0].m_apkVertex[0] = &rkTetra.m_apkVertex[0];
    rkTetra.m_apkTriangle[0].m_apkVertex[1] = &rkTetra.m_apkVertex[2];
    rkTetra.m_apkTriangle[0].m_apkVertex[2] = &rkTetra.m_apkVertex[1];
    rkTetra.m_apkTriangle[0].m_apkEdge[0] = &rkTetra.m_apkEdge[2];
    rkTetra.m_apkTriangle[0].m_apkEdge[1] = &rkTetra.m_apkEdge[1];
    rkTetra.m_apkTriangle[0].m_apkEdge[2] = &rkTetra.m_apkEdge[0];
    rkTetra.m_apkTriangle[0].m_apkAdjacent[0] = &rkTetra.m_apkTriangle[3];
    rkTetra.m_apkTriangle[0].m_apkAdjacent[1] = &rkTetra.m_apkTriangle[2];
    rkTetra.m_apkTriangle[0].m_apkAdjacent[2] = &rkTetra.m_apkTriangle[1];

    rkTetra.m_apkTriangle[1].m_apkVertex[0] = &rkTetra.m_apkVertex[0];
    rkTetra.m_apkTriangle[1].m_apkVertex[1] = &rkTetra.m_apkVertex[1];
    rkTetra.m_apkTriangle[1].m_apkVertex[2] = &rkTetra.m_apkVertex[3];
    rkTetra.m_apkTriangle[1].m_apkEdge[0] = &rkTetra.m_apkEdge[0];
    rkTetra.m_apkTriangle[1].m_apkEdge[1] = &rkTetra.m_apkEdge[4];
    rkTetra.m_apkTriangle[1].m_apkEdge[2] = &rkTetra.m_apkEdge[3];
    rkTetra.m_apkTriangle[1].m_apkAdjacent[0] = &rkTetra.m_apkTriangle[0];
    rkTetra.m_apkTriangle[1].m_apkAdjacent[1] = &rkTetra.m_apkTriangle[2];
    rkTetra.m_apkTriangle[1].m_apkAdjacent[2] = &rkTetra.m_apkTriangle[3];

    rkTetra.m_apkTriangle[2].m_apkVertex[0] = &rkTetra.m_apkVertex[1];
    rkTetra.m_apkTriangle[2].m_apkVertex[1] = &rkTetra.m_apkVertex[2];
    rkTetra.m_apkTriangle[2].m_apkVertex[2] = &rkTetra.m_apkVertex[3];
    rkTetra.m_apkTriangle[2].m_apkEdge[0] = &rkTetra.m_apkEdge[1];
    rkTetra.m_apkTriangle[2].m_apkEdge[1] = &rkTetra.m_apkEdge[5];
    rkTetra.m_apkTriangle[2].m_apkEdge[2] = &rkTetra.m_apkEdge[4];
    rkTetra.m_apkTriangle[2].m_apkAdjacent[0] = &rkTetra.m_apkTriangle[0];
    rkTetra.m_apkTriangle[2].m_apkAdjacent[1] = &rkTetra.m_apkTriangle[3];
    rkTetra.m_apkTriangle[2].m_apkAdjacent[2] = &rkTetra.m_apkTriangle[1];

    rkTetra.m_apkTriangle[3].m_apkVertex[0] = &rkTetra.m_apkVertex[0];
    rkTetra.m_apkTriangle[3].m_apkVertex[1] = &rkTetra.m_apkVertex[3];
    rkTetra.m_apkTriangle[3].m_apkVertex[2] = &rkTetra.m_apkVertex[2];
    rkTetra.m_apkTriangle[3].m_apkEdge[0] = &rkTetra.m_apkEdge[3];
    rkTetra.m_apkTriangle[3].m_apkEdge[1] = &rkTetra.m_apkEdge[5];
    rkTetra.m_apkTriangle[3].m_apkEdge[2] = &rkTetra.m_apkEdge[2];
    rkTetra.m_apkTriangle[3].m_apkAdjacent[0] = &rkTetra.m_apkTriangle[1];
    rkTetra.m_apkTriangle[3].m_apkAdjacent[1] = &rkTetra.m_apkTriangle[2];
    rkTetra.m_apkTriangle[3].m_apkAdjacent[2] = &rkTetra.m_apkTriangle[0];

    // For testing purposes, but not necessary for the algorithm.  This
    // allows the display program to show the subdivision structure.
    for (int i = 0; i < 6; i++)
        rkTetra.m_apkEdge[i].m_uiStep = 0;
}
//---------------------------------------------------------------------------
void CreateOctahedron (MgcQuadricSurface::ConvexPolyhedron& rkOct)
{
    rkOct.m_iNumVertices = 6;
    rkOct.m_apkVertex = new MgcQuadricSurface::Vertex[6];
    rkOct.m_iNumEdges = 12;
    rkOct.m_apkEdge = new MgcQuadricSurface::Edge[12];
    rkOct.m_iNumTriangles = 8;
    rkOct.m_apkTriangle = new MgcQuadricSurface::Triangle[8];

    // vertices
    rkOct.m_apkVertex[0].m_pkPoint = new MgcVector3;
    rkOct.m_apkVertex[0].m_pkPoint->x = 0.0;
    rkOct.m_apkVertex[0].m_pkPoint->y = 0.0;
    rkOct.m_apkVertex[0].m_pkPoint->z = 1.0;
    rkOct.m_apkVertex[0].m_iNumEdges = 4;
    rkOct.m_apkVertex[0].m_apkEdge = new MgcQuadricSurface::Edge*[4];
    rkOct.m_apkVertex[0].m_apkEdge[0] = &rkOct.m_apkEdge[0];
    rkOct.m_apkVertex[0].m_apkEdge[1] = &rkOct.m_apkEdge[1];
    rkOct.m_apkVertex[0].m_apkEdge[2] = &rkOct.m_apkEdge[2];
    rkOct.m_apkVertex[0].m_apkEdge[3] = &rkOct.m_apkEdge[3];

    rkOct.m_apkVertex[1].m_pkPoint = new MgcVector3;
    rkOct.m_apkVertex[1].m_pkPoint->x = 1.0;
    rkOct.m_apkVertex[1].m_pkPoint->y = 0.0;
    rkOct.m_apkVertex[1].m_pkPoint->z = 0.0;
    rkOct.m_apkVertex[1].m_iNumEdges = 4;
    rkOct.m_apkVertex[1].m_apkEdge = new MgcQuadricSurface::Edge*[4];
    rkOct.m_apkVertex[1].m_apkEdge[0] = &rkOct.m_apkEdge[0];
    rkOct.m_apkVertex[1].m_apkEdge[1] = &rkOct.m_apkEdge[4];
    rkOct.m_apkVertex[1].m_apkEdge[2] = &rkOct.m_apkEdge[7];
    rkOct.m_apkVertex[1].m_apkEdge[3] = &rkOct.m_apkEdge[8];

    rkOct.m_apkVertex[2].m_pkPoint = new MgcVector3;
    rkOct.m_apkVertex[2].m_pkPoint->x = 0.0;
    rkOct.m_apkVertex[2].m_pkPoint->y = 1.0;
    rkOct.m_apkVertex[2].m_pkPoint->z = 0.0;
    rkOct.m_apkVertex[2].m_iNumEdges = 4;
    rkOct.m_apkVertex[2].m_apkEdge = new MgcQuadricSurface::Edge*[4];
    rkOct.m_apkVertex[2].m_apkEdge[0] = &rkOct.m_apkEdge[1];
    rkOct.m_apkVertex[2].m_apkEdge[1] = &rkOct.m_apkEdge[4];
    rkOct.m_apkVertex[2].m_apkEdge[2] = &rkOct.m_apkEdge[5];
    rkOct.m_apkVertex[2].m_apkEdge[3] = &rkOct.m_apkEdge[9];

    rkOct.m_apkVertex[3].m_pkPoint = new MgcVector3;
    rkOct.m_apkVertex[3].m_pkPoint->x = -1.0;
    rkOct.m_apkVertex[3].m_pkPoint->y = 0.0;
    rkOct.m_apkVertex[3].m_pkPoint->z = 0.0;
    rkOct.m_apkVertex[3].m_iNumEdges = 4;
    rkOct.m_apkVertex[3].m_apkEdge = new MgcQuadricSurface::Edge*[4];
    rkOct.m_apkVertex[3].m_apkEdge[0] = &rkOct.m_apkEdge[2];
    rkOct.m_apkVertex[3].m_apkEdge[1] = &rkOct.m_apkEdge[5];
    rkOct.m_apkVertex[3].m_apkEdge[2] = &rkOct.m_apkEdge[6];
    rkOct.m_apkVertex[3].m_apkEdge[3] = &rkOct.m_apkEdge[10];

    rkOct.m_apkVertex[4].m_pkPoint = new MgcVector3;
    rkOct.m_apkVertex[4].m_pkPoint->x = 0.0;
    rkOct.m_apkVertex[4].m_pkPoint->y = -1.0;
    rkOct.m_apkVertex[4].m_pkPoint->z = 0.0;
    rkOct.m_apkVertex[4].m_iNumEdges = 4;
    rkOct.m_apkVertex[4].m_apkEdge = new MgcQuadricSurface::Edge*[4];
    rkOct.m_apkVertex[4].m_apkEdge[0] = &rkOct.m_apkEdge[3];
    rkOct.m_apkVertex[4].m_apkEdge[1] = &rkOct.m_apkEdge[6];
    rkOct.m_apkVertex[4].m_apkEdge[2] = &rkOct.m_apkEdge[7];
    rkOct.m_apkVertex[4].m_apkEdge[3] = &rkOct.m_apkEdge[11];

    rkOct.m_apkVertex[5].m_pkPoint = new MgcVector3;
    rkOct.m_apkVertex[5].m_pkPoint->x = 0.0;
    rkOct.m_apkVertex[5].m_pkPoint->y = 0.0;
    rkOct.m_apkVertex[5].m_pkPoint->z = -1.0;
    rkOct.m_apkVertex[5].m_iNumEdges = 4;
    rkOct.m_apkVertex[5].m_apkEdge = new MgcQuadricSurface::Edge*[4];
    rkOct.m_apkVertex[5].m_apkEdge[0] = &rkOct.m_apkEdge[8];
    rkOct.m_apkVertex[5].m_apkEdge[1] = &rkOct.m_apkEdge[9];
    rkOct.m_apkVertex[5].m_apkEdge[2] = &rkOct.m_apkEdge[10];
    rkOct.m_apkVertex[5].m_apkEdge[3] = &rkOct.m_apkEdge[11];

    // edges
    rkOct.m_apkEdge[0].m_apkVertex[0] = &rkOct.m_apkVertex[0];
    rkOct.m_apkEdge[0].m_apkVertex[1] = &rkOct.m_apkVertex[1];
    rkOct.m_apkEdge[0].m_apkTriangle[0] = &rkOct.m_apkTriangle[3];
    rkOct.m_apkEdge[0].m_apkTriangle[1] = &rkOct.m_apkTriangle[0];

    rkOct.m_apkEdge[1].m_apkVertex[0] = &rkOct.m_apkVertex[0];
    rkOct.m_apkEdge[1].m_apkVertex[1] = &rkOct.m_apkVertex[2];
    rkOct.m_apkEdge[1].m_apkTriangle[0] = &rkOct.m_apkTriangle[0];
    rkOct.m_apkEdge[1].m_apkTriangle[1] = &rkOct.m_apkTriangle[1];

    rkOct.m_apkEdge[2].m_apkVertex[0] = &rkOct.m_apkVertex[0];
    rkOct.m_apkEdge[2].m_apkVertex[1] = &rkOct.m_apkVertex[3];
    rkOct.m_apkEdge[2].m_apkTriangle[0] = &rkOct.m_apkTriangle[1];
    rkOct.m_apkEdge[2].m_apkTriangle[1] = &rkOct.m_apkTriangle[2];

    rkOct.m_apkEdge[3].m_apkVertex[0] = &rkOct.m_apkVertex[0];
    rkOct.m_apkEdge[3].m_apkVertex[1] = &rkOct.m_apkVertex[4];
    rkOct.m_apkEdge[3].m_apkTriangle[0] = &rkOct.m_apkTriangle[2];
    rkOct.m_apkEdge[3].m_apkTriangle[1] = &rkOct.m_apkTriangle[3];

    rkOct.m_apkEdge[4].m_apkVertex[0] = &rkOct.m_apkVertex[1];
    rkOct.m_apkEdge[4].m_apkVertex[1] = &rkOct.m_apkVertex[2];
    rkOct.m_apkEdge[4].m_apkTriangle[0] = &rkOct.m_apkTriangle[0];
    rkOct.m_apkEdge[4].m_apkTriangle[1] = &rkOct.m_apkTriangle[4];

    rkOct.m_apkEdge[5].m_apkVertex[0] = &rkOct.m_apkVertex[2];
    rkOct.m_apkEdge[5].m_apkVertex[1] = &rkOct.m_apkVertex[3];
    rkOct.m_apkEdge[5].m_apkTriangle[0] = &rkOct.m_apkTriangle[1];
    rkOct.m_apkEdge[5].m_apkTriangle[1] = &rkOct.m_apkTriangle[5];

    rkOct.m_apkEdge[6].m_apkVertex[0] = &rkOct.m_apkVertex[3];
    rkOct.m_apkEdge[6].m_apkVertex[1] = &rkOct.m_apkVertex[4];
    rkOct.m_apkEdge[6].m_apkTriangle[0] = &rkOct.m_apkTriangle[2];
    rkOct.m_apkEdge[6].m_apkTriangle[1] = &rkOct.m_apkTriangle[6];

    rkOct.m_apkEdge[7].m_apkVertex[0] = &rkOct.m_apkVertex[4];
    rkOct.m_apkEdge[7].m_apkVertex[1] = &rkOct.m_apkVertex[1];
    rkOct.m_apkEdge[7].m_apkTriangle[0] = &rkOct.m_apkTriangle[3];
    rkOct.m_apkEdge[7].m_apkTriangle[1] = &rkOct.m_apkTriangle[7];

    rkOct.m_apkEdge[8].m_apkVertex[0] = &rkOct.m_apkVertex[1];
    rkOct.m_apkEdge[8].m_apkVertex[1] = &rkOct.m_apkVertex[5];
    rkOct.m_apkEdge[8].m_apkTriangle[0] = &rkOct.m_apkTriangle[7];
    rkOct.m_apkEdge[8].m_apkTriangle[1] = &rkOct.m_apkTriangle[4];

    rkOct.m_apkEdge[9].m_apkVertex[0] = &rkOct.m_apkVertex[2];
    rkOct.m_apkEdge[9].m_apkVertex[1] = &rkOct.m_apkVertex[5];
    rkOct.m_apkEdge[9].m_apkTriangle[0] = &rkOct.m_apkTriangle[4];
    rkOct.m_apkEdge[9].m_apkTriangle[1] = &rkOct.m_apkTriangle[5];

    rkOct.m_apkEdge[10].m_apkVertex[0] = &rkOct.m_apkVertex[3];
    rkOct.m_apkEdge[10].m_apkVertex[1] = &rkOct.m_apkVertex[5];
    rkOct.m_apkEdge[10].m_apkTriangle[0] = &rkOct.m_apkTriangle[5];
    rkOct.m_apkEdge[10].m_apkTriangle[1] = &rkOct.m_apkTriangle[6];

    rkOct.m_apkEdge[11].m_apkVertex[0] = &rkOct.m_apkVertex[4];
    rkOct.m_apkEdge[11].m_apkVertex[1] = &rkOct.m_apkVertex[5];
    rkOct.m_apkEdge[11].m_apkTriangle[0] = &rkOct.m_apkTriangle[6];
    rkOct.m_apkEdge[11].m_apkTriangle[1] = &rkOct.m_apkTriangle[7];

    // triangles
    rkOct.m_apkTriangle[0].m_apkVertex[0] = &rkOct.m_apkVertex[0];
    rkOct.m_apkTriangle[0].m_apkVertex[1] = &rkOct.m_apkVertex[1];
    rkOct.m_apkTriangle[0].m_apkVertex[2] = &rkOct.m_apkVertex[2];
    rkOct.m_apkTriangle[0].m_apkEdge[0] = &rkOct.m_apkEdge[0];
    rkOct.m_apkTriangle[0].m_apkEdge[1] = &rkOct.m_apkEdge[4];
    rkOct.m_apkTriangle[0].m_apkEdge[2] = &rkOct.m_apkEdge[1];
    rkOct.m_apkTriangle[0].m_apkAdjacent[0] = &rkOct.m_apkTriangle[3];
    rkOct.m_apkTriangle[0].m_apkAdjacent[1] = &rkOct.m_apkTriangle[4];
    rkOct.m_apkTriangle[0].m_apkAdjacent[2] = &rkOct.m_apkTriangle[1];

    rkOct.m_apkTriangle[1].m_apkVertex[0] = &rkOct.m_apkVertex[0];
    rkOct.m_apkTriangle[1].m_apkVertex[1] = &rkOct.m_apkVertex[2];
    rkOct.m_apkTriangle[1].m_apkVertex[2] = &rkOct.m_apkVertex[3];
    rkOct.m_apkTriangle[1].m_apkEdge[0] = &rkOct.m_apkEdge[1];
    rkOct.m_apkTriangle[1].m_apkEdge[1] = &rkOct.m_apkEdge[5];
    rkOct.m_apkTriangle[1].m_apkEdge[2] = &rkOct.m_apkEdge[2];
    rkOct.m_apkTriangle[1].m_apkAdjacent[0] = &rkOct.m_apkTriangle[0];
    rkOct.m_apkTriangle[1].m_apkAdjacent[1] = &rkOct.m_apkTriangle[5];
    rkOct.m_apkTriangle[1].m_apkAdjacent[2] = &rkOct.m_apkTriangle[2];

⌨️ 快捷键说明

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