gpt4 book ai didi

c++ - 尝试使用 glTexImage2D 加载 2d 纹理,但只是变得空白

转载 作者:搜寻专家 更新时间:2023-10-31 02:22:03 24 4
gpt4 key购买 nike

我正在尝试创建一个二维纹理以显示在我的 Qt/OpenGL 应用程序上。然后我创建了一个填满屏幕的四边形来放置它,但我得到的只是一个没有任何错误的白屏。有人看到我的代码有什么问题吗?

#include "AppGLWidget.h"

#include <iostream>

AppGLWidget::AppGLWidget(QWidget *parent) : QGLWidget(parent),
mnRange(100),
mcDisplayedImage(512,512,QImage::Format_ARGB32)
{
mcDisplayedImage.fill(qRgb(100,0,0));

mcDisplayedImage = QGLWidget::convertToGLFormat(mcDisplayedImage);

int value;
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &value);
}

AppGLWidget::~AppGLWidget(void)
{
}

void AppGLWidget::initializeGL() {
glClearColor(0, 1, 0, 1);
glPushMatrix();
glOrtho(0, size().width(), size().height(), 0, -1, 1);
glViewport(0, 0, (GLint)size().width(), (GLint)size().height());
glDisable(GL_DEPTH_TEST);
glShadeModel(GL_FLAT);

glEnable(GL_TEXTURE_2D);
glGenTextures(1,&mcTextureObj);
glBindTexture(GL_TEXTURE_2D,mcTextureObj);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, mcDisplayedImage.width(), mcDisplayedImage.height(), 0,
GL_RGBA, GL_UNSIGNED_BYTE, NULL);

glDisable(GL_TEXTURE_2D);

// check OpenGL error
GLenum err;
while ((err = glGetError()) != GL_NO_ERROR) {
std::cerr << "OpenGL error: " << err << std::endl;
}
}

void AppGLWidget::resizeGL(int w, int h)
{
glPopMatrix();
glPushMatrix();
glOrtho(0, w, h, 0, -1, 1);
glViewport(0, 0, w, h);
}

void AppGLWidget::paintGL() {

glBindTexture(GL_TEXTURE_2D, mcTextureObj);

glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, mcDisplayedImage.width(), mcDisplayedImage.height(),
GL_RGBA, GL_UNSIGNED_BYTE, mcDisplayedImage.bits());

glBegin(GL_QUADS);

glTexCoord2i(0,0); glVertex2i(0,lnHeight);
glTexCoord2i(0,1); glVertex2i(0,0);
glTexCoord2i(1,1); glVertex2i(lnWidth,0);
glTexCoord2i(1,0); glVertex2i(lnWidth,lnHeight);

glEnd();

// check OpenGL error
GLenum err;
while ((err = glGetError()) != GL_NO_ERROR) {
std::cerr << "OpenGL error: " << err << std::endl;
}
}

最佳答案

GL_TEXTURE_2D 需要 glEnable() 进行渲染。

现在您在 initializeGL()glDisable() 并保持原样。

关于c++ - 尝试使用 glTexImage2D 加载 2d 纹理,但只是变得空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30741474/

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