Текстура просто отображается как сплошной квадрат, окрашенный как основной пиксель моего изображения текстуры

При попытке рендеринга моей текстуры opengl я просто получаю твердый квад, который является базовым цветом моей текстуры.

Вот мой код для загрузки текстур и рендеринга / моих шейдеров

vertexShader.vert

#version 400 core

in vec3 in_Position;
in vec3 in_Color;
in vec2 in_TextureCoord;

out vec3 pass_Color;
out vec2 pass_TextureCoord;

int main(void) {
pass_Color = in_Color;
pass_TextureCoord = in_TextureCoord;
gl_Position = vec4(in_Position, 1.0);
}

fragmentShader.frag

#version 400 core

uniform sampler2D modelTexture;

in vec3 pass_Color;
in vec2 pass_TextureCoord;

out vec4 out_Color;

void main(void) {
out_Color = texture(modelTexture, pass_TextureCoord);
}

ЗАГРУЗКА ТЕКСТУРЫ

glEnable(GL_TEXTURE_2D);

glGenTextures(1, &textureID);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureID);

int channels;
rawPixelData = SOIL_load_image(fileLocation, &width, &height, &channels,  SOIL_LOAD_RGB);

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, rawPixelData);
glGenerateMipmap(GL_TEXTURE_2D);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,    GL_LINEAR_MIPMAP_LINEAR);

glBindTexture(GL_TEXTURE_2D, 0);

std::cout << "========================================" << std::endl;
std::cout << "LOADING TEXTURE: " << fileLocation << std::endl;
std::cout << "========================================" << std::endl;
std::cout << "| Width: " << width << ", Height: " << height << std::endl;
std::cout << "| Channels: " << channels << std::endl;
std::cout << "| Image ID: " << textureID << std::endl;
std::cout << "| Image Data: " << rawPixelData << std::endl;
std::cout << "| RESULT: " << SOIL_last_result() << std::endl;
std::cout << "========================================" << std::endl;
std::cout << "" << std::endl;

SOIL_free_image_data(rawPixelData);

ЧЕРТЕЖ ТЕКСТУРЫ

glEnable(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, model->getTexture()->getTextureID());
glUniform1i(glGetUniformLocation(program->getProgramID(), "modelTexture"), 0);

glBindVertexArray(model->getModel()->getVaoID());
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glEnableVertexAttribArray(2);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, model->getModel()->getIndiciesVBO());

glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glDisableVertexAttribArray(2);
glBindVertexArray(0);

glDisable(GL_TEXTURE_2D);

ВЕРТЫ / ИНДЕКСЫ / ЦВЕТА

float vertss[12] = { 0.5f,  -0.5f, 0.0f,
0.5f,   0.5f, 0.0f,
-0.5f,   0.5f, 0.0f,
-0.5f,  -0.5f, 0.0f};

float color[12] = {1.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 1.0f,
1.0f, 1.0f, 0.0f};

//this is my indicies dont question the name =P
unsigned int intPtr[6] = {0, 1, 2,
2, 3, 0};
this->indicies = intPtr;glGenVertexArrays(1, &vaoID);
glBindVertexArray(vaoID);

glGenBuffers(1, &vertsVBO);
glBindBuffer(GL_ARRAY_BUFFER, vertsVBO);
glBufferData(GL_ARRAY_BUFFER, 12 * sizeof(float), verts, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);

unsigned int colorVBO = 0;
glGenBuffers(1, &colorVBO);
glBindBuffer(GL_ARRAY_BUFFER, colorVBO);
glBufferData(GL_ARRAY_BUFFER, 12 * sizeof(float), color, GL_STATIC_DRAW);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);

glBindVertexArray(0);

glGenBuffers(1, &this->indiciesVBO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indiciesVBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 6 * sizeof(unsigned int), indicies, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

// в другом классе

float texCoords[8] = {0.0f, 0.0f,
1.0f, 0.0f,
1.0f, 1.0f,
0.0f, 1.0f};

glBindVertexArray(model->getVaoID());

unsigned int texturesVBO = 0;
glGenBuffers(1, &texturesVBO);
glBindBuffer(GL_ARRAY_BUFFER, texturesVBO);
glBufferData(GL_ARRAY_BUFFER, 8 * sizeof(float), texCoords, GL_STATIC_DRAW);
glEnableVertexAttribArray(2);
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);

glBindVertexArray(0);

ЧАСТЬ ПРОГРАММЫ SHADER

programID = glCreateProgram();
glAttachShader(programID, vertexID);
glAttachShader(programID, fragmentID);

glBindAttribLocation(programID, 0, "in_Position");
glBindAttribLocation(programID, 1, "in_Color");
glBindAttribLocation(programID, 2, "in_TextureCoord");

glLinkProgram(programID);
glValidateProgram(programID);

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]