Projective Texture Mapping - 投影纹理

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

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

 

转载于:https://www.cnblogs.com/redips-l/p/8477956.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值