3D金字塔图(2)

以前画过一个金字塔图,效果不是很好(有兴趣的话可以看看我的博客http://blog.csdn.net/chyuanrufeng/article/details/76473056)。这次这个是从另外一个角度观察的,配色自行修改。效果如下:
这里写图片描述

核心代码:

void test1::drawPyramid3( QPainter &painter )
{
    int w = width();
    int h = height();
    int x= w/2;


    QPointF toppoint(x,h*0.2); 
    QPointF midbottompoint(x,h*0.9); 
    QPointF leftbottompoint(w*0.2,h*0.85); 
    QPointF rightbottompoint(w*0.8,h*0.85); 

    int laycount = 4;
    int hsetp = (leftbottompoint.y()-toppoint.y())/laycount;
    float wsetp = (rightbottompoint.x() - leftbottompoint.x())/2; 

    for (int i = laycount ; i > 0; --i)
    {
        float bpy = (midbottompoint.y() - toppoint.y())*i/laycount;
        float tpy = (midbottompoint.y() - toppoint.y())*0.9/laycount;
        QPointF tmpmidbp(x,toppoint.y()+bpy);  //底中间点 
        QPointF tmpmidtp(x,toppoint.y()+bpy-tpy);  //上部中间点

        float txw = wsetp*i*0.95/laycount ;
        float hlength = hsetp*i;
        QPointF tmpleftbp(x-txw, toppoint.y() + hlength);  //底部左侧点
        QPointF tmprightbp(x+txw,toppoint.y() + hlength); //底部右侧点

        txw = wsetp*(i-1)/laycount;
        //hlength = hsetp*(i-1);
        QPointF tmplefttp(x-txw,toppoint.y() + hlength-hsetp*0.9);  //上部左侧点
        QPointF tmprighttp(x+txw,toppoint.y() + hlength-hsetp*0.9); //上部右侧点

        //左侧面
        painter.save();
        QPolygonF leftpolygon;
        leftpolygon<<  tmpmidbp << tmpmidtp  << tmplefttp << tmpleftbp;

        QLinearGradient leftgradient(tmpmidbp.x(),tmpleftbp.y(),tmplefttp.x(),tmplefttp.y());
        //leftgradient.setColorAt(0,QColor("#00A8E1").lighter(120));
        leftgradient.setColorAt(0,QColor("#FF0000").lighter(120));

        leftgradient.setColorAt(0.5,QColor("#00A8E1").dark(100));
        leftgradient.setColorAt(1,QColor("#246B95"));
        painter.setBrush(leftgradient);
        painter.drawPolygon(leftpolygon);
        painter.restore();
        //右侧
        painter.save();
        QPolygonF rightpolygon;
        rightpolygon << tmpmidbp << tmpmidtp  <<tmprighttp << tmprightbp;
        QLinearGradient rightgradient(tmpmidbp.x(),tmpmidbp.y(),tmplefttp.x(),tmplefttp.y());
        rightgradient.setColorAt(0,QColor("#78DAFF").darker(120));
        rightgradient.setColorAt(0.5,QColor("#00A8E1").dark(100));
        rightgradient.setColorAt(1,QColor("#78DAFF"));
        painter.setBrush(rightgradient);
        painter.drawPolygon(rightpolygon);
        painter.restore();

        //顶
        painter.save();
        QPolygonF toppolygon;
        toppolygon  << tmpmidtp  <<tmprighttp << tmplefttp;
        QLinearGradient topgradient(tmpmidbp.x(),tmpmidbp.y(),tmplefttp.x(),tmplefttp.y());
        topgradient.setColorAt(0,QColor("#78DAFF").darker(120));
        topgradient.setColorAt(0.5,QColor("#00A8E1").dark(100));
        topgradient.setColorAt(1,QColor("#78DAFF"));
        painter.setBrush(rightgradient);
        painter.drawPolygon(toppolygon);
        painter.restore();

    }


}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值