3D几何图形的生成算法

在之前的博客上,发布了一个我写的3D几何图形生成的DEMO:

http://www.cnblogs.com/WhyEngine/p/3415040.html

DEMO下载地址:

http://files.cnblogs.com/WhyEngine/GeometryDemo4.0.zip

现在要将图形生成的算法代码发布出来,将分成以下章节:

这一节先将一些宏定义和结构体的代码帖一下

类型定义

// --------------------------------------------------------------------------------------

#define YD_INLINE                       inline
#define YD_FORCE_INLINE                 __forceinline
#define YD_NULL                         0
#define YD_NONE

// --------------------------------------------------------------------------------------

typedef __int64                         Yint64;
typedef signed long                     Yint32;
typedef signed short                    Yint16;
typedef signed char                     Yint8;

typedef unsigned __int64                Yuint64;
typedef unsigned long                   Yuint32;
typedef unsigned short                  Yuint16;
typedef unsigned char                   Yuint8;

typedef unsigned long                   Ydword;
typedef unsigned short                  Yword;
typedef unsigned char                   Ybyte;

typedef float                           Yreal32;
typedef double                          Yreal64;
typedef float                           Yfloat;
typedef double                          Ydouble;

typedef Yint8                           Ychar;
typedef Yint16                          Yshort;
typedef Yint32                          Yint;
typedef Yuint32                         Yuint;
typedef Yreal32                         Yreal;

// --------------------------------------------------------------------------------------

typedef int                             Ybool; 
#define YD_FALSE                        0
#define YD_TRUE                         1

// --------------------------------------------------------------------------------------

宏定义

// --------------------------------------------------------------------------------------

#define YD_REAL_PI                      3.14159265358979f               // 圆周率
#define YD_REAL_HALF_PI                 1.57079632679490f               // PI / 2
#define YD_REAL_QUARTER_PI              0.78539816339745f               // PI / 4
#define YD_REAL_TWAIN_PI                6.28318530717958f               // PI * 2
#define YD_REAL_E                       2.71828182845905f               // e
#define YD_REAL_LOG2E                   1.44269504088896f               // log2(e)
#define YD_REAL_LOG10E                  0.43429448190325f               // log10(e)
#define YD_REAL_LN2                     0.69314718055995f               // ln(2)
#define YD_REAL_LN10                    2.30258509299405f               // ln(10)
#define YD_REAL_SQRT_2                  1.41421356237310f               // sqrt(2)
#define YD_REAL_SQRT_1_2                0.70710678118655f               // 1/sqrt(2)
#define YD_REAL_SQRT_3                  1.73205077648163f               // sqrt(3)

索引结构

// 索引类型(16位索引或32位索引)
enum YeIndexType
{
    YE_INDEX_INVALID    = 0,        
    YE_INDEX_16_BIT     = 16,
    YE_INDEX_32_BIT     = 32,
};

// --------------------------------------------------------------------------------------

// 三角面片的索引结构
struct YsTriIndex16
{
    Yuint16             index0;
    Yuint16             index1;
    Yuint16             index2;
};

struct YsTriIndex32
{
    Yuint32             index0;
    Yuint32             index1;
    Yuint32             index2;
};

// --------------------------------------------------------------------------------------

// 线的索引结构
struct YsLineIndex16
{
    Yuint16            index0;
    Yuint16            index1;
};

struct YsLineIndex32
{
    Yuint32            index0;
    Yuint32            index1;
};

 

图形类型定义

// 简单图形的类型
enum YeGraphType
{
    YE_GRAPH_INVALID        = 0,
    YE_GRAPH_PLANE          = 1,    // 平面
    YE_GRAPH_BOX            = 2,    // 立方体
    YE_GRAPH_SPHERE         = 3,    //
    YE_GRAPH_CONE           = 4,    // 圆锥
    YE_GRAPH_CYLINDER       = 5,    // 柱台
    YE_GRAPH_CAPSULE        = 6,    // 胶囊体
    YE_GRAPH_PYRAMID        = 7,    // 金字塔
    YE_GRAPH_ROUND          = 8,    // 圆面
    YE_GRAPH_RING           = 9,    // 圆环
    YE_GRAPH_PIPE           = 10,   // 圆管
    YE_GRAPH_WEDGE          = 11,   // 楔形体
    YE_GRAPH_FAN            = 12,   // 扇形体
    YE_GRAPH_ARC            = 13,   // 弧面
    YE_GRAPH_GEARWHEEL      = 14,   // 齿轮
    YE_GRAPH_STAR           = 15,   // 星星
    YE_GRAPH_SPIRE          = 16,   // 螺旋面
    YE_GRAPH_STAIRS         = 17,   // 楼梯
    YE_GRAPH_SPIRAL_STAIRS  = 18,   // 螺旋楼梯
    YE_GRAPH_HEMISPHERE     = 19,   // 半球形
    YE_GRAPH_DRUM           = 20,   // 鼓状物
};

// 模型的起始位置
enum YeOriginPose                         
{
    YE_ORIGIN_POSE_TOP      = 0,
    YE_ORIGIN_POSE_CENTER   = 1,
    YE_ORIGIN_POSE_BOTTOM   = 2
};
原文地址:https://www.cnblogs.com/WhyEngine/p/3415232.html