Я пытаюсь имитировать отражение на плоскости с рендерингом текстуры. Моя единственная проблема заключается в том, как правильно отрегулировать координаты текстуры для текущего вида.
В шейдере множится координаты текстуры с матрицей вращения. Матрица вращения установлена с:
glm::vec3 v1 = glm::vec3(0.0f,1.0f,0.0f);
glm::vec3 v2=glm::vec3(camlocation[0],camlocation[1],0.0);
if(glm::length(v2)!=0.0f)
{
v2=glm::normalize(v2);
}
float alpha=glm::angle(v1,v2);
texturematrix=glm::mat4(1.0f);
texturematrix = glm::translate(texturematrix,glm::vec3(0.5f,0.5f,0.0f));
texturematrix = glm::rotate(texturematrix,alpha,glm::vec3(0.0f,0.0f,1.0f));
texturematrix = glm::translate(texturematrix,glm::vec3(-0.5f,-0.5f,0.0f));
Я не знаю, правильно ли это, но отражение выглядит неправильно.
редактировать:
Шаг 1: я привязываю фреймбуфер и текстуру отражения, а также отрисую свою модель, например, чайник. в шейдере я инвертировать Z-позицию.
Шаг 2: Я снова привяжу текстуру и нарисую плоскость. в шейдере я использую
vec4 texcoord = texturematrix*vec4(VertexIn.texcoord,1.0,1.0);
vec4 firsttex = texture(reflectionMap,texcoord.xy);
Шаг 3: я рисую реальную модель
vec4 texcoord = texturematrix*vec4(VertexIn.texcoord,1.0,1.0);
ОК, одна ошибка была третьей координатой. он должен быть 0.0. теперь он выглядит лучше, но все же ошибается. я должен добавить текущее направление глаз к углу местоположения камеры