Это функция рендеринга в родительском классе модели
Код: Выделить всё
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
}
}
Код: Выделить всё
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
Мобильная версия