OpenGL выравнивание координат текстуры

0

Я пытаюсь имитировать отражение на плоскости с рендерингом текстуры. Моя единственная проблема заключается в том, как правильно отрегулировать координаты текстуры для текущего вида.

В шейдере множится координаты текстуры с матрицей вращения. Матрица вращения установлена с:

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: я рисую реальную модель

  • 0
    Можете ли вы рассказать о том, как устроена ваша сцена, что вы хотите отразить и что вы визуализировали в своей текстуре?
Теги:
reflection
opengl
textures
glm-math

1 ответ

0
vec4 texcoord = texturematrix*vec4(VertexIn.texcoord,1.0,1.0);

ОК, одна ошибка была третьей координатой. он должен быть 0.0. теперь он выглядит лучше, но все же ошибается. я должен добавить текущее направление глаз к углу местоположения камеры

http://fs1.directupload.net/images/141207/temp/7wk8lvms.png

Ещё вопросы

Сообщество Overcoder
Наверх
Меню