[18] 螺旋楼梯(Spiral Stairs)图形的生成算法
顶点数据的生成
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)图形的生成算法相关推荐
- [17] 楼梯(Stairs)图形的生成算法
感觉这图形怎么看怎么像搓衣板. 顶点数据的生成 bool YfBuildStairsVertices (Yreal width, Yreal length, Yreal height, Yuint s ...
- [20] 鼓状物(Drum)图形的生成算法
顶点数据的生成 1 bool YfBuildDrumVertices 2 ( 3 Yreal radius, 4 Yreal assistRadius, 5 Yuint slices, 6 Yuint ...
- [16] 螺旋面(Spire)图形的生成算法
顶点数据的生成 1 bool YfBuildSpireVertices 2 ( 3 Yreal radius, 4 Yreal assistRadius, 5 Yreal height, 6 Yuin ...
- [15] 星星(Star)图形的生成算法
顶点数据的生成 1 bool YfBuildStarVertices 2 ( 3 Yreal radius, 4 Yreal assistRadius, 5 Yreal height, 6 Yuint ...
- [13] 弧面(Arc)图形的生成算法
顶点数据的生成 1 bool YfBuildArcVertices 2 ( 3 Yreal radius, 4 Yreal degree, 5 Yreal height, 6 Yuint slices ...
- 3D几何图形的生成算法
在之前的博客上,发布了一个我写的3D几何图形生成的DEMO: http://www.cnblogs.com/WhyEngine/p/3415040.html DEMO下载地址: http://file ...
- 计算机地图制图原理与算法,计算机地图制图原理与方法-基本图形生成算法.ppt...
<计算机地图制图原理与方法-基本图形生成算法.ppt>由会员分享,可在线阅读,更多相关<计算机地图制图原理与方法-基本图形生成算法.ppt(35页珍藏版)>请在人人文库网上搜索 ...
- 图形算法:圆形生成算法
图形算法:圆形生成算法 标签(空格分隔): 算法 版本:2 作者:陈小默 声明:禁止商用,禁止转载 发布于:作业部落.CSDN博客 圆的定义为所有距离中心位置 (xc,yc) 为定值 r 的点的集合1 ...
- 计算机图形生成的基本单位是,第五章 基本图形生成算法
如何在指定的输出设备上根据坐标描述构造基本二维几何图形(点.直线.圆.椭圆.多边形域.字符串及其相关属性等). 图形生成的概念 图形的生成:是在指定的输出设备上,根据坐标描述构造二维几何图形. 图形的 ...
最新文章
- #029 博客换个主题从新开始
- 攻防世界Reverse第二题insanity
- PHP中的else怎么用,php中ifelse与elseif使用区别实例介绍
- horizon client长时间不操作不断开_动挡操作禁忌,伤车只在一瞬间!否则变速箱会提前...
- HTML/CSS——PC端QQ飞车官网首页
- SAP UI5是如何从浏览器读取语言设置并按照优先级排序的
- 分布式存储MooseFS的搭建
- 自制hdmi线一头改vga图_东莞VGA数据线厂商价格
- 此设备不允许更改其写入高速缓存设置_优化SiT15xx驱动器设置32 kHz晶体输入低功耗MCU程序设计细节(一)...
- linux 监控系统资源-内存
- BZOJ1114 : [POI2008]鲁滨逊逃生Rob
- 性能服务器可以同时标注吗,服务器上有内存标注
- Python编程之求100以内的素数
- HTML5期末大作业:小说网页设计——在线阅读7页(代码质量好) 学生DW网页设计作业源码 web课程设计网页规划与设计
- Myeclipse2017破解:成功解决me Trial expired 0 days ago mgeclipse It's now time to buy the best IDE for yo
- Opencv2与Opencv4共存
- Vue 实现电子签名
- 【Unity3D开发小游戏】《超级马里奥游戏》Unity开发教程
- 如何实现VMware下Ubuntu和Windows之间的复制粘贴?
- 利用Rustlings对Rust语言进行学习