顶点数据的生成

 1 bool   YfBuildDrumVertices
 2 (
 3     Yreal                   radius,
 4     Yreal                   assistRadius,
 5     Yuint                   slices,
 6     Yuint                   stacks,
 7     YeOriginPose            originPose,
 8     Yuint                   vertexStriding,
 9     Yuint                   vertexPos,
10     void*                   pVerticesBuffer
11 )
12 {
13     if (slices < 2 || stacks < 3 || !pVerticesBuffer)
14     {
15         return false;
16     }
17
18     Yuint numVertices  = slices * stacks + 2;
19
20     // 顶点赋值
21     char* vertexPtr   = (char*)pVerticesBuffer + vertexPos;
22     YsVector3* curVertexPtr   = NULL;
23     Yuint nOffset = 0;
24
25     Yreal originOffsetY = 0.0f;
26     if (originPose == YE_ORIGIN_POSE_TOP)
27     {
28         originOffsetY = -radius;
29     }
30     else if (originPose == YE_ORIGIN_POSE_BOTTOM)
31     {
32         originOffsetY = radius;
33     }
34
35     Yreal* pSinList = YD_NEW_ARRAY(Yreal, slices);
36     Yreal* pCosList = YD_NEW_ARRAY(Yreal, slices);
37     Yreal angleXZ;
38     for (Yuint j = 0; j < slices; j++)
39     {
40         angleXZ = YD_REAL_TWAIN_PI * j / slices;
41         pSinList[j] = yf_sin(angleXZ);
42         pCosList[j] = yf_cos(angleXZ);
43     }
44
45     // 赋值
46     {
47         // 第一个顶点
48         {
49             nOffset = 0;
50             curVertexPtr = (YsVector3*)(vertexPtr + nOffset);
51             curVertexPtr->x = 0.0f;
52             curVertexPtr->y = radius + originOffsetY;
53             curVertexPtr->z = 0.0f;
54         }
55
56         // 最后一个顶点
57         {
58             nOffset = (numVertices - 1) * vertexStriding;
59             curVertexPtr = (YsVector3*)(vertexPtr + nOffset);
60             curVertexPtr->x = 0.0f;
61             curVertexPtr->y = -radius + originOffsetY;
62             curVertexPtr->z = 0.0f;
63         }
64
65         for (Yuint i = 0; i < stacks; i++)
66         {
67             Yreal angleY = YD_REAL_PI * i / (stacks - 1);
68             Yreal posY = radius * yf_cos(angleY);
69             Yreal radiusXZ = assistRadius + radius * yf_sin(angleY);
70             Yreal posX, posZ;
71
72             for (Yuint j = 0; j < slices; j++)
73             {
74                 posX = radiusXZ * pSinList[j];
75                 posZ = radiusXZ * pCosList[j];
76                 nOffset = (i * slices + j + 1) * vertexStriding;
77                 curVertexPtr = (YsVector3*)(vertexPtr + nOffset);
78                 curVertexPtr->x = posX;
79                 curVertexPtr->y = posY + originOffsetY;
80                 curVertexPtr->z = posZ;
81             }
82         }
83     }
84
85     YD_SAFE_DELETE_ARRAY(pSinList);
86     YD_SAFE_DELETE_ARRAY(pCosList);
87
88     return true;
89 }

三角形索引数据的生成和线框索引数据的生成算法与球的类似

 1 bool   YfBuildDrumTriIndices
 2 (
 3     Yuint                   slices,
 4     Yuint                   stacks,
 5     YeIndexType             indexType,
 6     Yuint                   indexStriding,
 7     Yuint                   indexPos,
 8     void*                   pTriIndicesBuffer
 9 )
10 {
11     return YfBuildSphereTriIndices(
12         slices,
13         stacks + 2,
14         indexType,
15         indexStriding,
16         indexPos,
17         pTriIndicesBuffer);
18 }
19
20 bool   YfBuildDrumWireIndices
21 (
22     Yuint                   slices,
23     Yuint                   stacks,
24     YeIndexType             indexType,
25     Yuint                   indexStriding,
26     Yuint                   indexPos,
27     void*                   pWireIndicesBuffer
28 )
29 {
30     return YfBuildSphereWireIndices(
31         slices,
32         stacks + 2,
33         indexType,
34         indexStriding,
35         indexPos,
36         pWireIndicesBuffer);
37 }

[20] 鼓状物(Drum)图形的生成算法相关推荐

  1. [17] 楼梯(Stairs)图形的生成算法

    感觉这图形怎么看怎么像搓衣板. 顶点数据的生成 bool YfBuildStairsVertices (Yreal width, Yreal length, Yreal height, Yuint s ...

  2. [16] 螺旋面(Spire)图形的生成算法

    顶点数据的生成 1 bool YfBuildSpireVertices 2 ( 3 Yreal radius, 4 Yreal assistRadius, 5 Yreal height, 6 Yuin ...

  3. [15] 星星(Star)图形的生成算法

    顶点数据的生成 1 bool YfBuildStarVertices 2 ( 3 Yreal radius, 4 Yreal assistRadius, 5 Yreal height, 6 Yuint ...

  4. [13] 弧面(Arc)图形的生成算法

    顶点数据的生成 1 bool YfBuildArcVertices 2 ( 3 Yreal radius, 4 Yreal degree, 5 Yreal height, 6 Yuint slices ...

  5. [18] 螺旋楼梯(Spiral Stairs)图形的生成算法

    顶点数据的生成 1 bool YfBuildSpiralStairsVertices 2 ( 3 Yreal radius, 4 Yreal assistRadius, 5 Yreal height, ...

  6. 3D几何图形的生成算法

    在之前的博客上,发布了一个我写的3D几何图形生成的DEMO: http://www.cnblogs.com/WhyEngine/p/3415040.html DEMO下载地址: http://file ...

  7. 计算机地图制图原理与算法,计算机地图制图原理与方法-基本图形生成算法.ppt...

    <计算机地图制图原理与方法-基本图形生成算法.ppt>由会员分享,可在线阅读,更多相关<计算机地图制图原理与方法-基本图形生成算法.ppt(35页珍藏版)>请在人人文库网上搜索 ...

  8. 计算机图形学期末复习之第四章:基本图形生成算法

    可能这会是图形学期末复习最后一个整理了, 感觉其实不如直接看PPT. 1.填空20+选择20+判断10+简答20+综合30 2.没有编程题 3.复习PPT上的基本概念和算法 计算机图形学期末复习之第四 ...

  9. 图形算法:圆形生成算法

    图形算法:圆形生成算法 标签(空格分隔): 算法 版本:2 作者:陈小默 声明:禁止商用,禁止转载 发布于:作业部落.CSDN博客 圆的定义为所有距离中心位置 (xc,yc) 为定值 r 的点的集合1 ...

最新文章

  1. eclipse常用插件介绍
  2. 斯坦福2018 AI指数报告出炉:DL职位需求两年增长35倍
  3. UA OPTI501 电磁波8 麦克斯韦方程边界条件的推导
  4. C语言经典算法100例-037-给10个数排序
  5. OO实现ALV TABLE 一:最简单的ALV显示
  6. sdn体系的三个平面_软件定义网络基础---SDN控制平面
  7. 东方文学网新进作品【2】
  8. 请不要做浮躁的嵌入式系统工程师(谨以此文与大家共勉)
  9. 命令重置_学个简单命令,一秒重置账户密码
  10. 技术分析之OGNL表达式概述
  11. 简用计算机,你真的会使用“计算器”吗?
  12. opc读取ab的plc数据_使用OPC的模式去连接PLC进行AB SLC-5_04数据的采集
  13. [软件应用]常用软件名录
  14. 微软拼音输入法 设置双拼 及全双拼切换
  15. 【设计】资料合集(1-121)副业学习会
  16. C#与C++混合编程及性能分析
  17. 从“傻X”到牛X——写在最前面的话
  18. Qt sender()用法详解
  19. 2014南京甲骨文实习生面试
  20. Tableau 2020.2版本如何做环形图

热门文章

  1. 接口自动化测试(Python+Requests+Unittest)
  2. 一线城市BAT名企软件测试职位解析,有什么样的技术要求?
  3. 判断double_深入解析单例模式之懒汉模式---Double-Check及volatile关键字
  4. python display方法_在Python中縮放和顯示圖像的最快方法是什么?
  5. github 搜索_如何通过GitHub快速的搜索资源?
  6. Windows修改hosts
  7. ajax跨越html,ajax跨域的解决方案
  8. java里氏替换原则例子_java 设计原则(六)里氏替换原则
  9. 3.7.4 - Indexing and Slicing Strings
  10. linux+gpio+嵌入式,嵌入式Linux系统中对GPIO操作的方法总结