顶点数据的生成

  1. bool YfBuildSpireVertices
  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 < || slices < || !pVerticesBuffer)
  15. {
  16. return false;
  17. }
  18.  
  19. Yuint numVertices = + stacks * ;
  20. //Yuint numTriangles = stacks * 2;
  21.  
  22. char* vertexPtr = (char*)pVerticesBuffer + vertexPos;
  23. YsVector3* curVertexPtr = NULL;
  24. Yuint nOffset = ;
  25.  
  26. Yreal originOffsetY = 0.0f;
  27. if (originPose == YE_ORIGIN_POSE_TOP)
  28. {
  29. originOffsetY = -height;
  30. }
  31. else if (originPose == YE_ORIGIN_POSE_CENTER)
  32. {
  33. originOffsetY = -height * 0.5f;
  34. }
  35.  
  36. Yreal fAngle = YD_REAL_TWAIN_PI / slices;
  37.  
  38. Yreal angleXZ;
  39. Yreal posX, posZ;
  40. for (Yuint i = ; i <= stacks; i++)
  41. {
  42. angleXZ = i * fAngle;
  43. posX = yf_sin(angleXZ);
  44. posZ = yf_cos(angleXZ);
  45. nOffset = i * * vertexStriding;
  46.  
  47. curVertexPtr = (YsVector3*)(vertexPtr + nOffset);
  48. curVertexPtr->x = assistRadius * posX;
  49. curVertexPtr->y = height * i * 1.0f / stacks + originOffsetY;
  50. curVertexPtr->z = assistRadius * posZ;
  51.  
  52. nOffset += vertexStriding;
  53.  
  54. curVertexPtr = (YsVector3*)(vertexPtr + nOffset);
  55. curVertexPtr->x = radius * posX;
  56. curVertexPtr->y = height * i * 1.0f / stacks + originOffsetY;
  57. curVertexPtr->z = radius * posZ;
  58. }
  59.  
  60. return true;
  61. }

三角形索引数据的生成

  1. bool YfBuildSpireTriIndices
  2. (
  3. Yuint stacks,
  4. YeIndexType indexType,
  5. Yuint indexStriding,
  6. Yuint indexPos,
  7. void* pTriIndicesBuffer
  8. )
  9. {
  10. if (stacks < || !pTriIndicesBuffer)
  11. {
  12. return false;
  13. }
  14.  
  15. Yuint numVertices = + stacks * ;
  16. Yuint numTriangles = stacks * ;
  17. if (indexType == YE_INDEX_16_BIT &&
  18. numVertices > YD_MAX_UNSIGNED_INT16)
  19. {
  20. return false;
  21. }
  22.  
  23. // 索引赋值
  24. char* indexPtr = (char*)pTriIndicesBuffer + indexPos;
  25. Yuint nOffset = ;
  26. if (indexType == YE_INDEX_16_BIT)
  27. {
  28. YsTriIndex16* triIndexPtr = NULL;
  29. for (Yuint i = ; i < stacks; i++)
  30. {
  31. nOffset = * i * indexStriding;
  32. triIndexPtr = (YsTriIndex16*)(indexPtr + nOffset);
  33. triIndexPtr->index0 = i*;
  34. triIndexPtr->index1 = i* + ;
  35. triIndexPtr->index2 = i* + ;
  36.  
  37. nOffset += indexStriding;
  38. triIndexPtr = (YsTriIndex16*)(indexPtr + nOffset);
  39. triIndexPtr->index0 = i*;
  40. triIndexPtr->index1 = i* + ;
  41. triIndexPtr->index2 = i* + ;
  42. }
  43. }
  44. else
  45. {
  46. YsTriIndex32* triIndexPtr = NULL;
  47. for (Yuint i = ; i < stacks; i++)
  48. {
  49. nOffset = * i * indexStriding;
  50. triIndexPtr = (YsTriIndex32*)(indexPtr + nOffset);
  51. triIndexPtr->index0 = i*;
  52. triIndexPtr->index1 = i* + ;
  53. triIndexPtr->index2 = i* + ;
  54.  
  55. nOffset += indexStriding;
  56. triIndexPtr = (YsTriIndex32*)(indexPtr + nOffset);
  57. triIndexPtr->index0 = i*;
  58. triIndexPtr->index1 = i* + ;
  59. triIndexPtr->index2 = i* + ;
  60. }
  61. }
  62.  
  63. return true;
  64. }

线框索引数据的生成

  1. bool YfBuildSpireWireIndices
  2. (
  3. Yuint stacks,
  4. YeIndexType indexType,
  5. Yuint indexStriding,
  6. Yuint indexPos,
  7. void* pWireIndicesBuffer
  8. )
  9. {
  10. if (stacks < || !pWireIndicesBuffer)
  11. {
  12. return false;
  13. }
  14.  
  15. Yuint numVertices = + stacks * ;
  16. Yuint numLines = + stacks * ;
  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 = ;
  26. if (indexType == YE_INDEX_16_BIT)
  27. {
  28. YsLineIndex16* lineIndexPtr = NULL;
  29. for (Yuint i = ; i < stacks; i++)
  30. {
  31. nOffset = (i * ) * indexStriding;
  32. lineIndexPtr = (YsLineIndex16*)(indexPtr + nOffset);
  33. lineIndexPtr->index0 = i * ;
  34. lineIndexPtr->index1 = i * + ;
  35.  
  36. nOffset += indexStriding;
  37. lineIndexPtr = (YsLineIndex16*)(indexPtr + nOffset);
  38. lineIndexPtr->index0 = i * + ;
  39. lineIndexPtr->index1 = i * ;
  40.  
  41. nOffset += indexStriding;
  42. lineIndexPtr = (YsLineIndex16*)(indexPtr + nOffset);
  43. lineIndexPtr->index0 = i * + ;
  44. lineIndexPtr->index1 = i * + ;
  45. }
  46.  
  47. nOffset = (stacks * ) * indexStriding;
  48. lineIndexPtr = (YsLineIndex16*)(indexPtr + nOffset);
  49. lineIndexPtr->index0 = stacks * ;
  50. lineIndexPtr->index1 = stacks * + ;
  51. }
  52. else
  53. {
  54. YsLineIndex32* lineIndexPtr = NULL;
  55. for (Yuint i = ; i < stacks; i++)
  56. {
  57. nOffset = (i * ) * indexStriding;
  58. lineIndexPtr = (YsLineIndex32*)(indexPtr + nOffset);
  59. lineIndexPtr->index0 = i * ;
  60. lineIndexPtr->index1 = i * + ;
  61.  
  62. nOffset += indexStriding;
  63. lineIndexPtr = (YsLineIndex32*)(indexPtr + nOffset);
  64. lineIndexPtr->index0 = i * + ;
  65. lineIndexPtr->index1 = i * ;
  66.  
  67. nOffset += indexStriding;
  68. lineIndexPtr = (YsLineIndex32*)(indexPtr + nOffset);
  69. lineIndexPtr->index0 = i * + ;
  70. lineIndexPtr->index1 = i * + ;
  71. }
  72.  
  73. nOffset = (stacks * ) * indexStriding;
  74. lineIndexPtr = (YsLineIndex32*)(indexPtr + nOffset);
  75. lineIndexPtr->index0 = stacks * ;
  76. lineIndexPtr->index1 = stacks * + ;
  77. }
  78.  
  79. return true;
  80. }

[16] 螺旋面(Spire)图形的生成算法的更多相关文章

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

    顶点数据的生成 bool YfBuildDrumVertices ( Yreal radius, Yreal assistRadius, Yuint slices, Yuint stacks, YeO ...

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

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

  3. [19] 半球形(Hemisphere)图形的生成算法

    顶点数据的生成 bool YfBuildHemisphereVertices ( Yreal radius, Yuint slices, Yuint stacks, YeOriginPose orig ...

  4. [18] 螺旋楼梯(Spiral Stairs)图形的生成算法

    顶点数据的生成 bool YfBuildSpiralStairsVertices ( Yreal radius, Yreal assistRadius, Yreal height, Yuint sli ...

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

    顶点数据的生成 bool YfBuildStarVertices ( Yreal radius, Yreal assistRadius, Yreal height, Yuint slices, YeO ...

  6. [14] 齿轮(Gear Wheel)图形的生成算法

    顶点数据的生成 bool YfBuildGearwheelVertices ( Yreal radius, Yreal assistRadius, Yreal height, Yuint slices ...

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

    顶点数据的生成 bool YfBuildArcVertices ( Yreal radius, Yreal degree, Yreal height, Yuint slices, Yuint stac ...

  8. [12] 扇形体(Fan)图形的生成算法

    顶点数据的生成 bool YfBuildFunVertices ( Yreal radius, Yreal degree, Yreal height, Yuint slices, YeOriginPo ...

  9. [11] 楔形体(Wedge)图形的生成算法

    顶点数据的生成 bool YfBuildWedgeVertices ( Yreal width, Yreal length, Yreal height, YeOriginPose originPose ...

随机推荐

  1. ifdown eth0或service network restart

    错误提示信息如下: Shutting down interface eth0:  Error: Device 'eth0' (/org/freedesktop/NetworkManager/Devic ...

  2. poj1703 Find them, Catch them(带权并查集)

    题目链接 http://poj.org/problem?id=1703 题意 有两个帮派:龙帮和蛇帮,两个帮派共有n个人(编号1~n),输入m组数据,每组数据为D [a][b]或A [a][b],D[ ...

  3. Hadoop整理三(Hadoop分布式计算框架MapReduce)

    一.概念 MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算.概念"Map(映射)"和"Reduce(归约)",是它们的主要思想.它极大 ...

  4. 使用Swing的JSpinner组件设置日期时间选择器

    代码: //获得时间日期模型 SpinnerDateModel model = new SpinnerDateModel(); //获得JSPinner对象 JSpinner year = new J ...

  5. 《Playing hard exploration games by watching YouTube》论文解读

    论文链接 油管链接 一.摘要   当环境奖励特别稀疏的时候,强化学习方法通常很难训练(traditionally struggle).一个有效的方式是通过人类示范者(human demonstrato ...

  6. MySQL 类型转换

    1.问题描述 在项目中遇到要将Int类型转为Char类型,然后利用转化后的Char类型进行模糊查询. 例:合同编号在数据库中为int类型 8066 用利用 806 模糊查询出合同编号为8066数据记录 ...

  7. leetcode 202. 快乐数 python实现

    思想: 对输入数据 把每个位数平方求和 得到结果如果是1 就返回真 否则 对这个结果递归 啥时候事后返回假: 返回假 说明进入无限循环了. 啥时候会无限循环? 某一次求平方和的结果,之前得到过这个结果 ...

  8. Linux驱动程序中的并发控制

    <临界区> a:对共享资源进行访问的代码称为临界区.   <原子操作>     a:原子操作用于执行轻量级,仅仅执行一次的的操作比如修改计数器,有条件的增加值,设置某一位.所谓 ...

  9. 批量将Java源代码文件的编码从GBK转为UTF-8

    主要参考: http://blog.csdn.net/liu_qiqi/article/details/38706497 使用common io批量将java编码从GBK转UTF-8 http://w ...

  10. 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 ...