[15] 星星(Star)图形的生成算法
顶点数据的生成
1 bool YfBuildStarVertices 2 ( 3 Yreal radius, 4 Yreal assistRadius, 5 Yreal height, 6 Yuint slices, 7 YeOriginPose originPose, 8 Yuint vertexStriding, 9 Yuint vertexPos, 10 void* pVerticesBuffer 11 ) 12 { 13 if (slices < 2 || !pVerticesBuffer) 14 { 15 return false; 16 } 17 18 Yuint numVertices = (slices*2) + 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 = -height; 29 } 30 else if (originPose == YE_ORIGIN_POSE_CENTER) 31 { 32 originOffsetY = -height * 0.5f; 33 } 34 35 // 顶赋值 36 { 37 nOffset = 0; 38 curVertexPtr = (YsVector3*)(vertexPtr + nOffset); 39 curVertexPtr->x = 0.0f; 40 curVertexPtr->y = height + originOffsetY; 41 curVertexPtr->z = 0.0f; 42 } 43 44 // 底赋值 45 { 46 nOffset = (numVertices - 1) * vertexStriding; 47 curVertexPtr = (YsVector3*)(vertexPtr + nOffset); 48 curVertexPtr->x = 0.0f; 49 curVertexPtr->y = originOffsetY; 50 curVertexPtr->z = 0.0f; 51 } 52 53 Yreal angleXZ; 54 Yreal posX, posZ; 55 Yreal fRadius; 56 for (Yuint i = 0; i < 2*slices; i++) 57 { 58 angleXZ = YD_REAL_TWAIN_PI * i / (slices*2); 59 posX = yf_sin(angleXZ); 60 posZ = yf_cos(angleXZ); 61 fRadius = (i%2 == 0) ? radius : assistRadius; 62 63 nOffset = (1 + i) * vertexStriding; 64 curVertexPtr = (YsVector3*)(vertexPtr + nOffset); 65 curVertexPtr->x = fRadius * posX; 66 curVertexPtr->y = originOffsetY; 67 curVertexPtr->z = fRadius * posZ; 68 } 69 70 return true; 71 }
三角形索引数据的生成
1 bool YfBuildStarTriIndices 2 ( 3 Yuint slices, 4 YeIndexType indexType, 5 Yuint indexStriding, 6 Yuint indexPos, 7 void* pTriIndicesBuffer 8 ) 9 { 10 if (slices < 2 || !pTriIndicesBuffer) 11 { 12 return false; 13 } 14 15 Yuint numVertices = slices*2 + 2; 16 if (indexType == YE_INDEX_16_BIT && 17 numVertices > YD_MAX_UNSIGNED_INT16) 18 { 19 return false; 20 } 21 Yuint numTriangles = slices * 4; 22 23 // 索引赋值 24 char* indexPtr = (char*)pTriIndicesBuffer + indexPos; 25 Yuint nOffset = 0; 26 if (indexType == YE_INDEX_16_BIT) 27 { 28 YsTriIndex16* triIndexPtr = NULL; 29 for (Yuint i = 0; i < 2 * slices; i++) 30 { 31 nOffset = (i * 2) * indexStriding; 32 triIndexPtr = (YsTriIndex16*)(indexPtr + nOffset); 33 triIndexPtr->index0 = 0; 34 triIndexPtr->index1 = 1 + i; 35 triIndexPtr->index2 = 1 + (i + 1) % (2*slices); 36 37 nOffset += indexStriding; 38 triIndexPtr = (YsTriIndex16*)(indexPtr + nOffset); 39 triIndexPtr->index0 = numVertices - 1; 40 triIndexPtr->index1 = 1 + (i + 1) % (2*slices); 41 triIndexPtr->index2 = 1 + i; 42 } 43 } 44 else 45 { 46 YsTriIndex32* triIndexPtr = NULL; 47 for (Yuint i = 0; i < 2 * slices; i++) 48 { 49 nOffset = (i * 2) * indexStriding; 50 triIndexPtr = (YsTriIndex32*)(indexPtr + nOffset); 51 triIndexPtr->index0 = 0; 52 triIndexPtr->index1 = 1 + i; 53 triIndexPtr->index2 = 1 + (i + 1) % (2*slices); 54 55 nOffset += indexStriding; 56 triIndexPtr = (YsTriIndex32*)(indexPtr + nOffset); 57 triIndexPtr->index0 = numVertices - 1; 58 triIndexPtr->index1 = 1 + (i + 1) % (2*slices); 59 triIndexPtr->index2 = 1 + i; 60 } 61 } 62 63 return true; 64 }
线框索引数据的生成
1 bool YfBuildStarWireIndices 2 ( 3 Yuint slices, 4 YeIndexType indexType, 5 Yuint indexStriding, 6 Yuint indexPos, 7 void* pWireIndicesBuffer 8 ) 9 { 10 if (slices < 2 || !pWireIndicesBuffer) 11 { 12 return false; 13 } 14 15 Yuint numVertices = slices*2 + 2; 16 Yuint numLines = slices * 5; 17 if (indexType == YE_INDEX_16_BIT && 18 numVertices > YD_MAX_UNSIGNED_INT16) 19 { 20 return false; 21 } 22 23 // 索引赋值 24 char* indexPtr = (char*)pWireIndicesBuffer + indexPos; 25 Yuint nOffset = 0; 26 if (indexType == YE_INDEX_16_BIT) 27 { 28 YsLineIndex16* lineIndexPtr = NULL; 29 for (Yuint i = 0; i < 2 * slices; i++) 30 { 31 nOffset = (i * 2) * indexStriding; 32 lineIndexPtr = (YsLineIndex16*)(indexPtr + nOffset); 33 lineIndexPtr->index0 = 0; 34 lineIndexPtr->index1 = 1 + i; 35 36 nOffset += indexStriding; 37 lineIndexPtr = (YsLineIndex16*)(indexPtr + nOffset); 38 lineIndexPtr->index0 = 1 + i; 39 lineIndexPtr->index1 = 1 + (i + 1)%(slices*2); 40 } 41 42 Yuint half = 4 * slices * indexStriding; 43 for (Yuint i = 0; i < slices; i++) 44 { 45 nOffset = half + i * indexStriding; 46 lineIndexPtr = (YsLineIndex16*)(indexPtr + nOffset); 47 lineIndexPtr->index0 = numVertices - 1; 48 lineIndexPtr->index1 = 1 + i*2 + 1; 49 } 50 } 51 else 52 { 53 YsLineIndex32* lineIndexPtr = NULL; 54 for (Yuint i = 0; i < 2 * slices; i++) 55 { 56 nOffset = (i * 2) * indexStriding; 57 lineIndexPtr = (YsLineIndex32*)(indexPtr + nOffset); 58 lineIndexPtr->index0 = 0; 59 lineIndexPtr->index1 = 1 + i; 60 61 nOffset += indexStriding; 62 lineIndexPtr = (YsLineIndex32*)(indexPtr + nOffset); 63 lineIndexPtr->index0 = 1 + i; 64 lineIndexPtr->index1 = 1 + (i + 1)%(slices*2); 65 } 66 67 Yuint half = 4 * slices * indexStriding; 68 for (Yuint i = 0; i < slices; i++) 69 { 70 nOffset = half + i * indexStriding; 71 lineIndexPtr = (YsLineIndex32*)(indexPtr + nOffset); 72 lineIndexPtr->index0 = numVertices - 1; 73 lineIndexPtr->index1 = 1 + i*2 + 1; 74 } 75 } 76 77 return true; 78 }
转载于:https://www.cnblogs.com/WhyEngine/p/3415257.html
[15] 星星(Star)图形的生成算法相关推荐
- [20] 鼓状物(Drum)图形的生成算法
顶点数据的生成 1 bool YfBuildDrumVertices 2 ( 3 Yreal radius, 4 Yreal assistRadius, 5 Yuint slices, 6 Yuint ...
- [17] 楼梯(Stairs)图形的生成算法
感觉这图形怎么看怎么像搓衣板. 顶点数据的生成 bool YfBuildStairsVertices (Yreal width, Yreal length, Yreal height, Yuint s ...
- [16] 螺旋面(Spire)图形的生成算法
顶点数据的生成 1 bool YfBuildSpireVertices 2 ( 3 Yreal radius, 4 Yreal assistRadius, 5 Yreal height, 6 Yuin ...
- [13] 弧面(Arc)图形的生成算法
顶点数据的生成 1 bool YfBuildArcVertices 2 ( 3 Yreal radius, 4 Yreal degree, 5 Yreal height, 6 Yuint slices ...
- [18] 螺旋楼梯(Spiral Stairs)图形的生成算法
顶点数据的生成 1 bool YfBuildSpiralStairsVertices 2 ( 3 Yreal radius, 4 Yreal assistRadius, 5 Yreal height, ...
- 3D几何图形的生成算法
在之前的博客上,发布了一个我写的3D几何图形生成的DEMO: http://www.cnblogs.com/WhyEngine/p/3415040.html DEMO下载地址: http://file ...
- 计算机地图制图原理与算法,计算机地图制图原理与方法-基本图形生成算法.ppt...
<计算机地图制图原理与方法-基本图形生成算法.ppt>由会员分享,可在线阅读,更多相关<计算机地图制图原理与方法-基本图形生成算法.ppt(35页珍藏版)>请在人人文库网上搜索 ...
- 图形算法:圆形生成算法
图形算法:圆形生成算法 标签(空格分隔): 算法 版本:2 作者:陈小默 声明:禁止商用,禁止转载 发布于:作业部落.CSDN博客 圆的定义为所有距离中心位置 (xc,yc) 为定值 r 的点的集合1 ...
- 计算机图形生成的基本单位是,第五章 基本图形生成算法
如何在指定的输出设备上根据坐标描述构造基本二维几何图形(点.直线.圆.椭圆.多边形域.字符串及其相关属性等). 图形生成的概念 图形的生成:是在指定的输出设备上,根据坐标描述构造二维几何图形. 图形的 ...
最新文章
- Android UI设计与开发】第03期:引导界面(三)仿微信引导界面以及动画效果
- 用lisp编写串口助手源代码_实战用python来写个串口助手--界面篇
- .NET全栈开发工程师学习路径
- 网络:窗口控制下的重发机制、流量控制
- 【Java每日一题】20170309
- sharding-jdbc整合mybatis
- java json删除节点_指定json的某个节点进行增、删、改
- 前端学习(1339):mongodb更新数据文档
- 又是一年毕业高峰期,分享下我的2年工作经验
- 小米组织架构再调整:手机部成立参谋部 朱磊出任参谋长
- Linux pid_t 类型的定义
- android jni示例_Android动画示例
- spark 连接mysql读取数据
- 我的U盘,在某台机器上所有文件大小为0
- 人力资源管理系统HRMS 天下三分 煮酒论英雄
- PHP实现微信网页登陆授权开发
- php 格林尼治标准时间,PHP函数第18款:返回格林威治标准时间MyDate
- python爬虫学习-scrapy爬取链家房源信息并存储
- DDD的创新思想:开发即设计思想
- 数字货币智能合约的概念与演变