114 lines
4.3 KiB
C
114 lines
4.3 KiB
C
/***********************************************************************************************************************
|
|
*
|
|
* Copyright (c) 2010 - 2025 by Tech Soft 3D, Inc.
|
|
* The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., and considered a trade secret
|
|
* as defined under civil and criminal statutes. Tech Soft 3D shall pursue its civil and criminal remedies in the event
|
|
* of unauthorized use or misappropriation of its trade secrets. Use of this information by anyone other than authorized
|
|
* employees of Tech Soft 3D, Inc. is granted only under a written non-disclosure agreement, expressly prescribing the
|
|
* scope and manner of such use.
|
|
*
|
|
***********************************************************************************************************************/
|
|
/**
|
|
* Sample CreatePRCCubes
|
|
* file CreateTessellatedCubes.cpp
|
|
* This file is containing the data and function used to create PRC Tessellation.
|
|
*
|
|
* fillCubeTessBaseData is filling the structure A3DTessBaseData
|
|
* A3DTessBaseData is the structure containing the coordinates of the tessellation.
|
|
*
|
|
* fillCubeTessData is filling the structure A3DTess3DData
|
|
* A3DTess3DData is the structure describing the coordinates from A3DTessBaseData
|
|
* It contains indexes of vertex coordinates, wire frames coordinates, normals and textures coordinates.
|
|
*
|
|
*
|
|
***********************************************************************************************************************/
|
|
#pragma once
|
|
|
|
#include "CreatePRCCubesDef.h"
|
|
|
|
//######################################################################################################################
|
|
//Cube tessellation data
|
|
|
|
static A3DDouble stCubePoints[24] = {
|
|
-1, -1, 1,
|
|
1, -1, 1,
|
|
-1, 1, 1,
|
|
1, 1, 1,
|
|
-1, 1, -1,
|
|
1, 1, -1,
|
|
-1, -1, -1,
|
|
1, -1, -1
|
|
};
|
|
|
|
static A3DDouble stCubeNormals[18] = {
|
|
1., 0., 0.,
|
|
-1., 0., 0.,
|
|
0., 1., 0.,
|
|
0., -1., 0.,
|
|
0., 0., 1.,
|
|
0., 0., -1.
|
|
};
|
|
|
|
static A3DDouble stCubeUV[8] = {
|
|
0.0, 0.0,
|
|
1.0, 0.0,
|
|
0.0, 1.0,
|
|
1.0, 1.0
|
|
// U V
|
|
};
|
|
|
|
#define ADD_FACE_COLOR
|
|
|
|
|
|
static A3DUns32 stCubeFacesNormalPTrianglesUV[72] =
|
|
{
|
|
//72 buffer count
|
|
// N, P, N, P, N, P, N, P, N, P, N, P
|
|
12, 0, 12, 3, 12, 6, 12, 6, 12, 3, 12, 9, // Face 0
|
|
6, 6, 6, 9, 6, 12, 6, 12, 6, 9, 6, 15, // Face 1
|
|
15, 12, 15, 15, 15, 18, 15, 18, 15, 15, 15, 21, // ....
|
|
9, 18, 9, 21, 9, 0, 9, 0, 9, 21, 9, 3,
|
|
0, 3, 0, 21, 0, 9, 0, 9, 0, 21, 0, 15,
|
|
3, 18, 3, 0, 3, 12, 3, 12, 3, 0, 3, 6, // Face N
|
|
};
|
|
|
|
// N = normal index
|
|
// U = UV index
|
|
// P = point coordinates index
|
|
static A3DUns32 stTexturedCubeFacesNormalPTrianglesUV[108] = {
|
|
12, 0, 0, 12, 2, 3, 12, 4, 6, 12, 4, 6, 12, 2, 3, 12, 6, 9, //Face0
|
|
6, 0, 6, 6, 2, 9, 6, 4, 12, 6, 4, 12, 6, 2, 9, 6, 6, 15, //Face1
|
|
15, 6, 12, 15, 4, 15, 15, 2, 18, 15, 2, 18, 15, 4, 15, 15, 0, 21, //....
|
|
9, 0, 18, 9, 2, 21, 9, 4, 0, 9, 4, 0, 9, 2, 21, 9, 6, 3,
|
|
0, 0, 3, 0, 2, 21, 0, 4, 9, 0, 4, 9, 0, 2, 21, 0, 6, 15,
|
|
3, 0, 18, 3, 2, 0, 3, 4, 12, 3, 4, 12, 3, 2, 0, 3, 6, 6 //FaceN
|
|
/*
|
|
N,U,P N,U,P N,U,P N,U,P N,U,P N,U,P Face 0
|
|
\ first triangle / \ second triangle /
|
|
N,U,P N,U,P N,U,P N,U,P N,U,P N,U,P Face 1
|
|
N,U,P N,U,P N,U,P N,U,P N,U,P N,U,P Face 2
|
|
N,U,P N,U,P N,U,P N,U,P N,U,P N,U,P ...
|
|
N,U,P N,U,P N,U,P N,U,P N,U,P N,U,P Face N
|
|
*/
|
|
};
|
|
|
|
static A3DUns32 stCubeFacesWireframe[48] = {
|
|
0, 3, 3, 9, 9, 6, 6, 0,/* Face 0 */
|
|
6, 9, 9, 15, 15, 12, 12, 6,/* Face 1 */
|
|
12, 15, 15, 21, 21, 18, 18, 12,/* .... */
|
|
18, 21, 21, 3, 3, 0, 0, 18,
|
|
3, 21, 21, 15, 15, 9, 9, 3,
|
|
18, 0, 0, 6, 6, 12, 12, 18 /* Face N */
|
|
/* E1 E2 E3 E4 edges */
|
|
};
|
|
|
|
|
|
//######################################################################################################################
|
|
void fillCubeTessBaseData(A3DTessBaseData& sTessBaseData, A3DDouble cubeWidth, A3DDouble cubeHeight, A3DDouble cubeLength);
|
|
void freeTessBaseData(A3DTessBaseData& sTessBaseData);
|
|
|
|
//######################################################################################################################
|
|
void fillCubeTessData(A3DTess3DData& sTess3DData, A3DUns32* puiStyleIndex = NULL);
|
|
void freeTess3DData(A3DTess3DData& sTess3DData);
|
|
|