昨天导师让写一个投影纹理,将一个相机渲染的图片的一部分投影到另外一个相机里面,目的是无缝的拼接。
投影纹理就和shadow map一样,都是将片元转换到另外一个相机/光源坐标系下,投影后找到对应的纹素。
相机1:
相机2:
将相机2中红框中内容投影到相机1中:
而如果直接纹理映射会扭曲错位:
------------------------------------------------------------------------------------------------------------------------------------------
没睡午觉导致的一个bug - 求投影纹理坐标的代码写在顶点着色器里了,导致的结果和直接纹理映射是一样的。应该写在片元着色里 ==!
------------------------------------------------------------------------------------------------------------------------------------------
贴一下fs的代码
#version 430 core
out vec4 color;
in vec2 TexCoord;
in vec3 PInWorld;
uniform sampler2D materialTexture;
uniform mat4 toCamera2;
uniform int renderMode;
uniform int projectionMode;
void main(){
vec2 tc = TexCoord;
if(projectionMode==0){
vec4 tmp = toCamera2*vec4(PInWorld,1.0f);
tc.x = clamp(tmp.x / tmp.w * 0.5f + 0.5f,0.0f,1.0f);
tc.y = clamp(tmp.y / tmp.w * 0.5f + 0.5f,0.0f,1.0f);
}
if(renderMode == 0) color = vec4(texture(materialTexture,tc).rgb*vec3(1,0.2,0.2),1);
else color = vec4(1,0,0,1);
}