顶点数据的生成

 bool   YfBuildDrumVertices
(
Yreal radius,
Yreal assistRadius,
Yuint slices,
Yuint stacks,
YeOriginPose originPose,
Yuint vertexStriding,
Yuint vertexPos,
void* pVerticesBuffer
)
{
if (slices < || stacks < || !pVerticesBuffer)
{
return false;
} Yuint numVertices = slices * stacks + ; // 顶点赋值
char* vertexPtr = (char*)pVerticesBuffer + vertexPos;
YsVector3* curVertexPtr = NULL;
Yuint nOffset = ; Yreal originOffsetY = 0.0f;
if (originPose == YE_ORIGIN_POSE_TOP)
{
originOffsetY = -radius;
}
else if (originPose == YE_ORIGIN_POSE_BOTTOM)
{
originOffsetY = radius;
} Yreal* pSinList = YD_NEW_ARRAY(Yreal, slices);
Yreal* pCosList = YD_NEW_ARRAY(Yreal, slices);
Yreal angleXZ;
for (Yuint j = ; j < slices; j++)
{
angleXZ = YD_REAL_TWAIN_PI * j / slices;
pSinList[j] = yf_sin(angleXZ);
pCosList[j] = yf_cos(angleXZ);
} // 赋值
{
// 第一个顶点
{
nOffset = ;
curVertexPtr = (YsVector3*)(vertexPtr + nOffset);
curVertexPtr->x = 0.0f;
curVertexPtr->y = radius + originOffsetY;
curVertexPtr->z = 0.0f;
} // 最后一个顶点
{
nOffset = (numVertices - ) * vertexStriding;
curVertexPtr = (YsVector3*)(vertexPtr + nOffset);
curVertexPtr->x = 0.0f;
curVertexPtr->y = -radius + originOffsetY;
curVertexPtr->z = 0.0f;
} for (Yuint i = ; i < stacks; i++)
{
Yreal angleY = YD_REAL_PI * i / (stacks - );
Yreal posY = radius * yf_cos(angleY);
Yreal radiusXZ = assistRadius + radius * yf_sin(angleY);
Yreal posX, posZ; for (Yuint j = ; j < slices; j++)
{
posX = radiusXZ * pSinList[j];
posZ = radiusXZ * pCosList[j];
nOffset = (i * slices + j + ) * vertexStriding;
curVertexPtr = (YsVector3*)(vertexPtr + nOffset);
curVertexPtr->x = posX;
curVertexPtr->y = posY + originOffsetY;
curVertexPtr->z = posZ;
}
}
} YD_SAFE_DELETE_ARRAY(pSinList);
YD_SAFE_DELETE_ARRAY(pCosList); return true;
}

三角形索引数据的生成和线框索引数据的生成算法与球的类似

 bool   YfBuildDrumTriIndices
(
Yuint slices,
Yuint stacks,
YeIndexType indexType,
Yuint indexStriding,
Yuint indexPos,
void* pTriIndicesBuffer
)
{
return YfBuildSphereTriIndices(
slices,
stacks + ,
indexType,
indexStriding,
indexPos,
pTriIndicesBuffer);
} bool YfBuildDrumWireIndices
(
Yuint slices,
Yuint stacks,
YeIndexType indexType,
Yuint indexStriding,
Yuint indexPos,
void* pWireIndicesBuffer
)
{
return YfBuildSphereWireIndices(
slices,
stacks + ,
indexType,
indexStriding,
indexPos,
pWireIndicesBuffer);
}

最新文章

  1. node-mysql 在4.2.0的时候遇到的错误
  2. 【java开发】方法重写和方法重载概述
  3. Sunny-ngrok 解决外网访问内网问题
  4. 各数据库查询前N条记录的SQL语句
  5. fatal: Not a valid object name: &#39;master&#39;.
  6. 安装和部署ZkeaCMS
  7. 【JNI】锅炉压力监测器
  8. 1st-code-review summary
  9. sql server 向oracle导入表
  10. 手游设备ID
  11. PyCharm设置字体
  12. TestWriter自动化测试介绍
  13. day3(while、流程控制)
  14. Redis分布式锁的正确实现方式
  15. 用U盘安装Ubuntu15.04
  16. html知识点汇总(持续更新中)
  17. 更优雅的使用Git
  18. Java开发环境安装配置
  19. linux gcc编译多个源文件的方法
  20. 特殊权限set_uid /特殊权限set_gid/特殊权限stick_bit/软链接文件/硬连接文件

热门文章

  1. php 购物车实现购物的原理
  2. MySQL 类型转换
  3. redis 发布/订阅 模式
  4. [leetcode shell]194. Transpose File
  5. BZOJ.2339.[HNOI2011]卡农(思路 DP 组合 容斥)
  6. php安装编译时 configure: error: Cannot find OpenSSL&#39;s &lt;evp.h&gt;
  7. hdu 5289 Assignment(2015多校第一场第2题)RMQ+二分(或者multiset模拟过程)
  8. [java][jboss]改变jboss部署目录(虚拟目录)
  9. Linux重新学习
  10. NOIP 2002提高组 选数 dfs/暴力