Почему я не могу видеть свою текстуру в opengl
Stack over flow question: Title: Why cant I see my texture load Explanation: I have been trying to texture a cube I have created and I am not able to see the textures. I can just see a blank cube rendering. I have looked at the code to see if there is anything wrong with it however I don't see any problems but I think it is because I am new to OpenGL so maybe someone else can see what is wrong with the code. This is my texture code within vertex_array constructor: <pre lang="c++"> vertex_array::vertex_array(float* vertex_buffer, int num_of_floats, const std::string& texture_file) { glGenVertexArrays(1, &va_ID); glBindVertexArray(va_ID); glGenBuffers(1, &vb_ID); glBindBuffer(GL_ARRAY_BUFFER, vb_ID); glBufferData(GL_ARRAY_BUFFER, num_of_floats * sizeof(float), vertex_buffer, GL_STATIC_DRAW); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)(0 * sizeof(float))); glEnableVertexAttribArray(0); glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)(3 * sizeof(float))); glEnableVertexAttribArray(1); glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); 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_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); int width, height, nrChanells; stbi_set_flip_vertically_on_load(true); unsigned char* data = stbi_load(texture_file.c_str(), &width, &height, &nrChanells, 0); if (data) { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data); glGenerateMipmap(GL_TEXTURE_2D); } else {std::cout << "failed to load texture" << std::endl;} stbi_image_free(data); glGenBuffers(1, &ib_ID); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ib_ID); glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(index_buffer), index_buffer, GL_STATIC_DRAW); glBindVertexArray(0); }
Это мой шейдер:
#version 330 core layout(location = 0) in vec4 position; layout(location = 1) in vec2 texCoord; out vec2 v_TexCoord; uniform mat4 view; uniform mat4 projection; void main() { v_TexCoord = texCoord; gl_Position = projection * view * position; }; #version 330 core layout(location = 0) out vec4 color; in vec2 v_TexCoord; uniform sampler2D u_Texture; void main() { vec4 texColor = texture(u_Texture, v_TexCoord); color = texColor; //color = vec4(0.0, 0.7, 0.4, 1.0); };
и это мой основной код приложения:
vertex_array va_1(cube1, 40, "resources/blocks.png"); shader shader_1("src/shader1.shader"); va_1.bind(); shader_1.bind();
Что я уже пробовал:
Я пробовал проверить код_____________________________
KarstenK
Используйте сплошной цвет для вашего кода рендеринга, чтобы увидеть, если он рендерится. Убедитесь, что текстура загружается.
Я не уверен, но действительно ли void main() верен?
BerthaDusStuf
Я попробовал использовать сплошной цвет, но он по-прежнему ничего не показывал. Также void main() верен, но спасибо.
KarstenK
попробуйте перезапустить проект с помощью какого-нибудь рабочего примера приложения.
BerthaDusStuf
что вы подразумеваете под каким-то рабочим образцом приложения?