zoukankan      html  css  js  c++  java
  • 纹理投影

    在ShadowMap中有用一到一种技术就要纹理映射,一般我们在做模型的时候,又美术手动设置模型的UV坐标,在渲染时候用UV坐标去查询纹理。

    在有情况下,我们根本知道UV坐标,那如何查询纹理呢?比如ShadowMap中,我们生成了depthMap那第二次渲染时候,如果使用这张贴图呢?

    这里就得用到纹理投影

    纹理映射字面上理解,就是把一张纹理投影到一个平面上,类似投影仪一样。这张说法很形象,但是实际做的时候正好相反!

    做法流程是把模型贴到NDC,就是把模型坐标系变换到投影坐标,再规范到[0,1]。

    纹理的投影的流程根据一张图可以很形象的表述

    这张图片出于 《GPU编程- CG语言》作者写的很好,左边正常渲染流程的模型变换是从Modle->World->View->project 最终变换一个规则体 CVV空间中,PS:Range[-W,W],不是-1 和1 ,如果要变换到[-1,1]中那么 position.xyz =position.xyz/position.w

    。在CVV空间中做裁剪,裁剪完投影。右边这种图片唯一的区别在于最后投影完 坐标要变换到[0,1]的纹理坐标中,上面说到了 经过MVP完是在[-w,w]中如果要变换到[0,1]中 我们可以

    Step1:position.xyz =position.xyz/position.w ->[-1,1]

    Step2: position.xyz = position * 0.5 + 0.5->[0,1];

    这样就是用tex2d(sample,postion.xy)

    基本教程上面方式是下面这种

    顶点变换的时候 在MVP后面在乘上一个变换矩阵biasmatrix

    这矩阵是就是XYZ 分量 乘0.5 + 0.5作,

    ,但是上面说过过去MVP变换的坐标系应该是在[-w,w]中

    那么实际的坐标[0,w],所以 tex2d(sample,Position.xy/position.w);

    或者你用一个系统提供的函数tex2dproj(sample,postion);

  • 相关阅读:
    计算GPS WGS_84 两点的距离
    极路由4_开ssh_刷breed
    aes-256-gcm_python3_php7_golang
    nginx_非标准端口_同端口_http_自动跳转_https
    配置sshd_除了特定ip外_仅密钥登录
    使用scp命令实现服务器之间文件传输
    Java防止重复提
    mysql使用SUBSTRING_INDEX截取部分字符串
    SEO大杀器rendertron安装
    PIC16 bootloader之I2C bootloader
  • 原文地址:https://www.cnblogs.com/wbaoqing/p/3685632.html
Copyright © 2011-2022 走看看