2014-12-05 127 views
0

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

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

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

你能细说场景是如何构建的,要镜像和你呈现给你的纹理什么什么?' – 2014-12-05 15:05:11

回答