zoukankan      html  css  js  c++  java
  • GPU领悟

    原来平时玩的glsl和hlsl都是基于gpu寄存器和指令集之上的虚拟机里跑的,而这些寄存器和指令集的不同,也决定了shader的版本不同。

    而我们平时的数据,是这一的一个方向。从硬盘disk中读取到Memory中,也就是我们平时说的内存,这时候,显卡有2种办法得到这些数据,一种是直接从memory中传入到常量寄存器中,还有一种就是先从cpuMemory到GpuMemory也就是从内存到现存,然后再从现存到gpuCaches最后到了Gpu寄存器。

    这里还要顺便说下zbuffer,我们都知道zbuffer是视点到每个像素的距离,范围是0-1,但z值并非真正的笛卡尔坐标系中的距离,其实是一种相对度量。然后查到是这个公式:

    Z=(1<<n)*((a*z+b)/z)    a=f/(f-n)   b=(f*n)/(n-f)

    这里的f是视点到远截面的距离,n是视点到近截面的距离,z是视点到顶点的空间距离,n表示精度。

    也就是说,z的值不一定是线性变化的。比如在透视投影时候,z就不是。同一图元内部点的事均匀分布的。因为在光栅化的时候,并不是对每个像素的信息都是已知的。而是已知部分,对其余部分进行插值计算的。单并不是每次的线性插值计算,都可以计算出准确的值,比如有种情况就是与视点非垂直或平行,这样的话,越远的点,差异越明显,所以有时候我们在游戏中看到一些面片纠结在一起,就是这个原因引起的。

    为了避免这种情况的发生。设置近截面和远截面的时候,我们要尽量让两者的倍数差小于1k,其实,解决这个问题最直接的办法还是提高近截面到视点的距离。如果你不需要显示近处的物体的话这确实是个不错的办法。一般我们的显卡支持z值的精度是16位,24位,32位这几个,而这个精度越大,也就越能缓解两个非常相近的面随机遮挡的问题。

  • 相关阅读:
    mysql innodb ini
    innodb_flush_method
    mysql查询缓存
    查看表的索引
    mysql key PRI UNI MUL
    E160028
    mysql命令
    No identifier specified for entity
    在画图板中添加文本并更改文本颜色
    在Windows资源管理器中预览PowerShell文件
  • 原文地址:https://www.cnblogs.com/RenderLife/p/2845074.html
Copyright © 2011-2022 走看看