opengl对齐纹理坐标

时间:2014-12-05 13:03:45

标签: c++ opengl reflection textures glm-math

我尝试在渲染到纹理的平面上模拟反射。 我唯一的问题是如何正确调整纹理坐标到当前视图。

在着色器中,我将纹理坐标与旋转矩阵相乘。 旋转矩阵设置为:

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步:绘制真实模型

1 个答案:

答案 0 :(得分:0)

vec4 texcoord = texturematrix*vec4(VertexIn.texcoord,1.0,1.0);
好吧,一个错误是第三个坐标。它必须是0.0。 现在它看起来更好,但仍然是错误的。我必须将当前的眼睛方向添加到摄像机位置角度

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