Direct3D学习(一):3D Sierpinski镂垫绘制

自己几何也太差劲了,时间都花在计算坐标位置上了

图片附件: 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);
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏全沾开发(huā)

总结CSS3新特性(Transform篇)

总结CSS3新特性(Transform篇) 概述: CSS3新添加的Transform可以改变元素在可视化区域的坐标(这种改变不会引起...

3487
来自专栏Python小屋

Python实现批量图片添加数字水印

之前写过一个类似的代码,是把水印信息打散以后随机添加到原图中,并提供了水印信息的提取功能,请参考:Python实现图像空域随机水印加入与提取。本文代码功能:为指...

4483
来自专栏电光石火

HTML条件注释判断浏览器及检验

<!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--> <!--[if IE]> 所有的IE可识别 <![endif]--> ...

4209
来自专栏肖洒的博客

OpenCV学习笔记(Python)

警告: 就算图像的路径是错的, OpenCV 也不会提醒你的,但是当你使用命 令print img时得到的结果是None。

1.9K3
来自专栏Python疯子

Python 简单实现标签词云

基于Python的词云生成类库,很好用,而且功能强大.博主个人比较推荐 github:https://github.com/amueller/word_clo...

5381
来自专栏练小习的专栏

SVG图形绘制入门第一弹

之前很长一段时间,我是不重视SVG的,认为他就是在AI里画画,然后导出来做个矢量图标。直到我在上家公司遇到图表的绘制,因为不会写不得已而拿插件实现,而插件绘制的...

3137
来自专栏Android开发经验

属性动画实现控件类似贝塞尔曲线轨迹移动效果

1282
来自专栏finleyMa

ant design源码分析 2 Grid栅格

4984
来自专栏IMWeb前端团队

如何使用 CSS Grid 布局 IOS11 新的控制中心

本文作者:IMWeb 结一 原文出处:IMWeb社区 未经同意,禁止转载 昨天 IOS11 就可以开始安装更新了,下图就是它带来的新的控制中心界面,是...

1976
来自专栏hbbliyong

代码创建 WPF 旋转、翻转动画(汇总)

先建立一个button <Button Width="80" Height="60" Content="旋转" Name="trans" Cl...

3194

扫码关注云+社区

领取腾讯云代金券