当前位置: 首页 > news >正文

数字人民币app开发公司成都seo招聘信息

数字人民币app开发公司,成都seo招聘信息,网站后台慢,装修设计公司网站排名模板缓存是一个用于获得某种特效的离屏缓存,模板缓存的分辨率与后台缓存和深度缓存的分辨率完全相同,所以像素也是一一对应的,模板缓存允许我们动态的,有针对性的决定是否将某个像素写入后台缓存中。 例如实现镜面效果时&#xf…

模板缓存是一个用于获得某种特效的离屏缓存,模板缓存的分辨率与后台缓存和深度缓存的分辨率完全相同,所以像素也是一一对应的,模板缓存允许我们动态的,有针对性的决定是否将某个像素写入后台缓存中。

例如实现镜面效果时,我们只需在在镜子所在平面中绘制某个特定物体的映像,但是如果想只在镜面所对应的子区域中显示物体的映像,这是就可用模板缓存来阻止物体映像在非镜面区域中的绘制,a中镜面和墙壁映像都会被绘制,b中阻止了非镜面区域的绘制

模板缓存的使用

为了使用模板缓存,在Direct3D初始化时需要查询当前设备是否支持模板缓存,如果支持还需要将其启用。

Device->SetRenderState(D3DRS_STENCILENABLE, true);
//do stencil work
Device->SetRenderState(D3DRS_STENCILENABLE, false);

我们可以使用IDirect3DDevice9::Clear方法将模板缓存清空为一个默认值,该方法也可对后台缓存和深度缓存进行清空操作

Device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER | D3DCLEAR_STENCIL, 0x00000000, 1.0f, 0);

在第三个参数中增加了标记D3DClEAR_DTENCIL表明我们要对模板缓存、目标缓存(后台缓存)和深度缓存进行清空操作,第6个参数用于指定要将模板缓存清为何值。

模板缓存格式的查询

模板缓存可与深度缓存一同创建,为深度缓存指定格式时,我们可以同时指定模板缓存的格式,模板缓存和深度缓存共享同一个离屏的表面缓存,而每个像素的内存段被划分为若干部分,分别于某种特定缓存相对应例如:

D3DFMT_D24S8:创建一个32位深度/模板缓存,其中每个像素的24位指定给深度缓存,8位指定给模板缓存
D3DFMT_D24X4S4:创建一个32位深度/模板缓存,每个像素的24位指定给深度缓存,4位指定给模板缓存,其余4位不使用
D3DFMT_D15S1:创建一个16位深度/模板缓存,每个像素的15位指定给深度缓存,1位指定给模板缓存
一些格式没有模板缓存分配任何空间,例如D3DFMT_D32格式仅创建一个32位的深度缓存

模板测试

判定是否将某个像素写入后台缓存的决策过程过程称为模板测试,假定模板已处于启用状态则每个像素都需要进行模板测试。

(ref & mask) ComparisonOperation (value & mask)
左操作数LHS:由应用程序定义的模板参考值ref和模板掩码mask通过按位与运算得到
右操作数RHS:由当前进行测试的像素的模板缓存中的数值value与模板掩码mask按位与得到
运算结果为true则将该像素写入后台缓存,如果为false将阻止该像素被写入后台缓存,当一个像素不被写入后台缓存时,也 不会被写入深度缓存。

模板测试的控制

模板参考值
模板参考值ref的默认值为0,我们可用D3DRS_STENCILREF绘制状态改变该值,我们倾向于使用16进制数,这样可使整数的位排列一目了然,方便按位逻辑运算

Device->SetRenderState(D3DRS_STENCILREF, 0x1);

模板掩码
模板掩码用于屏蔽ref和value变量中某些位,默认值为0xffffffff,表会不屏蔽任何位,可借助绘制状态D3DRS_STENCILMASK来修改

//屏蔽了高16位
Device->SetRenderState(D3DRS_STENCILMASK, 0x0000ffff);

模板值
该值是当前待测试像素在模板缓存中的对应值,不能显式地单独设置模版值,但是可对模板缓存进行清空操作,还可以用模板的绘制状态控制将要写入模板缓存的内容。

比较运算
可通过绘制状态D3DRS_STENCILFUNC来设置比较运算符函数,参数可用D3DCMPFUNC类型枚举
D3DCMP_NEVER:模板测试总是失败,即比较函数总是返回false
D3DCMP_LESS:LHS<RHS,则模板测试成功
D3DCMP_EQUAL:LHS=RHS,则模板测试成功
D3DCMP_LESSEQUAL:LHS<=RHS
D3DCMP_GREATER:LHS>RHS
D3DCMP_NOTEQUAL:LHS!=RHS
D3DCMP_GREATEREQUAL:LHS>=RHS
D3DCMP_ALWAYS:模板测试总是成功,返回true

模板缓存的更新

除了决定一个具体像素是否应被写入后台缓存,我们还可以基于以下3种可能的情形定义模板缓存中的值如何进行更新

第i行、第j列的像素模板测试失败,可借助绘制状态D3DRS_STENCILFAIL将模板缓存中处于同样位置的项的更新方式定义如下

Device->SetRenderState(D3DRS_STENCILFAIL, StencilOperation);

第i行、第j列的像素深度测试失败,可借助绘制状态D3DRS_STENCILZFAIL将模板缓存中处于同样位置的项的更新方式定义如下

Device->SetRenderState(D3DRS_STENCILZFAIL, StencilOperation);

第i行、第j列的像素深度测试、模板测试均成功,可借助绘制状态D3DRS_STENCILPASS将模板缓存中处于同样位置的项的更新方式定义如下

Device->SetRenderState(D3DRS_STENCILPASS, StencilOperation);

StencilOperation可取以下预定义常量
D3DSTENCILOP_KEEP:不更新模板缓存中的值(保留当前值)
D3DSTENCILOP_ZERO:将模板缓存中的值设为0
D3DSTENCILOP_REPLACE:用模板参考值替代模板缓存中的对应值
D3DSTENCILOP_INCRSAT:增加模板缓存中的对应数值,如果超过最大值,则取最大值
D3DSTENCILOP_DECRSAT:减少模板缓存中的对应数值,如果小于最小值,则取最小值
D3DSTENCILOP_INVERT:模板缓存中的对应值按位取反
D3DSTENCILOP_INCR:增加模板缓存中的对应数值,如果超过最大值,则取0
D3DSTENCILOP_DECR:减少模板缓存中的对应数值,如果小于0,则取最大值

模板写掩码

除了模板绘制状态,还可设置写掩码,该值可屏蔽我们将写入模板缓存的任何值的某些位,可用绘制状态D3DRS_STENCILWRITEMASK来设定写掩码的值,默认值为0xffffffff

Device->SetRenderState(D3DRS_STENCILWRITEMASK, 0x0000ffff);

镜面效果例程

程序中实现镜面效果需要解决俩个问题
1.了解对于任意平面物体如何成像 
2.必须将某一表面区域"标记"为镜面

D3DX库提供了用于创建对于任意平面的镜像变换矩阵

D3DXMATRIX* D3DXMatrixReflect(D3DXMATRIX *pOut,		CONST D3DXPLANE *pPlane
);

3种其他类型的镜像变换矩阵,分别为相对于3个标准坐标平面(yz平面、xz平面及xy平面)所做的镜像变换

R_{yz}=\begin{bmatrix} -1 & 0 & 0 &0 \\ 0&1 & 0 &0 \\ 0& 0& 1 &0 \\ 0& 0 &0 &1 \end{bmatrix}  R_{xz}=\begin{bmatrix} 1 & 0 & 0 &0 \\ 0&-1 & 0 &0 \\ 0& 0& 1 &0 \\ 0& 0 &0 &1 \end{bmatrix}  R_{xy}=\begin{bmatrix} 1 & 0 & 0 &0 \\ 0&1 & 0 &0 \\ 0& 0& -1 &0 \\ 0& 0 &0 &1 \end{bmatrix}

为求得一个点相对于yz平面所成的像,只需将该点的x分量取反,类似xz平面将y分量取反,xy平面将z分量取反

效果实现

实现镜面效果时,一个物体仅当位于镜面之前时才对其进行成像计算,然而我们不想进行空间测试以判断某物体是否位于镜面之前,因为这样会使问题变得更加复杂,为了简化简化这个问题,无论物体在何处,都计算其成像并进行绘制,然后借助模板缓存区阻止部分区域的绘制

1.往常绘制整个场景(地板、墙壁、镜面、茶壶)但先不绘制茶壶的映像
2.将模板缓存清0
3.将构成镜面的图元绘制到模板缓存中,将模板测试设置为总是true,并指定如果测试通过,模板缓存值被替换为1,所以镜面外的区域像素值则为0
4.将茶壶的映像绘制到后台缓存和模板缓存中,如果通过了模板测试,将茶壶的映像仅绘制到后台缓存中,模板测试成功条件为模板缓存值为1,这样茶壶仅被绘制到镜面区域中
 

http://www.hengruixuexiao.com/news/28940.html

相关文章:

  • 洛阳做网站找哪家好新站点seo联系方式
  • 网站后台模板 免费世界大学排名
  • 使用cdn做网站内容加速青岛谷歌seo
  • 如何学好网站开发在线客服系统
  • wap建站php源码如何推广外贸型网站
  • 长沙企业建自己怎么给网站做优化排名
  • 建设网站的成本有哪些seo综合查询是什么意思
  • 公司网站建设模板营销策略有哪些
  • 开发网站去哪里学公司网络营销推广软件
  • 利用淘宝做网站卖货到国外网络推广方法大全
  • 用axure做网站原型图广东网络推广运营
  • 广东东莞1例新冠状网站百度关键词优化
  • 在线教育网站开发广州建网站的公司
  • 做电力招聘的有哪些网站南京seo推广优化
  • 如何在国内做网站中央刚刚宣布大消息
  • 建设澳洲企业网站网络推广方法怎么做
  • 微信网站需要备案吗网站设计制作公司
  • php做网站很快嘛西地那非片多少钱一盒
  • 网站设计与开发专家潍坊关键词优化排名
  • 保定网站建设北京软件培训机构前十名
  • 太原网站搜索排名google永久免费的服务器
  • 网站建设实验目的什么是优化设计
  • 长沙seo优化厦门seo推广优化
  • 贵阳经开区建设管理局网站网络营销的十种方法
  • 龙岩网站建设龙岩网站制作网站做成app
  • 陇西 网站开发网站查询关键词排名软件
  • 白云怎样优化网站建设谷歌chrome浏览器下载
  • 电子商务平台怎么注册seo技术培训学校
  • 网站内容及实现的方式登录百度
  • 做php网站用mvc多吗百度数据查询