gpt4 book ai didi

qt - 在 QT 中使用 glew 解析 OpenGL 函数

转载 作者:行者123 更新时间:2023-12-04 05:13:05 25 4
gpt4 key购买 nike

已经17天了我正在努力使用 QT 在 OpenGL 中编写一个简单的程序,但是在 Google 上搜索的所有教程都失败了。
我已经使用 msvc2010 使用 -opengl 桌面编译了我的 QT 5.0.1,以使桌面 opengl 成为默认值。

我读过 Sean Harmer 的教程,但它依赖于 QT 来解决 opengl 函数。

根据一些人的说法,不可能在 QT 中使用 glew,因为 QT 的内置库阻止 glew 包含其标题,但根据 Sean Harmer HERE ,这是可能的(但那里没有解释如何)。

即使使用 QGLWidget 我也无法使用 OpenGL 扩展。

现在我想要的是单独使用所有 OpenGL 函数和 QT 中的所有窗口函数,即 QT 不会干扰 OpenGL。

如果有人用简单的三角形示例并使用任何扩展名向我解释该过程,我将非常感激..

我在我的项目中使用了 glew 库,并在我的程序开始时使用了 #included glew.h,但是在编译时它给出了错误:
glwidget.obj:-1:错误:LNK2001:未解析的外部符号 小鬼_ _glewGenVertexArrays

我的简历

QT       += core gui opengl

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = Trial
TEMPLATE = app

SOURCES += main.cpp\
mainwindow.cpp \
glwidget.cpp

HEADERS += mainwindow.h \
glwidget.h

FORMS += mainwindow.ui

RESOURCES += \
resources.qrc
win32: LIBS += -L$$PWD/../../../../../OpenGL/glew-1.9.0/lib/ -lglew32s

INCLUDEPATH += $$PWD/../../../../../OpenGL/glew-1.9.0/include
DEPENDPATH += $$PWD/../../../../../OpenGL/glew-1.9.0/include

win32: PRE_TARGETDEPS += $$PWD/../../../../../OpenGL/glew-1.9.0/lib/glew32s.lib

glewInfo 的输出:
GLEW 版本 1.9.0
pixelformat 1 的报告功能
在 NVIDIA Corporation 的 GeForce GT 540M/PCIe/SSE2 上运行
支持 OpenGL 版本 4.3.0
void GLWidget::initializeGL()
{
GLenum err = glewInit();
if(err != GLEW_OK)
{
printf("%s",glewGetErrorString(err));
}

glEnable(GL_DEPTH_TEST);
qglClearColor(QColor(Qt::red));

shaderProgram.addShaderFromSourceFile(QGLShader::Vertex, ":/vertexShader.vsh");
shaderProgram.addShaderFromSourceFile(QGLShader::Fragment, ":/fragmentShader.fsh");
shaderProgram.link();
shaderProgram.bind();

const GLubyte *oglVersion = glGetString(GL_VERSION);
printf( "%s\n",oglVersion );

GLfloat vertices[3][3] ={{ -0.5, -0.5, -1 },
{ 0, 0.5, -1},
{ 0.5, -0.5, -1}};
vertexArray.create();
vertexArray.setUsagePattern(QOpenGLBuffer::StaticDraw);
vertexArray.allocate( vertices, 3 * 3 * sizeof( GLfloat ) );
vertexArray.bind();
shaderProgram.setAttributeBuffer( "vVertex", GL_FLOAT, 0, 3 );
shaderProgram.enableAttributeArray( "vVertex" );

GLuint arr[5];
glGenBuffers(5,arr);
}

最佳答案

现在所有问题都解决了。

第一个问题是:QT 5.0.1 默认不支持 opengl。
您必须使用 -opengl desktop 编译它。
Here是关于如何使用 vs2010 编译 QT 的教程。
或者你可以从 QT 下载新的 opengl 构建。

将 glew 库添加到项目的第二个问题。
如果添加 glew32s.lib(静态),则必须在“#include”之前添加“#define GLEW_STATIC”
建议使用glew32.lib(动态)。

第三个问题是某些 opengl 函数的段错误,即使您的 GPU 支持 4.3 版。
GLEW 从图形驱动程序获取有关支持的扩展的信息。然而,实验性或预发布驱动程序可能不会通过标准机制报告每个可用的扩展,在这种情况下,GLEW 将报告它不受支持。为了规避这种情况,可以通过在调用 glewInit() 之前将 glewExperimental 全局开关设置为 GL_TRUE 来打开它,这样可以确保所有具有有效入口点的扩展都将被公开。

花了18天解决这些问题,很高兴现在可以开始实际编程了。

关于qt - 在 QT 中使用 glew 解析 OpenGL 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17424487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com