Direct3D学习(一):3D Sierpinski镂垫绘制
来源:互联网 发布:尼泊尔旅游攻略 知乎 编辑:程序博客网 时间:2024/04/29 07:02
自己几何也太差劲了,时间都花在计算坐标位置上了
图片附件: Sierpinski.JPG (2007-3-29 00:56, 39.68 K)
附件: D3DStudy.exe (2007-3-29 00:56, 64 K)
主要算法,就是个递归:
/**//***************************************
*三角形绘制
*vertex[3]
***************************************/
inline void DrawTriangle(CustomVertex vertex[])
...{
//拷贝到顶点缓存
memcpy(pVertices,vertex,3 * sizeof(CustomVertex));
g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,1);
}
/**//****************************************
*Sierpinski镂垫绘制
*deepth:递归深度
****************************************/
void DrawSierpinski(CustomVertex vertex[],int deepth)
...{
if(deepth == 0)
...{
DrawTriangle(vertex);
return;
}else
...{
//计算中点
CustomVertex midVertex[] =
...{
...{(vertex[1].x + vertex[2].x)/2,(vertex[1].y + vertex[2].y)/2,(vertex[1].z + vertex[2].z)/2,vertex[0].color},
...{(vertex[0].x + vertex[2].x)/2,(vertex[0].y + vertex[2].y)/2,(vertex[0].z + vertex[2].z)/2,vertex[1].color},
...{(vertex[1].x + vertex[0].x)/2,(vertex[1].y + vertex[0].y)/2,(vertex[1].z + vertex[0].z)/2,vertex[2].color}
};
CustomVertex tempVertex[3];
//分三部分进行递归绘制
tempVertex[0] = vertex[0];
tempVertex[1] = midVertex[2];
tempVertex[2] = midVertex[1];
DrawSierpinski(tempVertex,deepth - 1);
tempVertex[0] = midVertex[2];
tempVertex[1] = vertex[1];
tempVertex[2] = midVertex[0];
DrawSierpinski(tempVertex,deepth - 1);
tempVertex[0] = midVertex[1];
tempVertex[1] = midVertex[0];
tempVertex[2] = vertex[2];
DrawSierpinski(tempVertex,deepth - 1);
}
}
*三角形绘制
*vertex[3]
***************************************/
inline void DrawTriangle(CustomVertex vertex[])
...{
//拷贝到顶点缓存
memcpy(pVertices,vertex,3 * sizeof(CustomVertex));
g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,1);
}
/**//****************************************
*Sierpinski镂垫绘制
*deepth:递归深度
****************************************/
void DrawSierpinski(CustomVertex vertex[],int deepth)
...{
if(deepth == 0)
...{
DrawTriangle(vertex);
return;
}else
...{
//计算中点
CustomVertex midVertex[] =
...{
...{(vertex[1].x + vertex[2].x)/2,(vertex[1].y + vertex[2].y)/2,(vertex[1].z + vertex[2].z)/2,vertex[0].color},
...{(vertex[0].x + vertex[2].x)/2,(vertex[0].y + vertex[2].y)/2,(vertex[0].z + vertex[2].z)/2,vertex[1].color},
...{(vertex[1].x + vertex[0].x)/2,(vertex[1].y + vertex[0].y)/2,(vertex[1].z + vertex[0].z)/2,vertex[2].color}
};
CustomVertex tempVertex[3];
//分三部分进行递归绘制
tempVertex[0] = vertex[0];
tempVertex[1] = midVertex[2];
tempVertex[2] = midVertex[1];
DrawSierpinski(tempVertex,deepth - 1);
tempVertex[0] = midVertex[2];
tempVertex[1] = vertex[1];
tempVertex[2] = midVertex[0];
DrawSierpinski(tempVertex,deepth - 1);
tempVertex[0] = midVertex[1];
tempVertex[1] = midVertex[0];
tempVertex[2] = vertex[2];
DrawSierpinski(tempVertex,deepth - 1);
}
}
- Direct3D学习(一):3D Sierpinski镂垫绘制
- Introduction to 3D Game Programming with DirectX 11学习笔记 6 Direct3D中的绘制(一)
- Direct3D学习手记二:绘制简单3D物体
- Direct3D学习手记三:绘制彩色3D物体
- sierpinski镂垫程序(OpenGL C++ 3D版)
- Introduction to 3D Game Programming with DirectX 11学习笔记 6 Direct3D中的绘制(二)顶点着色器
- Introduction to 3D Game Programming with DirectX 11学习笔记 6 Direct3D中的绘制(三)像素着色器
- Introduction to 3D Game Programming with DirectX 11学习笔记 6 Direct3D中的绘制(四)渲染状态
- 3D游戏基础 Direct3D(四) 固定管线绘制图元
- 绘制2D学习一
- Quartz 2D学习(一)简单绘制图形
- 学习Direct3D(一)
- Direct3D学习笔记一
- 3D游戏基础 Direct3D(一) D3D基本概念及渲染流水线简介
- 3D游戏基础 Direct3D(一) D3D基本概念及渲染流水线简介
- 【阅读笔记之五】《DIRECTX.9.0.3D游戏开发编程基础》Direct3D中的绘制
- direct3d 3d模型模板
- OpenGL ES (一)绘制3D步骤整理
- MFC函数速查大全
- J2EE性能测试(1)
- ubuntu上root用户密码管理
- 大学生活
- 尝试RSS代理
- Direct3D学习(一):3D Sierpinski镂垫绘制
- Java 图形用户界面设计
- JSP数据库连接大全
- 使用netbeans 的五大理由
- RSS2.0中文规范
- 几种获得中英文混合字符串长度方法的性能比较
- Base64编码介绍
- SSL原理解密
- 关于最近在做的改进使用ECHO2+ROMA框架的会话管理的报告