gpt4 book ai didi

c++ - 在 opengl 矩形上使用着色器会导致它消失

转载 作者:行者123 更新时间:2023-11-28 01:20:59 24 4
gpt4 key购买 nike

<分区>

我目前正在尝试使用 OpenGL 将纹理渲染到我一直在研究的游戏引擎中,但遇到了一个我不确定如何解决的问题。当在矩形上使用我的着色器渲染纹理时,它根本不显示。

我可以注释掉一行代码,然后会显示一个黑色矩形,所以我知道该矩形至少可以正确渲染。问题是当我要求 OpenGL 使用我的着色器程序时。

此处注释掉了 ourshader.Use

// Clear the colorbuffer
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);

//ourShader.Use(); <----this is using the shader
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture);
glUniform1i(glGetUniformLocation(ourShader.Program, "ourTexture"), 0);

// Draw container
glBindVertexArray(VAO);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
glBindVertexArray(0);

我明白了

没有我就得到

这对我来说很奇怪,因为在另一个测试项目中我可以使用完全相同的代码渲染纹理。

碎片着色器

#version 330 core
in vec3 ourColor;
in vec2 TexCoord;

out vec4 color;

// Texture samplers
uniform sampler2D ourTexture1;

void main()
{
// Linearly interpolate between both textures (second texture is only slightly combined)
color = texture(ourTexture1, TexCoord);
}

垂直着色器

#version 330 core
layout (location = 0) in vec3 position;
layout (location = 1) in vec3 color;
layout (location = 2) in vec2 texCoord;

out vec3 ourColor;
out vec2 TexCoord;

void main()
{
gl_Position = vec4(position, 1.0f);
ourColor = color;
// We swap the y-axis by substracing our coordinates from 1. This is done because most images have the top y-axis inversed with OpenGL's top y-axis.
// TexCoord = texCoord;
TexCoord = vec2(texCoord.x, 1.0 - texCoord.y);
}

我已经复制并粘贴了代码,但似乎无法获得相同的结果。问题之一可能是我在构建为 .dll 的项目中渲染它,然后在同一解决方案的另一个项目中引用它,但我知道 OpenGL 正在工作,因为我仍然可以渲染矩形?

我还通过绘制一个简单的无纹理三角形对此进行了测试,效果很好。

我什至可以在它上面使用着色器并乱用颜色等等,那么为什么这个纹理着色器不起作用?特别令人困惑,因为我已经在另一个项目中测试了这个着色器并且它工作正常?所以我很困惑,不得不在这里寻求帮助。

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