Почему текстура правильно отображается в QT5, но не в QT6, используя Qopenglwidget?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Почему текстура правильно отображается в QT5, но не в QT6, используя Qopenglwidget?

Сообщение Anonymous »

Почему QT6 не является рендерингом текстуры, которая в порядке на QT5. Код компилируется и работает без каких -либо предупреждений или ошибок, просто вместо этого отображается белая прямоугольник. Я запускаю это в Windows

Вот минимальный пример https://wetransfer.com/downloads/9ba8d3 ... -896929444. f054 & t_network = link & t_rid = z29vz2xllw9hdxromnwxmti0ndu3otu3ndyxmtawmzgwntq = & t_s = download_link & t_ts = 1739433755
код основан на В этом примере https://learnopengl.com/getting-started/textures
спасибо!
ps Если вы попробуете проект, вы должны изменить Line stbi_load ("c: /temp/wall.jpg", ... к вашему пути к изображению. < /p>
Вот основной код, который охватывает задачу: < /p>
void GLWidget::initializeGL()
{
initializeOpenGLFunctions();
m_shaderProgram.addShaderFromSourceCode(QOpenGLShader::Vertex, R"(
in vec3 aPos;
in vec3 aColor;
in vec2 aTexCoord;

varying vec3 ourColor;
varying vec2 TexCoord;

void main()
{
gl_Position = vec4(aPos, 1.0);
ourColor = aColor;
TexCoord = aTexCoord;//vec2(aTexCoord.x, aTexCoord.y);
}
)");
m_shaderProgram.addShaderFromSourceCode(QOpenGLShader::Fragment,R"(
in vec3 ourColor;
in vec2 TexCoord;

// texture sampler
uniform sampler2D texture1;

void main()
{
vec4 colorfromtexture = texture2D(texture1, TexCoord);
gl_FragColor = colorfromtexture;
}
)");
m_shaderProgram.link();
m_shaderProgram.bind();

unsigned int iVBO, iEBO;
float vertices[] = {
// positions // colors // texture coords
0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, // top right
0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, // bottom right
-0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, // bottom left
-0.5f, 0.5f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f // top left
};
unsigned int indices[] = {
0, 1, 3, // first triangle
1, 2, 3 // second triangle
};

glGenBuffers(1, &iVBO);
glGenBuffers(1, &iEBO);

glBindBuffer(GL_ARRAY_BUFFER, iVBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, iEBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);

// position attribute
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
// color attribute
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(3 * sizeof(float)));
glEnableVertexAttribArray(1);
// texture coord attribute
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(6 * sizeof(float)));
glEnableVertexAttribArray(2);

// load and create a texture
// -------------------------
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture); // all upcoming GL_TEXTURE_2D operations now have effect on this texture object
// set the texture wrapping parameters
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // set texture wrapping to GL_REPEAT (default wrapping method)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
// set texture filtering parameters
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// load image, create texture and generate mipmaps
int width, height, nrChannels;
// The FileSystem::getPath(...) is part of the GitHub repository so we can find files on any IDE/platform; replace it with your own image path.
unsigned char *data = stbi_load("c:/temp/wall.jpg", &width, &height, &nrChannels, 0);
if (data)
{
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
glGenerateMipmap(GL_TEXTURE_2D);
}
else
{
qDebug()

Подробнее здесь: https://stackoverflow.com/questions/794 ... englwidget
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Cmake не находит QT, когда QT5 и QT6 установлены на базе Linux и Debian
    Anonymous » » в форуме Linux
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • SFML Sprite чертеж пустой текстура текстура
    Anonymous » » в форуме C++
    0 Ответы
    43 Просмотры
    Последнее сообщение Anonymous
  • Как правильно масштабировать изображения для высокого разрешения в Qt5?
    Anonymous » » в форуме C++
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • GlReadPixels() не может получить правильную информацию о QOpenGLWidget
    Anonymous » » в форуме C++
    0 Ответы
    45 Просмотры
    Последнее сообщение Anonymous
  • Изменение родительского элемента QOpenGLWidget с QMainWindow на QMdiSubWindow не работает должным образом.
    Anonymous » » в форуме C++
    0 Ответы
    53 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»