ComputeScreenPos 详解
来源:互联网 发布:c语言点滴pdf百度云 编辑:程序博客网 时间:2024/06/05 05:32
转载自https://chengkehan.github.io/ComputeScreenPos.html
ComputeScreenPos 这个函数被定义在 UnityCG.cginc 里,作用是获得一个投影点对应的屏幕坐标点。
由于这个函数返回的坐标值并未除以其次坐标,所以如果直接使用函数的返回值的话,需要这样做。
也可以自己处理其次坐标
下面来看一下 ComputeScreenPos 这个函数的具体实现。最初看到这些代码的时候,并不明白其实现原理。因为和我自己的实现代码差别很大,下面列出我自己的实现。
这是第一版实现,原理很简单,先除以其次坐标,再映射到 0 到 1 的范围内。这里所有的操作是在顶点阶段实现的,对于面数较低的模型可能会有插值不精确的问题,所以可以把除以其次坐标的步骤移动到像素阶段。下面是第二版
还有一步,就是把 0.5 提取出来。
到此为止,我们再把自己写的实现和 UnityCG.cginc 中的实现对比下,还是有点差距,但是似乎很接近了。下面我们把 UnityCG.cginc 的实现简化下,去除一些干扰因素。于是就变成了下面这样。
是不是干净和很多,这样再来对比一下,虽然外形上有点差距,但是其实是一模一样了。至此分析就完成了,平时使用的时候还是推荐使用 Unity 定义好的工具函数,因为这样可以避免很多平台相关以及自己考虑不周的问题,但是作为学习还是可以自己实现一遍,这样更能加深理解。
0 0
- ComputeScreenPos 详解
- 结合透视投影变换,分析unity3d shader 中的 ComputeScreenPos这个内置函数
- 详解
- 详解
- 详解
- 详解
- &,&&,|,||详解
- 详解
- Scala详解--------基础知识详解
- Spring详解-----------事务详解
- github 详解详解
- InputFilter详解、TextWatcher详解
- Spring详解-----------事务详解
- 【词汇详解】事务详解
- Session 详解
- Session 详解
- sizeof详解
- 端口详解
- spring mvc对静态资源的处理
- 新的软件架构: Synergistic Software Architecture
- HDU 5575 Discover Water Tank 并查集+左偏树
- 文件上传
- IO多路复用 epoll
- ComputeScreenPos 详解
- JavaEE程序猿之吃的是草挤出的是奶(12)
- 数据库隔离级别详解
- in_array()
- QT定时器的一些注意
- ab 工具安装
- iOS post 的坑
- memcached 相关操作
- 获取超链接后的参数