Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ opengl对齐纹理坐标_C++_Opengl_Reflection_Textures_Glm Math - Fatal编程技术网

C++ opengl对齐纹理坐标

C++ opengl对齐纹理坐标,c++,opengl,reflection,textures,glm-math,C++,Opengl,Reflection,Textures,Glm Math,我尝试使用“渲染到纹理”(render to texture)模拟平面上的反射。 我唯一的问题是如何将纹理坐标正确调整到当前视图 在着色器中,我将纹理坐标与旋转矩阵相乘。 旋转矩阵设置为: 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);

我尝试使用“渲染到纹理”(render to texture)模拟平面上的反射。 我唯一的问题是如何将纹理坐标正确调整到当前视图

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

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);
第三步:我画真实的模型

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


能否详细说明场景的构造方式、要镜像的内容以及渲染到纹理的内容`