计算机图形学实验——二维卡通人物交互

该博客介绍了如何使用OpenGL实现基于鼠标交互的二维卡通人物设计。内容包括基础图元绘制,如贝塞尔曲线和圆形,以及如何进行物体拾取、反走样处理。此外,还涉及了卡通人物的放缩、旋转和拖动交互操作的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OpenGL卡通人物交互

「实验题目」
实现基于鼠标交互的卡通人物设计与绘制,使用颜色填充与反走样技术对卡通人物外貌以及衣着进行绘制。实现对卡通人物轮廓对交互控制,点击鼠标左键可以对人物五官位置进行拖拽移动调整。并能对卡通人物进行放缩等操作。

「题目分析」
可以将这个题目分割看看。
1. 卡通人物的绘制怎么实现?

  • 通过各种图元组合。你需要,线?多边形?圆形(或椭圆)?曲线(贝塞尔曲线)?

2. 怎么实现对卡通人物部位的交互?怎么知道选中的是哪个部件?

  • 了解一下OpenGL拾取怎么实现

3. 剩下一些细碎的东西

  • OpenGL的反走样怎么开启?图像放缩怎么实现?拖动的地方有什么要注意的?

基础"图元"绘制

圆形绘制
基于极坐标实现,通过单位圆在X、Y轴上投影的缩放得到圆形(或者椭圆)上位置的坐标。
可以选择绘制模式,是得到一个面还是一段圆弧。

void drawCircle(GLenum Mode,int N, double radius, int angleStart = 0, int angleEnd = 360, double x = 0, double y = 0, double a = 1, double b = 1) {
   
    glBegin(Mode);
    double start = (double)angleStart / 360.0*N;
    double end = (double)angleEnd / 360 * N;
    for (int i = start; i < end + 1; i++) {
   
        glVertex2f(x + a * cos(i * 2 * PI / N)*radius, y + b * sin(i * 2 * PI / N) *radius);
    }
    glEnd();
}

三次贝塞尔曲线绘制
很简单的实现了四个控制点的三次贝塞尔曲线。

n次的贝塞尔曲线实现需要写个递归(De Casteljau算法),其实就是在控制点组成的线段上不断选取一个比例 t ∈ [ 0 , 1 ] t\in[0,1] t[0,1]进行插值,直到递归至只剩一个点(这个点就是我们需要绘制的贝塞尔曲线上的点)

贝塞尔曲线的最终坐标实际上是控制点坐标和伯恩斯坦多项式系数的组合(Bernstein polynomial)
P.S.想想二项式展开,其实很简单

Point setBezier(Point p1, Point p2, Point p3, Point p4,double t) {
   
    Point p;
    double a1 = pow((1 - t), 3);
    double a2 = pow((1 - t), 2) * 3 * t;
    double a3 =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值