关于glFlush()等等

Windows下OpenGL学习实践
本文介绍了在Windows环境下使用OpenGL进行图形编程的方法。通过具体的代码示例,展示了如何利用GLUT库创建窗口,并设置回调函数来绘制图形。文章还讨论了OpenGL的帧缓冲机制及其在图形输出中的作用。
部署运行你感兴趣的模型镜像

在windows下学习openGL,可以使用强大的windowsAPI,比如在glutDisplayFunc()所调用的回调函数中使用Sleep()来间断代码的执行,可以清晰地看到各个函数的作用,通过在glFlush()前面加Sleep(),可以发现虽然函数被调用了,可是并没有输出,因为openGl的机制是将这些命令放在 帧缓冲中,而一次用glFlush()将其输出到显示其上。

还有当窗口被覆盖,或最小化,或改变了大小时都会调用glutDisplayFunc()所指定的回调函数。注意的是这里的被覆盖,我并不清楚,因为在dwm的作用下,win7下窗口似乎没有被覆盖这一说法了???表达不清,没办法,我的确在这些方面还不太懂。我的意思是说,用其他窗口覆盖是没有反应的,但是将窗口的一部分拖出桌面是会反应的。我用来测试的代码:

我本来是想弄一个矩形来着,因为我是照书上敲得代码啊,可是并没有用,竟然将整个窗口都变成红色了,也好,正好便于我测试这段代码。

您可能感兴趣的与本文相关的镜像

Linly-Talker

Linly-Talker

AI应用

Linly-Talker是一款创新的数字人对话系统,它融合了最新的人工智能技术,包括大型语言模型(LLM)、自动语音识别(ASR)、文本到语音转换(TTS)和语音克隆技术

一.任务描述 1.本关任务 在前面关卡的基础上,根据下面具体要求,利用OpenGL画点函数来实现一般直线(所有斜率情况)的绘制算法。 2.预期输出 3.具体要求 根据下面要求,在右侧修改代码,绘制出预期输出的图片,并进行评测。 (1) 直线颜色为红色(1.0f,0.0f,0.0f), 线粗为1; (2) 实现一般直线(所有斜率情况)的绘制算法,并将代码填写在函数void Line(int x0, int y0, int x1, int y1)中; (3) 绘制一个五角星来测试上述直线绘制算法,并将代码填写在函数void myDisplay(void)中指定位置。五角星的顶点坐标分别为:(261, 215), (344, 275),(429, 213), (398, 319), (477, 384), (378, 385), (344, 491), (310, 384), (209, 382), (292, 319). 二.任务提示 1.要使前面的0<k<1直线绘制算法推广到任意斜率的一般直线,需要进行下面两方面的改造: (1) 当直线的斜率|k|>1时,算法的步进为y方向,同时需要用中点判别式确定x变量的计算; (2) 对0<k<1直线来说,y变量的增量为0或1。当-1<k<0时,y变量的增量可能为0或-1。当直线的斜率|k|>1时,也存在这种情况。 // 提示:写完代码请保存之后再进行评测 #include <GL/freeglut.h> #include <algorithm> #include <stdio.h> using namespace std; // 评测代码所用头文件-开始 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> // 评测代码所用头文件-结束 void Line(int x0, int y0, int x1, int y1) { // 请在此添加你的代码 /********** Begin ********/ /********** End **********/ } void myDisplay(void) { glClear(GL_COLOR_BUFFER_BIT); // 请在此添加你的代码用来测试直线绘制代码 /********** Begin ********/ /********** End **********/ glFlush(); } void Init() { glClearColor(0.0, 0.0, 0.0, 0.0); glShadeModel(GL_SMOOTH); } void myReshape(int w, int h) { glViewport(0, 0, (GLsizei)w, (GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, (GLdouble)w, 0.0, (GLdouble)h); } int main(int argc, char *argv[]) { int width = 800; int height = 600; glutInit(&argc, argv); glutInitWindowPosition(100, 100); glutInitWindowSize(width, height); glutCreateWindow("Hello Line!"); Init(); glutDisplayFunc(myDisplay); glutReshapeFunc(myReshape); glutMainLoopEvent(); /*************以下为评测代码,与本次实验内容无关,请勿修改**************/ GLubyte* pPixelData = (GLubyte*)malloc(width * height * 3);//分配内存 GLint viewport[4] = {0}; glReadBuffer(GL_FRONT); glPixelStorei(GL_UNPACK_ALIGNMENT, 4); glGetIntegerv(GL_VIEWPORT, viewport); glReadPixels(viewport[0], viewport[1], viewport[2], viewport[3], GL_RGB, GL_UNSIGNED_BYTE, pPixelData); cv::Mat img; std::vector<cv::Mat> imgPlanes; img.create(height, width, CV_8UC3); cv::split(img, imgPlanes); for(int i = 0; i < height; i ++) { unsigned char* plane0Ptr = imgPlanes[0].ptr<unsigned char>(i); unsigned char* plane1Ptr = imgPlanes[1].ptr<unsigned char>(i); unsigned char* plane2Ptr = imgPlanes[2].ptr<unsigned char>(i); for(int j = 0; j < width; j ++) { int k = 3 * (i * width + j); plane2Ptr[j] = pPixelData[k]; plane1Ptr[j] = pPixelData[k+1]; plane0Ptr[j] = pPixelData[k+2]; } } cv::merge(imgPlanes, img); cv::flip(img, img ,0); cv::namedWindow("openglGrab"); cv::imshow("openglGrab", img); //cv::waitKey();// cv::imwrite("../img_step6/test.jpg", img); return 0; }
03-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值