社区首页 >问答首页 >用于绘制的MFC和OpenGL事件

用于绘制的MFC和OpenGL事件
EN

Stack Overflow用户
提问于 2014-12-30 22:35:33
回答 1查看 448关注 0票数 0

我已经构建了一个SDI MFC应用程序,其中的CView子级正在使用OpenGL绘制一个立方体。此多维数据集由以下函数绘制:

代码语言:javascript
代码运行次数:0
复制
void CglSDI3View::setupScene()
{

wglMakeCurrent(m_hDC, m_hRC);

// Clear color and depth buffer bits
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// Wireframe Mode
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

glBegin(GL_QUADS);
// Front Side
glVertex3f(1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);
glVertex3f(1.0f, -1.0f, 1.0f);

// Back Side
glVertex3f(-1.0f, -1.0f, -1.0f);
glVertex3f(-1.0f, 1.0f, -1.0f);
glVertex3f(1.0f, 1.0f, -1.0f);
glVertex3f(1.0f, -1.0f, -1.0f);

// Top Side

(...)

glEnd();

SwapBuffers(m_hDC);


}

我没有定义计时器。现在,我的OnDraw函数如下所示:

代码语言:javascript
代码运行次数:0
复制
void CglSDI3View::OnDraw(CDC* /*pDC*/)
{
CglSDI3Doc* pDoc = GetDocument();

wglMakeCurrent(m_hDC, m_hRC);

glLoadIdentity();

glTranslatef(0.0f, 0.0f, -m_fZoom);
glTranslatef(m_fPosX, m_fPosY, 0.0f);
glRotatef(m_fRotX, 1.0f, 0.0f, 0.0f);
glRotatef(m_fRotY, 0.0f, 1.0f, 0.0f);

setupScene();

wglMakeCurrent(NULL, NULL);

ValidateRect(NULL);
}

其中m_fRotXm_fRotYm_fPosX等是缩放和转换因子。我的问题是:我需要在每次OnDraw()调用时调用setupScene()吗?或者,这可以优化吗?换句话说,是否必须在每次OnDraw()调用时重新绘制多维数据集,或者是否有一种方法只需这样做一次,然后只应用转换?

请注意,在未来,setupScene()函数将绘制具有数百万个彩色点的巨大点云,因此需要尽可能优化这一点。

EN

回答 1

Stack Overflow用户

发布于 2014-12-31 10:21:40

"setupScene“这个名字有误导性。OpenGL没有场景。OpenGL没有模型。OpenGL不是场景图。

OpenGL是一个“哑巴”绘图应用编程接口。它绘制点、线和三角形,一次绘制一个。在画了一些东西之后,它已经忘记了。

所以,是的,如果你想在绘图中发生一些变化,你必须重新绘制,因为,好吧,这只是一个绘图,仅此而已。没有OpenGL可以操纵的保留的场景。

因此,将"setupScene“重命名为"drawScene”,并按照恰当的名称使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27713561

复制
相关文章
【OpenGL】十九、OpenGL 绘制模式 ( 绘制线框模式 | 绘制点模式 )
使用 glPolygonMode(GL_FRONT, GL_LINE) 设置当前的绘制模式是线框模式 , 设置了该模式后 , 之后的所有图形都会变成线 ;
韩曙亮
2023/03/28
2K0
【OpenGL】十九、OpenGL 绘制模式  ( 绘制线框模式 | 绘制点模式 )
opengl-球体的绘制
将y轴切分成64等分,x-z平面切分成64等分的扇形 y轴从上到下取值为[0, 180],即[0, π],x-z平面扫描取值[0, 360]即[0, 2π] 详细计算,参考如下代码,把一个球体拆分成65 * 65 个点 注意: y = cos(ySegment * PI); x = sin(ySegment * PI) * cos(xSegment * 2 * PI); x = sin(ySegment * PI) * sin (xSegment * 2 * PI); 按照上面这个顺序来理解比较容易
公号sumsmile
2020/08/26
4K1
opengl-球体的绘制
OpenGL 的 glDrawElements 绘制方法
在之前的绘制中,我们都是通过 glDrawArrays 方法来实现的,它会按照我们传入的顶点顺序和指定的绘制方式进行绘制。
音视频开发进阶
2019/07/25
2.4K0
【OpenGL】十一、OpenGL 绘制多个点 ( 绘制单个点 | 绘制多个点 )
在上一篇博客 【OpenGL】十、OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区 | 设置当前颜色值 | 设置点大小 | 绘制点 ) 中 , 讲解了绘制单个点的操作 , 本篇博客简单介绍下绘制多个点 ;
韩曙亮
2023/03/28
1.3K0
【OpenGL】十一、OpenGL 绘制多个点  ( 绘制单个点 | 绘制多个点 )
OpenGL ES 绘制纹理
在OpenGL ES中绘制一张图片需要使用到纹理(texture),绘制纹理步骤如下:
老孟Flutter
2020/09/11
1.1K0
用OpenGL绘制地球
本想用自动纹理坐标生成做的,可是红宝书上说得一点都不明白。网上有个人的课程设计是自己画的球,就是一个个四边形的拼个球,然后再给四边形贴图。这样太麻烦了!逛啊逛,让我找到了另一种方法,仅仅几行代码: // 画地球 void OpenGL::DrawEarth(void) ...{     GLUquadricObj *quadObj = gluNewQuadric();//创建一个二次曲面物体     gluQuadricTexture(quadObj,GL_TRUE);        //启用
逍遥剑客
2018/05/21
2.9K0
【OpenGL】十二、OpenGL 绘制线段 ( 绘制单条线段 | 绘制多条线段 | 依次连接的点组成的线 | 绘制圈 | 绘制彩色的线 )
线的绘制宽度是 OpenGL 状态机中的一个值 , 通过 glLineWidth 方法设置 ; 下面的代码将线的宽度设置为 2 像素 ;
韩曙亮
2023/03/28
4.7K0
【OpenGL】十二、OpenGL 绘制线段  ( 绘制单条线段 | 绘制多条线段 | 依次连接的点组成的线 | 绘制圈 | 绘制彩色的线 )
【OpenGL】九、OpenGL 绘制基础 ( OpenGL 状态机概念 | OpenGL 矩阵概念 )
上一篇博客 【OpenGL】八、初始化 OpenGL 渲染环境 ( 导入 OpenGL 头文件 | 链接 OpenGL 库 | 将窗口设置为 OpenGL 窗口 | 设置像素格式描述符 | 渲染绘制 ) ★ 进行了 OpenGL 渲染环境初始化 ;
韩曙亮
2023/03/28
4.2K0
OpenGL ES for Android 绘制矩形和正方形
前面的文章介绍了如何 绘制三角形,在OpenGL ES中没有直接绘制矩形的方式,通过绘制2个三角形的方式绘制矩形。
老孟Flutter
2020/09/11
1.2K0
OpenGL 系列---基础绘制流程
OpenGL 是一种应用程序编程接口,它是一种可以对图形硬件设备特性进行访问的软件库。
音视频开发进阶
2019/07/26
1.9K0
OpenGL ES for Android 绘制线
line_vs.glsl和line_fs.glsl分别表示顶点shader和片段shader的文件,存放于assets/glsl目录下,readAssetsTxt为读取assets目录下文件的公用方法。
老孟Flutter
2020/09/11
9641
OpenGL 学习系列---基本形状的绘制
在之前的一篇博客中,讲述了 OpenGL 基础绘制流程 及相关的代码,其中关于 OpenGL 程序编译部分都是可以在其他项目中接着复用的,接下来会讲到如何去绘制其他的基本图元。
音视频开发进阶
2019/07/25
1.9K0
OpenGL ES for Android 绘制旋转的地球
No 图 No Code,上面旋转的地球是不是很酷炫,下面就让我们开始说说如何绘制旋转地球吧?绘制旋转地球需要3个步骤:
老孟Flutter
2020/09/11
1.7K0
【OpenGL】十八、OpenGL 绘制多边形 ( 绘制 GL_POLYGON 模式多边形 )
使用 glBegin(GL_POLYGON) 设置绘制多边形 , 不管有几个点 , 都按照指定的顺序连接起来 ;
韩曙亮
2023/03/28
3.1K0
【OpenGL】十八、OpenGL 绘制多边形  ( 绘制 GL_POLYGON 模式多边形 )
Python+OpenGL绘制任意长度和次数的B样条曲线
对于给定的m+n+1个控制点,可以绘制m+1段光滑拼接的n次B样条曲线,每段曲线上点的位置由n+1个控制点决定,其中第i段曲线上参数t(0<=t<=1)对应的点为
Python小屋屋主
2022/06/05
9880
Python+OpenGL绘制任意长度和次数的B样条曲线
IOS – OpenGL ES 绘制线条 GPUImageLineGenerator
GPUImageLineGenerator 属于 GPUImage 图像处理相关,用来处理图片线条效果,shader 源码如下:
猿说编程[Python和C]
2023/03/25
5190
Shader 优化 | OpenGL 绘制网格效果
除了介绍 KodeLife 的使用之外,还附带了一个 Shader 绘制网格效果的代码。Shader 讲解
音视频开发进阶
2020/05/26
1.8K0
MFC和QT的区别
MFC 微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。早期很多学习计算机专业的读者可以在学校里面都有接触过,因为这个是每一个计算机专业的读者必修课程,所以在早期的C++项目里面很多都是使用MFC为开发框架进行构建的,因为它有一个很大的好处就是和我们的windows的系统兼容性很好,可以直接调用整个系统的API函数,而且开发的程序对系统的支持度很好,因为我们现在的windows系统都是在向前兼容的,如windows系统里面有win 95、win98、win2000,win Xp,win7,这些操作系统都是一致向前兼容的,如果经历过这些系统的读者都会发现系统在win8之前一直往前兼容,造成操作系统变得越来越大,在win8系统,后windows系统引入C#一起来对windows系统进行调控,这时我们会发现win8对win7的兼容性很差,而且这个操作系统也是微软除visit系统最短命的系统,这个时候我们就会发现我们的MFC开发的程序在整个windows兼容性不是那么高了,而且由于当时,对于我们的C++开发一直有一个叫做visual studio 的编译器在C#语言没有出来前,只能编译C++,所以visual studio作为全世界最优的编译器也是整体支持MFC,所以这个时候我们现实生活中在windows系统开发的程序很大部分都是使用了MFC框架进行开发,在如今我们的很多酒店、政府等等很多行业上面用的都是MFC框架进行开发,MFC全面支持COM组件开发,这个时候很多在windows开发的程序也会在这上面支持COM组件开发,还有由于在中国大部分计算机的使用者都是用的windows系统,所以在开发程序中用C++来开发的时候都是使用了最为稳定的MFC进行开发,记得几年前和一位一起工作的朋友曾经谈过,只要微软不倒闭,MFC的工作者就不会失业,为啥呢,哪怕现在在windows上面最为流行的C#语言也没有C++中的windows编程对windows操作系统操作这么流利,打个比方如果你的电脑里面在加上一个高拍仪这个时候要用到的是USB驱动进行调用,这个时候处理USB驱动调用的时候就会发现,驱动调用的数据都需要进行位运算,这个时候用C++来处理是最为方便的,所以C++在windows上面的开发之所以占尽了便宜,是因为windows编程,而我们的MFC是封装后的windows编程。
种花家的奋斗兔
2020/11/13
1.8K0
Qt和MFC的区别
(MFC效率较高,但大量的Windows API和消息机制使得其较难理解,不易用;QT封装较好,易用且==跨平台==,但效率较低)
炒香菇的书呆子
2021/02/25
1.4K0
Qt和MFC的区别
点击加载更多

相似问题

MFC:如何从不同的线程中绘制opengl?

10

OpenGL在MFC控件绘制中的错误Y位置

10

使用MFC的OpenGL

30

在MFC中绘制OpenGL上下文上方的文本

21

MFC绘制线

35
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文