之前为了在女朋友面前露一手(啊不是 闲得无聊),为了证明两年多的图像没有白学,总不能做个控制台黑窗口print循环打印爱心字符串吧,于是乎做了一个可以动态旋转变色的3D爱心,效果如下图所示。虽然效果也很简陋,还被鄙视了(惨兮兮),但毕竟也是花了两个小时写出来的demo嘛。

基于Win10+QT平台开发,用了一些常用的2D/3D图像库比如OpenCV、PCL和VTK,其实主体也就百来行代码,思路就是调用库绘制已知方程的爱心点云然后在对点云进行变换的同时刷新可视化窗口。3D爱心的方程是

具体程序如下:
mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QVTKWidget.h>
#include <QMouseEvent>
#include <Windows.h>#include <iostream>
#include <opencv2/opencv.hpp>
#include <pcl/io/pcd_io.h>
#include <pcl/io/ply_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <vtkAutoInit.h>
#include <vtkRenderWindow.h>VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkInteractionStyle)namespace Ui {class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();private:Ui::MainWindow *ui;pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud;boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;bool flag = true;public slots:void stopLoop();void mousePressEvent(QMouseEvent *event);
};#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);this->setMouseTracking(true);this->setFocusPolicy(Qt::StrongFocus);setAttribute(Qt::WA_QuitOnClose);cloud.reset(new pcl::PointCloud<pcl::PointXYZRGB>);for (float x = -1.2; x <= 1.2; x+= 0.01){for (float y = -0.8; y <= 0.8; y+= 0.01){for (float z = -1; z <= 1.2; z+= 0.01){if (pow(x*x + 9 / 4 * y*y + z*z - 1, 3) - x*x*z*z*z - 9 / 80 * y*y*z*z*z <= 0){pcl::PointXYZRGB p;p.x = x; p.y = y; p.z = z; p.r = 255; p.g = 0; p.b =0;cloud->push_back(p);}}}}viewer.reset(new pcl::visualization::PCLVisualizer("viewer", false));viewer->addPointCloud(cloud, "cloud");viewer->setCameraPosition(0, 12, 0, 0, -1, 0, 0, 0, 1);ui->qvtkWidget->SetRenderWindow(viewer->getRenderWindow());viewer->setupInteractor(ui->qvtkWidget->GetInteractor(), ui->qvtkWidget->GetRenderWindow());ui->qvtkWidget->update();
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::stopLoop()
{flag = false;
}void MainWindow::mousePressEvent(QMouseEvent *event)
{if(event->button()){srand((unsigned int)time(0));while(flag){int r = rand() % 256, g = rand() % 256, b = rand() % 256;for(int i = 0; i < cloud->points.size(); ++i){float x = cloud->points[i].x, y = cloud->points[i].y;cloud->points[i].x = cos(0.1) * x - sin(0.1) * y;cloud->points[i].y = sin(0.1) * x + cos(0.1) * y;cloud->points[i].r = r;cloud->points[i].g = g;cloud->points[i].b = b;}viewer->updatePointCloud(cloud);ui->qvtkWidget->update();cv::waitKey(1);}}
}

main.cpp

#include "mainwindow.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow *w = new MainWindow;w->show();a.connect(&a, SIGNAL(lastWindowClosed()), w, SLOT(stopLoop()));return a.exec();
}

项目工程文件在此:
链接:https://pan.baidu.com/s/1Ll8-qv98upb6ugXLi9G5pQ?pwd=d5o2
提取码:d5o2

动态旋转变色的3D爱心相关推荐

  1. java实现3D动态效果_js实现3D粒子酷炫动态旋转特效

    js实现3D粒子酷炫动态旋转特效(效果比较酷炫,中途不仅有形态的变换,还有颜色的变化,希望大家能够喜欢) 代码实现过程中的静态截图 New Document html,body{ margin:0px ...

  2. 旋转立体相册制作html,用CSS3制作3D动态旋转相册

    最近做一个网站,想弄一个炫酷的效果,所以想到了用CSS3做一个图片3D旋转的效果.[实际就是做一个3D动态旋转相册,自己发挥哦] 下面直接上代码了. -------------------start- ...

  3. 3d大爱心c语言程序,C语言控制台打印3D爱心图案

    非常多 这些代码能够完毕几个不同的爱心图案.当中有一个样例甚至能够在黑色背景的控制台上打印出跳动的3D爱心动画,效果相当震撼. 我用的是 普通的爱心图案 C语言代码: #include "s ...

  4. HTML5 3D爱心动画及其制作过程

    之前有看到过很多基于HTML5或者CSS3制作的爱心动画,不过基本上都是2D平面的,今天在国外的网站上看到一个基于HTML5 3D的爱心动画,对于HTML5爱好者来说,不免兴奋了一把.下面将分享一下这 ...

  5. Matlab 马鞍面动态旋转图

    马鞍面,又叫双曲抛物面,形状类似于马鞍. 标准函数解析式 z=x2a2−y2b2(定义在xoy平面)z= \frac{x^2}{a^2}- \frac{y^2}{b^2} ~~ (定义在xoy平面)z ...

  6. c++打印心形_C语言控制台打印3D爱心图案

    非常多 这些代码能够完毕几个不同的爱心图案.当中有一个样例甚至能够在黑色背景的控制台上打印出跳动的3D爱心动画,效果相当震撼. 我用的是 普通的爱心图案 C语言代码: #include "s ...

  7. 如何批量制作动态旋转视频效果

    如何批量制作动态旋转视频效果,首先我们在手机上安装应用程序"王者剪辑app",启动软件并进入一键剪辑中的"特效应用"功能, 批量导入或导入一个视频, 接着选择& ...

  8. 纯css写的类似花纹图案的立体动态旋转

    纯css写的类似花纹图案的立体动态旋转 动态中的静态截图 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN&qu ...

  9. c语言控制台输出爱心图,C语言控制台打印3D爱心图案

    很多程序员都觉得自己的编程工作十分的鼓噪乏味,一整天面对的都是一些写不完的代码和改不完的Bug.今天我们要给大家分享一些有趣的C语言代码,或许可以为你无聊的工作带来一丝乐趣.这些代码可以完成几个不同的 ...

最新文章

  1. C malloc 用法
  2. WCF HelpPage 和自动根据头返回JSON XML
  3. javascript语法速查表
  4. 现代软件工程 - 代码量等于树叶量
  5. 搜狐视频开放平台的申请使用方法
  6. Unity3d地形刷入自定义树木
  7. 掌管大局的IoC Service Provider
  8. BZOJ2555:SubString(SAM,LCT)
  9. 部分Excel函数的使用
  10. 【已解决】Fortran77老代码中的do循环,在Fortran95中能否使用?
  11. 电子板书:Word,PPT,PDF手写批注很轻松
  12. catia车灯设计——一些设置
  13. 转换YV12到RGB565图像转换,附YUV转RGB测试
  14. linux如何卸载谷歌输入法,Linux上使用谷歌输入法
  15. 新版Edge连不上网的问题!
  16. C9高校,博士生一作发Nature!
  17. 判断输入的邮箱格式是否正确
  18. 计算机系统最重要的是什么,操作系统最重要的两个作用是什么
  19. 数字化转型——技术转型推动业务转型(第一次讨论稿)
  20. Chatbot 分类

热门文章

  1. 1+1中的“+“号是什么意思?
  2. WordPress插件 Hide My WP 没人知道你使用的是WP系统[更新v3.0]
  3. 如何定时发送云湖社交APP消息?玩转云湖机器人
  4. 基于无向图的城市间快递派送算法
  5. 网游限时器 v2.0 官方
  6. 文本处理三剑客(grep sed wak)
  7. 20@nginx优化
  8. 网络的一些特殊状态网络回路,广播风暴等原因导致网速慢的问题和网络不稳定的问题
  9. 如何培养编程所需要的逻辑思维
  10. PyTorch图像分割模型——segmentation_models_pytorch库的使用