首页 > 技术文章 > Projective Texture Mapping - 投影纹理

redips-l 2018-02-27 11:30 原文

昨天导师让写一个投影纹理,将一个相机渲染的图片的一部分投影到另外一个相机里面,目的是无缝的拼接。

投影纹理就和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);
} 

 

推荐阅读