Привязка текстуры для рендеринга сетки?C++

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

Сообщение Anonymous »

Я столкнулся с ошибкой привязки текстур для рендеринга сетки. Основная идея заключается в том, что у меня есть класс модели, который имеет вектор сеток. У меня есть цикл for, который сначала связывает текстуру, назначенную этой сетке, а затем отображает фактическую сетку. (Модель загружена с помощью Assimp)
Это функция рендеринга в родительском классе модели

Код: Выделить всё

void GameObject::render(Shader* shader, const glm::mat4& projection, const glm::mat4& view) {
shader->use(); // enable shader

// create model matrix
glm::mat4 model(1);

model = glm::translate(model, _transform.getPosition()); // move

glm::vec3 rotation = _transform.getRotation();
model = glm::rotate(model, glm::radians(rotation.x), glm::vec3(1, 0, 0));
model = glm::rotate(model, glm::radians(rotation.y), glm::vec3(0, 1, 0));
model = glm::rotate(model, glm::radians(rotation.z), glm::vec3(0, 0, 1));

model = glm::scale(model, _transform.getScale()); // scale

// apply matrices
shader->setMatrix4x4("u_projection", projection);
shader->setMatrix4x4("u_view", view);
shader->setMatrix4x4("u_model", model);

// render model
_model->render(shader);

glUseProgram(0); // disable shader
}
Это функция рендеринга в модели, где я привязываю текстуру перед рендерингом сетки.

Код: Выделить всё

void Model::render(Shader* shader) {
// render each mesh, but only after texture bind
for (unsigned int i = 0; i < _meshes.size(); i++) {
unsigned int matIndex = _meshToTexture[i];

// make sure element at matIndex can be
// in the texture list and check if its loaded
if (matIndex < _textures.size() && _textures[matIndex]) {
// if RGBA -> enable transparency
if (_textures[matIndex]->getChannels() == 4) {
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
}

_textures[matIndex]->use(); // bind texture
}

_meshes[i]->render();
glDisable(GL_BLEND); // disable transparency
}
}
Это функция привязки внутри Texture2D, которая представляет собой класс, содержащий идентификатор текстуры.

Код: Выделить всё

void Texture2D::use() {
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, _ID);
}
Фрагментный шейдер

Код: Выделить всё

#version 400 core

out vec4 color;

// from .vert
in vec2 uv0;
in vec2 normals0;

uniform sampler2D u_texture0;

void main() {
color = texture(u_texture0, uv0);
}
Это результат текущего кода:
Изображение


Подробнее здесь: https://stackoverflow.com/questions/790 ... -rendering
Ответить

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

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

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

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

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