[16] 螺旋面(Spire)图形的生成算法
顶点数据的生成
- bool YfBuildSpireVertices
- (
- Yreal radius,
- Yreal assistRadius,
- Yreal height,
- Yuint slices,
- Yuint stacks,
- YeOriginPose originPose,
- Yuint vertexStriding,
- Yuint vertexPos,
- void* pVerticesBuffer
- )
- {
- if (stacks < || slices < || !pVerticesBuffer)
- {
- return false;
- }
- Yuint numVertices = + stacks * ;
- //Yuint numTriangles = stacks * 2;
- char* vertexPtr = (char*)pVerticesBuffer + vertexPos;
- YsVector3* curVertexPtr = NULL;
- Yuint nOffset = ;
- Yreal originOffsetY = 0.0f;
- if (originPose == YE_ORIGIN_POSE_TOP)
- {
- originOffsetY = -height;
- }
- else if (originPose == YE_ORIGIN_POSE_CENTER)
- {
- originOffsetY = -height * 0.5f;
- }
- Yreal fAngle = YD_REAL_TWAIN_PI / slices;
- Yreal angleXZ;
- Yreal posX, posZ;
- for (Yuint i = ; i <= stacks; i++)
- {
- angleXZ = i * fAngle;
- posX = yf_sin(angleXZ);
- posZ = yf_cos(angleXZ);
- nOffset = i * * vertexStriding;
- curVertexPtr = (YsVector3*)(vertexPtr + nOffset);
- curVertexPtr->x = assistRadius * posX;
- curVertexPtr->y = height * i * 1.0f / stacks + originOffsetY;
- curVertexPtr->z = assistRadius * posZ;
- nOffset += vertexStriding;
- curVertexPtr = (YsVector3*)(vertexPtr + nOffset);
- curVertexPtr->x = radius * posX;
- curVertexPtr->y = height * i * 1.0f / stacks + originOffsetY;
- curVertexPtr->z = radius * posZ;
- }
- return true;
- }
三角形索引数据的生成
- bool YfBuildSpireTriIndices
- (
- Yuint stacks,
- YeIndexType indexType,
- Yuint indexStriding,
- Yuint indexPos,
- void* pTriIndicesBuffer
- )
- {
- if (stacks < || !pTriIndicesBuffer)
- {
- return false;
- }
- Yuint numVertices = + stacks * ;
- Yuint numTriangles = stacks * ;
- if (indexType == YE_INDEX_16_BIT &&
- numVertices > YD_MAX_UNSIGNED_INT16)
- {
- return false;
- }
- // 索引赋值
- char* indexPtr = (char*)pTriIndicesBuffer + indexPos;
- Yuint nOffset = ;
- if (indexType == YE_INDEX_16_BIT)
- {
- YsTriIndex16* triIndexPtr = NULL;
- for (Yuint i = ; i < stacks; i++)
- {
- nOffset = * i * indexStriding;
- triIndexPtr = (YsTriIndex16*)(indexPtr + nOffset);
- triIndexPtr->index0 = i*;
- triIndexPtr->index1 = i* + ;
- triIndexPtr->index2 = i* + ;
- nOffset += indexStriding;
- triIndexPtr = (YsTriIndex16*)(indexPtr + nOffset);
- triIndexPtr->index0 = i*;
- triIndexPtr->index1 = i* + ;
- triIndexPtr->index2 = i* + ;
- }
- }
- else
- {
- YsTriIndex32* triIndexPtr = NULL;
- for (Yuint i = ; i < stacks; i++)
- {
- nOffset = * i * indexStriding;
- triIndexPtr = (YsTriIndex32*)(indexPtr + nOffset);
- triIndexPtr->index0 = i*;
- triIndexPtr->index1 = i* + ;
- triIndexPtr->index2 = i* + ;
- nOffset += indexStriding;
- triIndexPtr = (YsTriIndex32*)(indexPtr + nOffset);
- triIndexPtr->index0 = i*;
- triIndexPtr->index1 = i* + ;
- triIndexPtr->index2 = i* + ;
- }
- }
- return true;
- }
线框索引数据的生成
- bool YfBuildSpireWireIndices
- (
- Yuint stacks,
- YeIndexType indexType,
- Yuint indexStriding,
- Yuint indexPos,
- void* pWireIndicesBuffer
- )
- {
- if (stacks < || !pWireIndicesBuffer)
- {
- return false;
- }
- Yuint numVertices = + stacks * ;
- Yuint numLines = + stacks * ;
- if (indexType == YE_INDEX_16_BIT &&
- numVertices > YD_MAX_UNSIGNED_INT16)
- {
- return false;
- }
- // 索引赋值
- char* indexPtr = (char*)pWireIndicesBuffer + indexPos;
- Yuint nOffset = ;
- if (indexType == YE_INDEX_16_BIT)
- {
- YsLineIndex16* lineIndexPtr = NULL;
- for (Yuint i = ; i < stacks; i++)
- {
- nOffset = (i * ) * indexStriding;
- lineIndexPtr = (YsLineIndex16*)(indexPtr + nOffset);
- lineIndexPtr->index0 = i * ;
- lineIndexPtr->index1 = i * + ;
- nOffset += indexStriding;
- lineIndexPtr = (YsLineIndex16*)(indexPtr + nOffset);
- lineIndexPtr->index0 = i * + ;
- lineIndexPtr->index1 = i * ;
- nOffset += indexStriding;
- lineIndexPtr = (YsLineIndex16*)(indexPtr + nOffset);
- lineIndexPtr->index0 = i * + ;
- lineIndexPtr->index1 = i * + ;
- }
- nOffset = (stacks * ) * indexStriding;
- lineIndexPtr = (YsLineIndex16*)(indexPtr + nOffset);
- lineIndexPtr->index0 = stacks * ;
- lineIndexPtr->index1 = stacks * + ;
- }
- else
- {
- YsLineIndex32* lineIndexPtr = NULL;
- for (Yuint i = ; i < stacks; i++)
- {
- nOffset = (i * ) * indexStriding;
- lineIndexPtr = (YsLineIndex32*)(indexPtr + nOffset);
- lineIndexPtr->index0 = i * ;
- lineIndexPtr->index1 = i * + ;
- nOffset += indexStriding;
- lineIndexPtr = (YsLineIndex32*)(indexPtr + nOffset);
- lineIndexPtr->index0 = i * + ;
- lineIndexPtr->index1 = i * ;
- nOffset += indexStriding;
- lineIndexPtr = (YsLineIndex32*)(indexPtr + nOffset);
- lineIndexPtr->index0 = i * + ;
- lineIndexPtr->index1 = i * + ;
- }
- nOffset = (stacks * ) * indexStriding;
- lineIndexPtr = (YsLineIndex32*)(indexPtr + nOffset);
- lineIndexPtr->index0 = stacks * ;
- lineIndexPtr->index1 = stacks * + ;
- }
- return true;
- }
[16] 螺旋面(Spire)图形的生成算法的更多相关文章
- [20] 鼓状物(Drum)图形的生成算法
顶点数据的生成 bool YfBuildDrumVertices ( Yreal radius, Yreal assistRadius, Yuint slices, Yuint stacks, YeO ...
- [17] 楼梯(Stairs)图形的生成算法
感觉这图形怎么看怎么像搓衣板. 顶点数据的生成 bool YfBuildStairsVertices ( Yreal width, Yreal length, Yreal height, Yuint ...
- [19] 半球形(Hemisphere)图形的生成算法
顶点数据的生成 bool YfBuildHemisphereVertices ( Yreal radius, Yuint slices, Yuint stacks, YeOriginPose orig ...
- [18] 螺旋楼梯(Spiral Stairs)图形的生成算法
顶点数据的生成 bool YfBuildSpiralStairsVertices ( Yreal radius, Yreal assistRadius, Yreal height, Yuint sli ...
- [15] 星星(Star)图形的生成算法
顶点数据的生成 bool YfBuildStarVertices ( Yreal radius, Yreal assistRadius, Yreal height, Yuint slices, YeO ...
- [14] 齿轮(Gear Wheel)图形的生成算法
顶点数据的生成 bool YfBuildGearwheelVertices ( Yreal radius, Yreal assistRadius, Yreal height, Yuint slices ...
- [13] 弧面(Arc)图形的生成算法
顶点数据的生成 bool YfBuildArcVertices ( Yreal radius, Yreal degree, Yreal height, Yuint slices, Yuint stac ...
- [12] 扇形体(Fan)图形的生成算法
顶点数据的生成 bool YfBuildFunVertices ( Yreal radius, Yreal degree, Yreal height, Yuint slices, YeOriginPo ...
- [11] 楔形体(Wedge)图形的生成算法
顶点数据的生成 bool YfBuildWedgeVertices ( Yreal width, Yreal length, Yreal height, YeOriginPose originPose ...
随机推荐
- ifdown eth0或service network restart
错误提示信息如下: Shutting down interface eth0: Error: Device 'eth0' (/org/freedesktop/NetworkManager/Devic ...
- poj1703 Find them, Catch them(带权并查集)
题目链接 http://poj.org/problem?id=1703 题意 有两个帮派:龙帮和蛇帮,两个帮派共有n个人(编号1~n),输入m组数据,每组数据为D [a][b]或A [a][b],D[ ...
- Hadoop整理三(Hadoop分布式计算框架MapReduce)
一.概念 MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算.概念"Map(映射)"和"Reduce(归约)",是它们的主要思想.它极大 ...
- 使用Swing的JSpinner组件设置日期时间选择器
代码: //获得时间日期模型 SpinnerDateModel model = new SpinnerDateModel(); //获得JSPinner对象 JSpinner year = new J ...
- 《Playing hard exploration games by watching YouTube》论文解读
论文链接 油管链接 一.摘要 当环境奖励特别稀疏的时候,强化学习方法通常很难训练(traditionally struggle).一个有效的方式是通过人类示范者(human demonstrato ...
- MySQL 类型转换
1.问题描述 在项目中遇到要将Int类型转为Char类型,然后利用转化后的Char类型进行模糊查询. 例:合同编号在数据库中为int类型 8066 用利用 806 模糊查询出合同编号为8066数据记录 ...
- leetcode 202. 快乐数 python实现
思想: 对输入数据 把每个位数平方求和 得到结果如果是1 就返回真 否则 对这个结果递归 啥时候事后返回假: 返回假 说明进入无限循环了. 啥时候会无限循环? 某一次求平方和的结果,之前得到过这个结果 ...
- Linux驱动程序中的并发控制
<临界区> a:对共享资源进行访问的代码称为临界区. <原子操作> a:原子操作用于执行轻量级,仅仅执行一次的的操作比如修改计数器,有条件的增加值,设置某一位.所谓 ...
- 批量将Java源代码文件的编码从GBK转为UTF-8
主要参考: http://blog.csdn.net/liu_qiqi/article/details/38706497 使用common io批量将java编码从GBK转UTF-8 http://w ...
- Codeforces Round #256 (Div. 2) E Divisors
E. Divisors Bizon the Champion isn't just friendly, he also is a rigorous coder. Let's define functi ...