实验二 多边形逼近画圆
【摘要】 #include <unistd.h>#include <GL/glut.h>#include <math.h>#include <stdio.h>#include <GL/freeglut.h>#include<opencv2/core/core.hpp>#include<opencv2/highgui/highgui.hpp>#include<opencv2/imgproc/imgpro...
#include <unistd.h>
#include <GL/glut.h>
#include <math.h>
#include <stdio.h>
#include <GL/freeglut.h>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
const int n = 60;
const GLfloat r = 0.5f;
const GLfloat Pi = 3.1415926f;
void saveImage(); //保存图形函数,请勿删除
void MyDisplay(void)
{
//请阅读左侧相关知识画圆步骤,再开始在下方填写代码。
//=======begin=======
// 设置清除颜色为白色
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
// 清除屏幕
glClear(GL_COLOR_BUFFER_BIT);
// 设置绘制颜色为蓝色
glColor3f(0.0f, 0.0f, 1.0f);
// 开始绘制多边形
glBegin(GL_POLYGON);
// 生成多边形的顶点
for(int i = 0; i < n; ++i)
{
GLfloat x = r * cos(2 * Pi * i / n);
GLfloat y = r * sin(2 * Pi * i / n);
glVertex2f(x, y);
}
//========end========
// 结束当前的绘制命令
glEnd();
// 将OpenGL命令缓冲区的内容输出到显示器上
glFlush();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("Circle");
glutDisplayFunc(&MyDisplay);
glutCloseFunc(saveImage);// 设置窗口关闭的回调函数
glutMainLoop();
return 0;
}
//---------------------------------------------------------------------------
//以下代码请勿删除,为图片保存代码
//将窗口信息保存为图片
void saveImage() {
// 设置OpenGL视口和投影矩阵
int saveWidth, saveHeight;
saveWidth = 400;
saveHeight = 400;
glViewport(0, 0, saveWidth, saveHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 400, 0, 400, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// 创建OpenCV Mat对象并读取窗口像素数据
cv::Mat image(saveHeight, saveWidth, CV_8UC3);
glReadPixels(0, 0, saveWidth, saveHeight, GL_BGR, GL_UNSIGNED_BYTE, image.data);
// 翻转图像(因为OpenGL坐标和图片坐标的差异)
cv::flip(image, image, 0);
// 保存图像
cv::imwrite("/data/workspace/myshixun/step1/test.png", image);
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)