Почему 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
Почему текстура правильно отображается в QT5, но не в QT6, используя Qopenglwidget? ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Cmake не находит QT, когда QT5 и QT6 установлены на базе Linux и Debian
Anonymous » » в форуме Linux - 0 Ответы
- 23 Просмотры
-
Последнее сообщение Anonymous
-