草庐IT

QGLWidget

全部标签

c++ - glDeleteBuffers() 在析构函数调用期间崩溃

正如Qt用户所知,使用任何OpenGL扩展都非常麻烦。我让它工作的方法是像这样扩展QGLFunctions类:classObject3D:protectedQGLFunctions{...}为了使Object3D能够正确运行,以便它可以调用glGenBuffer()等函数,需要调用initializeGLFunctions(glWidget->context());在创建QGLWidget之后,否则它会在使用任何扩展功能时简单地使应用程序崩溃。虽然我最终可以在Object3D存在期间调用“glGenBuffer()”和其他函数,但它似乎在包含“glDeleteBuffer()”调用的~

c++ - Qt OpenGL 渲染文本问题 QGLWidget

我正在使用QGLWidget这段代码用于在屏幕上绘制文本,但如果字符串的长度太长,渲染将是灾难性的:这是我的代码:glPushMatrix();glRotatef(90,0,0,1);QStringqStr=QString("Here'saverylongstringwhichdoesn'tmeananythingatallbuthadsomerenderingproblems");renderText(0.0,0.0,0.0,qStr);glPopMatrix(); 最佳答案 我在使用Helvetica时遇到了完全相同的问题。将字

c++ - 在QML插件的QGLWidget上渲染QImage

我正在尝试编写一个QML插件,它从视频中读取帧(使用自定义小部件来完成该任务,而不是QtMultimedia/Phonon),并且每个帧都被转换为QImageRGB888,然后显示在QGLWidget上(出于性能原因)。现在没有任何东西被绘制到屏幕上,屏幕一直保持白色。重要的是要声明我已经在没有QGLWidget的情况下完成了所有这些工作,所以我知道问题在于QGLWidget的设置和绘制。插件正在注册:qmlRegisterType<Video>(uri,1,0,"Video");所以Video是插件的主类。在它的构造函数中我们有:Video::Video(QDeclara

c++ - QGLWidget 在 Windows 7 中显示为黑色

我使用VisualStudio2010在WindowsXP(Qt4.7.2)中编写并测试了一些代码,然后我在另一台安装了Windows7的机器上进行了尝试。该程序打开一个QDialog并创建一个QGLWidget,我在其中显示网络摄像头图像(经过一些处理)。虽然在WindowsXP中图像显示正确,但当我在Windows7机器上测试程序时,QGLWidget变黑并且没有图像显示。但是,奇怪的是,当我在窗口周围移动并且它离开屏幕边界时,图像会立即显示并在我再次停止移动时变成黑色,这让我认为图像已正确接收/processed(有时),这可能是QTimer的问题。相关代码为:初始化:voidG

c++ - 未定义的 vtable 引用,Linux 中的 Qt

我试图在Ubuntu10.04中的Code::Blocks下编译Qt和OpenGL程序。我得到“对GLWidget的vtable的undefinedreference”#ifndef_GLWIDGET_H#define_GLWIDGET_H#include#include"stdlib.h"classGLWidget:publicQGLWidget{Q_OBJECT//mustincludethisifyouuseQtsignals/slotspublic:GLWidget(QWidget*parent=0);~GLWidget();protected:voidinitializeGL

c++ - QGLWidget - 3-D 空心物体的横截面

我正在使用QGLWidget绘制3-D对象,我程序的输入是形状的面。这意味着当我想画一个立方体时,我得到了6个元素的列表,每个元素代表一个面,每个面包含4个点,每个点(x,y,z)。绘图已完成,但我正在尝试实现横截面特征,到目前为止,横截面后的结果形状是空心物体,如何获得横截面结果,就好像形状不是空心的一样? 最佳答案 OpenGL不知道“对象”。它不知道“实心”或“空心”。OpenGL只知道点、线和三角形。如果您想让您的对象看起来是实体的,您必须计算切掉的对象的几何形状,从而生成一个新的网格,您可以将其用作绘图的输入数据。切割过程

c++ - 如何在运行时更改现有 QGLWidget 的 QGLFormat?

在我的应用程序中,用户可以更改OpenGL格式的属性(即双缓冲、多重采样、各种缓冲区的深度......)。目前,我的应用程序中只有一个QGLWidget,如果用户更改任何内容,我会销毁并重新创建该小部件。现在,我想要不止一个小部件。因此,如果格式发生变化,我需要销毁/重新创建所有小部件。由于小部件可以采用各种配置,因此很难销毁/重新创建它们。那么有没有办法在运行时改变QGLWidget的格式呢?或者,有没有办法用另一个替换一个小部件?(即销毁一个小部件并将一个新的小部件放在它原来站立的地方) 最佳答案 这可能有效:QGLFormat

c++ - QGLWidget 和快速离屏渲染

是否可以使用Qt在QGLWidget中完全脱离屏幕进行渲染,而无需将场景重新绘制到屏幕,从而避免缓冲区在监视器上完全翻转?我需要保存在帧缓冲区上生成的每一帧,但是,由于序列由4000帧组成并且屏幕上的时间间隔为15ms我花费了4000*15ms=60s但我需要比60s快得多(计算不是这里的瓶颈,只是更新问题)。在帧缓冲区上进行离屏渲染可以更快吗?我可以避免QGLWidget中的显示器刷新率吗?如何在没有缓慢的paintGL()调用的情况下完全在帧缓冲区上渲染? 最佳答案 现在我假设我们正在谈论Qt4。Isitpossibletore

c++ - 2d HUD 无法在 QGLWidget 上正确绘制(使用 QPainter)

我正在尝试在我的3D游戏中显示HUD。对于初学者来说,我只是想显示“HelloWorld”,但我还没有成功!一旦我完成,场景就会卡住/闪烁。我正在使用Qt/C++和QGLWdiget/QPainter来完成这项工作。我用过overpaintingexample作为我入门的引用。这是我所做的:在我自己的子类GameGL类(GameGL:publicQGLWidget)中覆盖paintEvent(...)推送openGLModelView矩阵作为当前矩阵启用参数作为gl_depth_test渲染我的游戏(::paintGL1())禁用模型View参数弹出模型View矩阵制作QPainter

c++ - 如何强制 QGLWidget 更新屏幕?

我正在使用OpenGL绘制一个简单的场景。我将QGLWidget子类化并覆盖了paintGL()。没什么特别的:voidCGLWidget::paintGL(){glClearColor(0.0f,0.0f,0.0f,0.0f);glClear(GL_COLOR_BUFFER_BIT);glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(120.0,160.0,-300.0,0.0+120.0,0.0+160.0,2.0-300.0,0.0,1.0,0.0);glScalef(1.0f/300.0f,1.0f/300.0f,1.0