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位这几个,而这个精度越大,也就越能缓解两个非常相近的面随机遮挡的问题。

  • 相关阅读:
    CREATE AGGREGATE
    技术文档列表
    jQuery 判断表单中多个 input text 中至少有一个不为空
    Java实现 蓝桥杯 算法提高 奥运会开幕式
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最大值路径
    Java实现 蓝桥杯 算法提高 最大值路径
    Java实现 蓝桥杯 算法提高 最大值路径
  • 原文地址:https://www.cnblogs.com/RenderLife/p/2845074.html
Copyright © 2011-2022 走看看