[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 ...
随机推荐
- 跑对抗样本库 CleverHans 的例子时,遇到的问题
环境:Ubuntu+TensorFlow 首先是GPU被其他人占用了,怎么也跑不起来最简单的TensorFlow小例子. 所以先学会如何查看显卡使用情况,转去使用其他空闲显卡. Linux查看Nvid ...
- @getMapping和@postMapping,@RestController
@RequestMapping 和 @GetMapping @PostMapping 区别 @GetMapping是一个组合注解,是@RequestMapping(method = Reques ...
- Opencv学习笔记5:Opencv处理彩虹图、铜色图、灰度反转图
一.概述: 人类能够观察到的光的波长范围是有限的,并且人类视觉有一个特点,只能分辨出二十几种灰度,也就是说即使采集到的灰度图像分辨率超级高,有上百个灰度级,但是很遗憾,人们只能看出二十几个,也就是说信 ...
- 冒泡排序(初级版)之C++实现
冒泡排序(初级版)之C++实现 一.源代码:BubbleSortLow.cpp /*冒泡排序思想: 从第一个元素开始,对数组中两两相邻的元素比较,将值较小的元素放在前面,值较大的元素放在后面: 一轮比 ...
- luoguP4036 [JSOI2008]火星人 平衡树+hash
这个操作十分的复杂 但是可以拿平衡树维护 直接二分答案然后用$hash$值判断即可 复杂度$O(10000 * log^2 n + n \log n)$ #include <cstdio> ...
- bzoj 3209 数位DP+欧拉定理
枚举1的个数,统计有那么多1的数的个数 /************************************************************** Problem: 3209 Us ...
- 利用Hog特征和SVM分类器进行行人检测
在2005年CVPR上,来自法国的研究人员Navneet Dalal 和Bill Triggs提出利用Hog进行特征提取,利用线性SVM作为分类器,从而实现行人检测.而这两位也通过大量的测试发现,Ho ...
- IO流-递归删除带内容的目录
/* * 需求:递归删除带内容的目录 * * 目录:demo * ------------------------------------------------------------------- ...
- 向USB设备发送SCSI命令
http://bbs3.driverdevelop.com/simple/?t84347.html { BOOL status = ; DWORD accessMode = , shareMode = ...
- eclipse and systemtap
http://wiki.eclipse.org/Linux_Tools_Project/Systemtap/User_Guide