顶点数据的生成

 1 bool                        YfBuildSpiralStairsVertices
 2 (
 3     Yreal                   radius,
 4     Yreal                   assistRadius,
 5     Yreal                   height,
 6     Yuint                   slices,
 7     Yuint                   stacks,
 8     YeOriginPose            originPose,
 9     Yuint                   vertexStriding,
10     Yuint                   vertexPos,
11     void*                   pVerticesBuffer
12 )
13 {
14     if (stacks < 1 || slices < 3 || !pVerticesBuffer)
15     {
16         return false;
17     }
18     Yuint numVertices  = 2 + stacks * 4;
19     //Yuint numTriangles = stacks * 8;
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 = -height;
29     }
30     else if (originPose == YE_ORIGIN_POSE_CENTER)
31     {
32         originOffsetY = -height * 0.5f;
33     }
34
35     Yreal fStepTexcoord = 1.0f / (stacks - 1);
36     Yreal fStepHeight = height / stacks;
37     Yreal fStepAngle = YD_REAL_TWAIN_PI / slices;
38
39     Yreal angleXZ;
40     Yreal posX, posZ;
41     for (Yuint i = 0; i <= stacks; i++)
42     {
43         angleXZ = i * fStepAngle;
44         posX = yf_sin(angleXZ);
45         posZ = yf_cos(angleXZ);
46
47         nOffset = i * 4 * vertexStriding;
48         curVertexPtr = (YsVector3*)(vertexPtr + nOffset);
49         curVertexPtr->x = radius * posX;
50         curVertexPtr->y = i * fStepHeight + originOffsetY;
51         curVertexPtr->z = radius * posZ;
52
53         nOffset += vertexStriding;
54         curVertexPtr = (YsVector3*)(vertexPtr + nOffset);
55         curVertexPtr->x = assistRadius * posX;
56         curVertexPtr->y = i * fStepHeight + originOffsetY;
57         curVertexPtr->z = assistRadius * posZ;
58
59         if (i == stacks)
60         {
61             continue;
62         }
63
64         nOffset += vertexStriding;
65         curVertexPtr = (YsVector3*)(vertexPtr + nOffset);
66         curVertexPtr->x = radius * posX;
67         curVertexPtr->y = (i+1) * fStepHeight + originOffsetY;
68         curVertexPtr->z = radius * posZ;
69
70         nOffset += vertexStriding;
71         curVertexPtr = (YsVector3*)(vertexPtr + nOffset);
72         curVertexPtr->x = assistRadius * posX;
73         curVertexPtr->y = (i+1) * fStepHeight + originOffsetY;
74         curVertexPtr->z = assistRadius * posZ;
75     }
76
77     return true;
78 }

三角形索引数据的生成和线框索引数据的生成与楼梯的生成方式一样

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

转载于:https://my.oschina.net/abcijkxyz/blog/722714

[18] 螺旋楼梯(Spiral Stairs)图形的生成算法相关推荐

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

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

  2. [20] 鼓状物(Drum)图形的生成算法

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 计算机图形生成的基本单位是,第五章 基本图形生成算法

    如何在指定的输出设备上根据坐标描述构造基本二维几何图形(点.直线.圆.椭圆.多边形域.字符串及其相关属性等). 图形生成的概念 图形的生成:是在指定的输出设备上,根据坐标描述构造二维几何图形. 图形的 ...

最新文章

  1. #029 博客换个主题从新开始
  2. 攻防世界Reverse第二题insanity
  3. PHP中的else怎么用,php中ifelse与elseif使用区别实例介绍
  4. horizon client长时间不操作不断开_动挡操作禁忌,伤车只在一瞬间!否则变速箱会提前...
  5. HTML/CSS——PC端QQ飞车官网首页
  6. SAP UI5是如何从浏览器读取语言设置并按照优先级排序的
  7. 分布式存储MooseFS的搭建
  8. 自制hdmi线一头改vga图_东莞VGA数据线厂商价格
  9. 此设备不允许更改其写入高速缓存设置_优化SiT15xx驱动器设置32 kHz晶体输入低功耗MCU程序设计细节(一)...
  10. linux 监控系统资源-内存
  11. BZOJ1114 : [POI2008]鲁滨逊逃生Rob
  12. 性能服务器可以同时标注吗,服务器上有内存标注
  13. Python编程之求100以内的素数
  14. HTML5期末大作业:小说网页设计——在线阅读7页(代码质量好) 学生DW网页设计作业源码 web课程设计网页规划与设计
  15. Myeclipse2017破解:成功解决me Trial expired 0 days ago mgeclipse It's now time to buy the best IDE for yo
  16. Opencv2与Opencv4共存
  17. Vue 实现电子签名
  18. 【Unity3D开发小游戏】《超级马里奥游戏》Unity开发教程
  19. 如何实现VMware下Ubuntu和Windows之间的复制粘贴?
  20. 利用Rustlings对Rust语言进行学习

热门文章

  1. linux下的符号链接文件
  2. vue中使用sha1加密
  3. QQ超市最优路径寻路研究
  4. 实验室管理系统 分享
  5. Hadoop集群搭建详细步骤大全
  6. UE4_IFmaterial 通过红色通道渲染4个色块
  7. 《计算机网络》复习总结 四、网络层
  8. java获取json数组格式中的值
  9. 计算机软件都打不开了,我的电脑的所有软件都打不开了,请问怎么回事?能解决么???...
  10. 服务器版本信息泄露修改iis,IIS攻击与安全加固实例分析 -电脑资料