[20] 鼓状物(Drum)图形的生成算法
顶点数据的生成
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)图形的生成算法相关推荐
- [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 ...
- [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 ...
- [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页珍藏版)>请在人人文库网上搜索 ...
- 计算机图形学期末复习之第四章:基本图形生成算法
可能这会是图形学期末复习最后一个整理了, 感觉其实不如直接看PPT. 1.填空20+选择20+判断10+简答20+综合30 2.没有编程题 3.复习PPT上的基本概念和算法 计算机图形学期末复习之第四 ...
- 图形算法:圆形生成算法
图形算法:圆形生成算法 标签(空格分隔): 算法 版本:2 作者:陈小默 声明:禁止商用,禁止转载 发布于:作业部落.CSDN博客 圆的定义为所有距离中心位置 (xc,yc) 为定值 r 的点的集合1 ...
最新文章
- eclipse常用插件介绍
- 斯坦福2018 AI指数报告出炉:DL职位需求两年增长35倍
- UA OPTI501 电磁波8 麦克斯韦方程边界条件的推导
- C语言经典算法100例-037-给10个数排序
- OO实现ALV TABLE 一:最简单的ALV显示
- sdn体系的三个平面_软件定义网络基础---SDN控制平面
- 东方文学网新进作品【2】
- 请不要做浮躁的嵌入式系统工程师(谨以此文与大家共勉)
- 命令重置_学个简单命令,一秒重置账户密码
- 技术分析之OGNL表达式概述
- 简用计算机,你真的会使用“计算器”吗?
- opc读取ab的plc数据_使用OPC的模式去连接PLC进行AB SLC-5_04数据的采集
- [软件应用]常用软件名录
- 微软拼音输入法 设置双拼 及全双拼切换
- 【设计】资料合集(1-121)副业学习会
- C#与C++混合编程及性能分析
- 从“傻X”到牛X——写在最前面的话
- Qt sender()用法详解
- 2014南京甲骨文实习生面试
- Tableau 2020.2版本如何做环形图
热门文章
- 接口自动化测试(Python+Requests+Unittest)
- 一线城市BAT名企软件测试职位解析,有什么样的技术要求?
- 判断double_深入解析单例模式之懒汉模式---Double-Check及volatile关键字
- python display方法_在Python中縮放和顯示圖像的最快方法是什么?
- github 搜索_如何通过GitHub快速的搜索资源?
- Windows修改hosts
- ajax跨越html,ajax跨域的解决方案
- java里氏替换原则例子_java 设计原则(六)里氏替换原则
- 3.7.4 - Indexing and Slicing Strings
- linux+gpio+嵌入式,嵌入式Linux系统中对GPIO操作的方法总结