[2] 立方体(Box)图形的生成算法
顶点数据的生成
bool YfBuildBoxVertices
(
Yreal extentX,
Yreal extentY,
Yreal extentZ,
YeOriginPose originPose,
Yuint vertexStriding,
Yuint vertexPos,
void* pVerticesBuffer
)
{
if (!pVerticesBuffer)
{
return false;
} Yuint numVertices = ; // 顶点赋值
char* vertexPtr = (char*)pVerticesBuffer + vertexPos; YsVector3* curVertexPtr = NULL;
YsVector3* curNormalPtr = NULL;
YsVector2* curTexcoordPtr = NULL; Yuint nOffset = ; YsVector3 vOriginOffset(-extentX / , -extentY / , -extentZ / );
if (originPose == YE_ORIGIN_POSE_TOP)
{
vOriginOffset.y = -extentY;
}
else if (originPose == YE_ORIGIN_POSE_BOTTOM)
{
vOriginOffset.y = 0.0f;
} for (Yuint k = ; k < ; k++)
{
for (Yuint j = ; j < ; j++)
{
for (Yuint i = ; i < ; i++)
{
nOffset = (k* + j* + i) * vertexStriding;
curVertexPtr = (YsVector3*)(vertexPtr + nOffset);
curVertexPtr->x = extentX*i + vOriginOffset.x;
curVertexPtr->z = extentZ*j + vOriginOffset.z;
curVertexPtr->y = extentY*k + vOriginOffset.y;
}
}
} return true;
}
三角形索引数据的生成
bool YfBuildBoxTriIndices
(
YeIndexType indexType,
Yuint indexStriding,
Yuint indexPos,
void* pTriIndicesBuffer
)
{
if (!pTriIndicesBuffer)
{
return false;
} char* indexPtr = (char*)pTriIndicesBuffer + indexPos;
if (indexType == YE_INDEX_16_BIT)
{
YsTriIndex16* triIndexPtr[];
for (Yuint i = ; i < ; i++)
{
triIndexPtr[i] = (YsTriIndex16*)(indexPtr + i * indexStriding);
} // bottom
triIndexPtr[]->index0 = ; triIndexPtr[]->index1 = ; triIndexPtr[]->index2 = ;
triIndexPtr[]->index0 = ; triIndexPtr[]->index1 = ; triIndexPtr[]->index2 = ; // top
triIndexPtr[]->index0= ; triIndexPtr[]->index1= ; triIndexPtr[]->index2= ;
triIndexPtr[]->index0= ; triIndexPtr[]->index1= ; triIndexPtr[]->index2= ; // front side
triIndexPtr[]->index0 = ; triIndexPtr[]->index1 = ; triIndexPtr[]->index2 = ;
triIndexPtr[]->index0 = ; triIndexPtr[]->index1 = ; triIndexPtr[]->index2 = ; // back side
triIndexPtr[]->index0 = ; triIndexPtr[]->index1 = ; triIndexPtr[]->index2 = ;
triIndexPtr[]->index0 = ; triIndexPtr[]->index1 = ; triIndexPtr[]->index2 = ; // right side
triIndexPtr[]->index0 = ; triIndexPtr[]->index1 = ; triIndexPtr[]->index2 = ;
triIndexPtr[]->index0 = ; triIndexPtr[]->index1 = ; triIndexPtr[]->index2 = ; // left side
triIndexPtr[]->index0 = ; triIndexPtr[]->index1 = ; triIndexPtr[]->index2 = ;
triIndexPtr[]->index0 = ; triIndexPtr[]->index1 = ; triIndexPtr[]->index2 = ;
}
else
{
YsTriIndex32* triIndexPtr[];
for (Yuint i = ; i < ; i++)
{
triIndexPtr[i] = (YsTriIndex32*)(indexPtr + i * indexStriding);
} // bottom
triIndexPtr[]->index0 = ; triIndexPtr[]->index1 = ; triIndexPtr[]->index2 = ;
triIndexPtr[]->index0 = ; triIndexPtr[]->index1 = ; triIndexPtr[]->index2 = ; // top
triIndexPtr[]->index0= ; triIndexPtr[]->index1= ; triIndexPtr[]->index2= ;
triIndexPtr[]->index0= ; triIndexPtr[]->index1= ; triIndexPtr[]->index2= ; // front side
triIndexPtr[]->index0 = ; triIndexPtr[]->index1 = ; triIndexPtr[]->index2 = ;
triIndexPtr[]->index0 = ; triIndexPtr[]->index1 = ; triIndexPtr[]->index2 = ; // back side
triIndexPtr[]->index0 = ; triIndexPtr[]->index1 = ; triIndexPtr[]->index2 = ;
triIndexPtr[]->index0 = ; triIndexPtr[]->index1 = ; triIndexPtr[]->index2 = ; // right side
triIndexPtr[]->index0 = ; triIndexPtr[]->index1 = ; triIndexPtr[]->index2 = ;
triIndexPtr[]->index0 = ; triIndexPtr[]->index1 = ; triIndexPtr[]->index2 = ; // left side
triIndexPtr[]->index0 = ; triIndexPtr[]->index1 = ; triIndexPtr[]->index2 = ;
triIndexPtr[]->index0 = ; triIndexPtr[]->index1 = ; triIndexPtr[]->index2 = ;
} return true;
}
线框索引数据的生成
bool YfBuildBoxWireIndices
(
YeIndexType indexType,
Yuint indexStriding,
Yuint indexPos,
void* pWireIndicesBuffer
)
{
if (!pWireIndicesBuffer)
{
return false;
} char* indexPtr = (char*)pWireIndicesBuffer + indexPos;
if (indexType == YE_INDEX_16_BIT)
{
YsLineIndex16* lineIndexPtr[];
for (Yuint i = ; i < ; i++)
{
lineIndexPtr[i] = (YsLineIndex16*)(indexPtr + i * indexStriding);
} // bottom
lineIndexPtr[]->index0 = ; lineIndexPtr[]->index1 = ;
lineIndexPtr[]->index0 = ; lineIndexPtr[]->index1 = ;
lineIndexPtr[]->index0 = ; lineIndexPtr[]->index1 = ;
lineIndexPtr[]->index0 = ; lineIndexPtr[]->index1 = ; // center
lineIndexPtr[]->index0 = ; lineIndexPtr[]->index1 = ;
lineIndexPtr[]->index0 = ; lineIndexPtr[]->index1 = ;
lineIndexPtr[]->index0 = ; lineIndexPtr[]->index1 = ;
lineIndexPtr[]->index0 = ; lineIndexPtr[]->index1 = ; // top
lineIndexPtr[]->index0 = ; lineIndexPtr[]->index1 = ;
lineIndexPtr[]->index0 = ; lineIndexPtr[]->index1 = ;
lineIndexPtr[]->index0= ; lineIndexPtr[]->index1= ;
lineIndexPtr[]->index0= ; lineIndexPtr[]->index1= ;
}
else
{
YsLineIndex32* lineIndexPtr[];
for (Yuint i = ; i < ; i++)
{
lineIndexPtr[i] = (YsLineIndex32*)(indexPtr + i * indexStriding);
} // bottom
lineIndexPtr[]->index0 = ; lineIndexPtr[]->index1 = ;
lineIndexPtr[]->index0 = ; lineIndexPtr[]->index1 = ;
lineIndexPtr[]->index0 = ; lineIndexPtr[]->index1 = ;
lineIndexPtr[]->index0 = ; lineIndexPtr[]->index1 = ; // center
lineIndexPtr[]->index0 = ; lineIndexPtr[]->index1 = ;
lineIndexPtr[]->index0 = ; lineIndexPtr[]->index1 = ;
lineIndexPtr[]->index0 = ; lineIndexPtr[]->index1 = ;
lineIndexPtr[]->index0 = ; lineIndexPtr[]->index1 = ; // top
lineIndexPtr[]->index0 = ; lineIndexPtr[]->index1 = ;
lineIndexPtr[]->index0 = ; lineIndexPtr[]->index1 = ;
lineIndexPtr[]->index0= ; lineIndexPtr[]->index1= ;
lineIndexPtr[]->index0= ; lineIndexPtr[]->index1= ;
} return true;
}
[2] 立方体(Box)图形的生成算法的更多相关文章
- [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 ...
- [16] 螺旋面(Spire)图形的生成算法
顶点数据的生成 bool YfBuildSpireVertices ( Yreal radius, Yreal assistRadius, Yreal height, Yuint slices, Yu ...
- [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 ...
随机推荐
- 微信公众号开发--用.Net Core实现微信消息加解密
1.进入微信公众号后台设置微信服务器配置参数(注意:Token和EncodingAESKey必须和微信服务器验证参数保持一致,不然验证不会通过). 2.设置为安全模式 3.代码实现(主要分为验证接口和 ...
- 010 secondary namenode(同步元数据和日志)
1.格式化 首先格式化之后只剩下一个根目录. 格式化后会出现元数据 集群启动之后,元数据放在内存中的(消耗内存中) 格式化后会产生镜像文件fsimage,元数据存储 启动的时候namenode会读取镜 ...
- 16bit C & ASM 如何混合编译?
起源: 今天在看以前没看完的一本书<图形程序开发人员指南>,在做里面的例子. 第一章就出问题了,一个例子“L1_2.c, L1_3.asm" ,这是C程序和ASM汇编程序的混合编 ...
- PHP验证时有用的几段代码
1.htmlspecialchars() htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体.预定义的字符是: & (和号) 成为 & " ( ...
- VMware安装CentOS7教程
首先安装VM,VM破解版和激活版的百度有很多,随意下载一个 下载CentOS7 地址1:https://mirrors.btte.net/centos/7/isos/x86_64/ 地址2:http: ...
- Bomb HDU 3555 dp状态转移
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3555 题意: 给出一个正整数N,求出1~N中含有数字“49”的数的个数 思路: 采用数位dp的状态转移方程 ...
- python的可变与不可变数据类型
<python的可变与不可变数据类型> python与C/C++不一样,它的变量使用有自己的特点,当初学python的时候,一定要记住“一切皆为对象,一切皆为对象的引用”这句话,其 ...
- redis keys 命令
## 删除存在的key del key ## 序列体弱给定key,并返回被序列化的值 dump key ## 检查key是否存在 exists key ## 为给定key设置过期时间 expire k ...
- 【堆优化Dijkstra+字典序最短路方案】HDU1385-Minimum Transport Cost
[题目大意] 给出邻接矩阵以及到达各个点需要付出的代价(起点和终点没有代价),求出从给定起点到终点的最短路,并输出字典序最小的方案. [思路] 在堆优化Dijkstra中,用pre记录前驱.如果新方案 ...
- OpenGL和GLSL版本更迭
前言 最近才发现,自己写的glsl和教程的glsl版本对不上,一直以为是xcode不允许使用太高版本,只能使用OpenGL 2.0的版本,却不知使用glfw可以使用到最新的OpenGL版本.