用qt画3d圆柱

qwidget是在2d坐标第中,要画3d的就要将3d图抽象到2d坐标中来。当一个3d圆柱放到平面坐标中,如果柱面方向和眼睛水平,则是一个矩形

,如果柱面和眼睛方向水平则是一个圆,如柱面方向和眼睛垂直并绕x轴旋转一定角度,那么就是两个个椭圆,且底面椭圆不能完全看见。

这里为了是圆柱圆更像圆柱面,我画的是最后一种。

我们可以理解为有两个椭圆,底面一个,顶面一个,底面的椭圆圆心理论上是和顶面的x坐标是相等的,y坐标的话底面要靠下一些;柱面底面颜色看不到

,顶面颜色可以设置画刷一次性填充,那么中间的柱面颜色咋办呢?其实细心思考可以发现,在二维平面中中间柱面仍是底面圆的范围内,这样就好办了,

先画底面椭圆用一种颜色填充,再画顶面椭圆用一种颜色填充,这样覆盖的部分就是顶面,没被覆盖的底面圆部分就是中间柱面了。


void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.save();
    //设置反锯齿
    painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform | QPainter::Qt4CompatiblePainting);
    QRect drawRect = event->rect().adjusted(60,60,-60,-60);
    drawRect.moveTop(drawRect.top() + 10);
    
    QRadialGradient rg(drawRect.center(),drawRect.width()/2);
    rg.setColorAt(1,QColor(Qt::red).lighter());
    rg.setColorAt(0,QColor(Qt::red).dark(150));
    painter.setBrush(rg);
    painter.drawEllipse(drawRect);
    
    drawRect.moveTop( drawRect.top() - 10);
    
    rg.setCenter(drawRect.center());
    rg.setRadius(drawRect.width()/2);
    rg.setColorAt(1,QColor(Qt::white).lighter());
    rg.setColorAt(0,QColor(Qt::red));
    painter.setPen(Qt::NoPen);
    painter.setBrush(rg);
    painter.drawEllipse(drawRect);
    
    event->accept();
    painter.restore();
}



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: OpenGL是一种开源的图形应用程序接口,它允许开发人员通过使用几何形状、颜色和纹理等基本元素来创建复杂的三维图形。而圆柱和圆锥体是OpenGL中比较基础的一种图形绘制,下面将对其进行简单介绍。 要想绘制一个圆柱体,需要定义一个垂直于圆柱体轴线的环形截面,可以使用一个包含许多点的环形多边形来实现这一点。然后,在沿着轴线的每个位置上重复绘制多边形,从而创建一个立体的圆柱体。具体实现可以使用glTriangleFan函数绘制每个圆面,在圆心处也需要定义一个顶点,圆面的颜色可以为同一个颜色,也可以为不同的颜色,形成渐变的效果。 而圆锥体则需要以圆锥的底面为基础,沿着锥体轴线多次重复绘制该圆面和从圆心向上的直边,实现顶点逐渐收缩的效果。具体实现方法可以使用glTriangleFan在底面绘制圆面,再用glTriangleStrip连接底面和顶点,形成圆锥体的结构。如果圆锥体的底面和侧面颜色不同,可以通过glColor3f函数分别设置两种颜色。 总之,通过OpenGL的API函数和一些基本几何知识,可以很容易地实现圆柱和圆锥体,这也是开发三维图形应用程序的基础技能之一。 ### 回答2: OpenGl是一个强大的图形渲染库,它可以通过定义形状的顶点坐标来渲染出各种图形,包括圆柱和圆锥体。 首先,圆柱可以通过绘制多边形来实现。我们可以将圆柱分成若干个圆环,并用正多边形来表示每个圆环。我们可以通过计算每个圆环上的点坐标来生成圆柱的所有顶点坐标,并使用GL_TRIANGLE_STRIP形式来绘制圆柱。 对于圆锥体,我们可以将其看做是一个扩展的圆柱,即在圆柱顶部再添加一个圆锥顶端面。同样地,我们可以用多边形来表示圆锥顶端面,并根据锥的倾斜率计算圆锥侧面的所有顶点坐标。最后,我们可以使用GL_TRIANGLE_FAN来绘制顶端圆面和GL_TRIANGLE_STRIP来绘制侧面,以实现圆锥的效果。 需要注意的是,绘制圆柱和圆锥体的效率取决于细分数和多边形面数的选择。较高的面数可以带来更精细的图形效果,但也可能造成性能下降。因此,应该根据实际需求来选择合适的细分和面数。 ### 回答3: OpenGL是一套开放源码的图形库,可以用于开发各种图形应用程序。要圆柱和圆锥体,需要使用OpenGL的三维绘图函数。 圆柱的绘制可以采用反复绘制同一个圆形并将绘制的圆形沿着z轴方向平移的方式实现。要绘制圆柱,需要定义圆柱的高度和半径。绘制时可以使用OpenGL的绘制函数glBegin()和glEnd(),并在其中使用glVertex()函数绘制每一个点。具体步骤如下: 1.定义圆柱的高度和半径; 2.设置绘制模式为GL_TRIANGLE_STRIP; 3.在x-z平面上绘制底部圆形,可以使用glVertex()函数绘制圆形的每一个点,注意每个点的位置需要逆时针顺序排列以确保绘制正常; 4.在x-z平面上绘制顶部圆形,同样需要使用glVertex()函数,注意每个点的位置需要顺时针顺序排列; 5.绘制侧面的一条线条,可以使用glVertex()函数绘制对应点的底部圆形上的点和顶部圆形上的点,依次反复绘制即可; 6.绘制另一条侧面的线条,同样也需要使用glVertex()函数绘制对应点的底部圆形上的点和顶部圆形上的点,依次反复绘制即可; 7.最后使用glEnd()函数结束绘制过程,绘制出的圆柱就呈现在屏幕上了。 圆锥体的绘制也可以采用反复绘制同一个圆形并将绘制的圆形沿着z轴方向缩小的方式实现。需要定义圆锥体的高度和底部半径。具体步骤如下: 1.定义圆锥体的高度和底部半径; 2.设置绘制模式为GL_TRIANGLE_FAN; 3.在x-z平面上绘制底部圆形,可以使用glVertex()函数绘制圆形的每一个点,注意每个点的位置需要逆时针顺序排列以确保绘制正常; 4.从圆锥体顶点开始,通过反复绘制同一个圆形并将圆形沿着z轴方向缩小的方式绘制出侧面,需要使用glVertex()函数绘制每一个点; 5.绘制结束时使用glEnd()函数结束绘制过程,绘制出的圆锥体就呈现在屏幕上了。 以上为OpenGL圆柱和圆锥体的简要过程,具体实现需要根据具体项目进行调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值