wing of prey 座舱视角渲染方式调查

为了实现一个能够显示飞行员的座舱视角,调查了pix了模拟空战游戏wing of prey,以下是这次的调查记录。

首先通过pix进入游戏(需管理员身份开启),在option中开启座舱视角,按F12记录当前帧的渲染信息,退出游戏后,可以在pix的窗口中看到刚刚截取的一帧的详细渲染信息。

测试一:座舱视角是由几个camera完成的

由于每次准备camera时候,都会设置camera的投影矩阵,所以这里通过搜索以下字符串,来确定座舱视角是由几个摄像机完成的。

```IDirect3DDevice9::SetTransform(D3DTS_PROJECTION```

通过搜索结果、以及对应的渲染画面发现,在所截取的一帧中,为camera设置了两次D3DTS_PROJECTION,而两次的画面,也正式分别渲染座舱,和座舱外世界。因此在WOP中的座舱视角,是由两个相机共同完成的,暂且称两个camera分别为:“近相机”、“远相机”。其中,近相机负责渲染机舱以及机舱内设备,远相机负责渲染除此之外的其他物体。

测试二:近相机的far clip是多少,远相机的near clip是多少。

当飞机降落在地面上时,在游戏中调整camera朝向地面,按下F12截取这一帧的渲染信息,进行分析。

再次通过查找```IDirect3DDevice9::SetTransform(D3DTS_PROJECTION```可以找到设置camera投影矩阵的地方,通过该方法的第二个参数所传递的投影矩阵,可以算出两个相机的clip各是多少,然而这里得到的是一个内存地址,暂时没有找到矩阵本身信息。

测试三:muzzle flash由哪个相机负责渲染。

在飞机开枪时,按下F12,截取出一帧带有muzzle flash的渲染信息,进行分析。

通过搜索```IDirect3DDevice9::SetTransform(D3DTS_PROJECTION```,能够选定远相机和近相机分别渲染了什么,最终发现,muzzle flash是和机舱是同一个相机渲染出来的。

远相机是否渲染了muzzle flash不确定,即使渲了也可能因为其near clip比muzzle flash位置远而也被剔除掉。

测试四:导弹是由哪个camera渲染的

进入游戏中的座舱视角,发射一枚导弹后按F12截取当前帧的渲染信息。

方法同上,最终发现,导弹和地形是由同一个camera渲染的。

这里猜测,由于远相机的near clip设置的值很合适,所以没有出现这些粒子被cull的问题。

测试五:翼尖尾流特效是由哪个camera负责渲染的

方法同上,不再赘述,如图所示,是用远相机进行渲染的。

最终方案

通过以上的测试,以及根据项目本身情况的分析,最终确定的方案如下图:

时间: 2024-08-14 17:52:49

wing of prey 座舱视角渲染方式调查的相关文章

opengl 渲染方式在屏 离屏 CPU

一.概念理解 OpenGL中,GPU屏幕渲染有以下两种方式: On-Screen Rendering 意为当前屏幕渲染,指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行. Off-Screen Rendering 意为离屏渲染,指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作. 二.离屏渲染的是是非非 相比于当前屏幕渲染,离屏渲染的代价是很高的,主要体现在两个方面: 创建新缓冲区 要想进行离屏渲染,首先要创建一个新的缓冲区. 上下文切换 离屏渲染的整个过程,需要多次切换上下文

QML的渲染方式相较于之前的版本也有了重大的更新(CPU线程负责绘制,GPU线程负责渲染),还有好多经常评论 good

作者:qyvlik链接:http://www.zhihu.com/question/38867614/answer/78583440来源:知乎著作权归作者所有,转载请联系作者获得授权. 做UI啊.如果是桌面应用,QML可以更快速.如果是手机UI,H5绝对占优. 毕竟Qt提供的那一套控件库更适合桌面应用,而当年诺基亚都开发了塞班和米果的QML手机控件库,现在Ubuntu,旗鱼,黑莓都有自己的QML手机控件库. 渲染性能上.QML有绝对统一的接口规范以及渲染机制.(跨平台是这样的). H5桌面系统一

模版+数据分离渲染方式的设计与实现

一 背景 1 现状 模版存放于后端 php输出页面html结构进行页面渲染 ajax请求,需要重渲结构时,php输出html结构 builder制作静态页面结构 jser完成页面交互逻辑开发 2 不足 模版数据无法存储本地,导致每次打开页面请求数据量巨大 数据每次要从接入层web服务器读取,没有合理利用CDN加速静态模版内容 联调成本较大,不利于前端控制页面展示和交互开发 3 解决方案 后端直接输出json数据 试图把渲染页面的模版存放在前端 4 技术路线 5 理论意义 利用CDN保存html模

设置IE渲染方式默认为最高(转)

现在有很多人的IE浏览器都升级到IE9以上了,所以这个时候就有又很多诡异的事情发生了,例如现在是IE9的浏览器,但是浏览器的文档模式却是IE8: 为了防止这种情况,我们需要下面这段代码来让IE的文档模式永远都是最新的: <!-- 避免IE使用兼容模式 --> <meta http-equiv="X-UA-Compatible" content="IE=edge"> 另一种更优化写法: <meta http-equiv="X-U

前端模板与渲染方式

1 页面级的渲染 再刚有web的时候,前端与后端的交互,非常直白,浏览器端发出URL,后端返回一张拼好了的HTML串.浏览器对其进行渲染.html中可能会混有一些php(或者php中混有一些html).在服务端将数据与模板进行拼装,生成要返回浏览器端的html串. 这与我们现在做一个普通网页没什么区别.只不过现在,我们更常使用模板技术来解决前后端耦合的问题. 前端使用模板引擎,在html中写一些标签,与数据与逻辑基本无关.后端在渲染的时候,解析这些标签,生成HTML串,如smarty.其实前端与

django中url路由配置及渲染方式

今天我们学习如何配置url.如何传参.如何命名.以及渲染的方式,内容大致有以下几个方面. 创建视图函数并访问 创建app django中url规则 捕获参数 路径转换器 正则表达式 额外参数 渲染方式 创建视图并访问 项目中自带的Python文件中,并没有带有视图,因此我们自己创建一个,通常,我们把视图命名views.py. 然后在views.py中,导入头文件  from django.http import HttpResponse 然后我们在views.py中,写一些Python函数,用来

传统的DOM渲染方式?

1.什么是DOM渲染? DOM渲染指的是对于浏览器中展现给用户的DOM文档的生成的过程. 2.DOM渲染的演化过程,大致可以分为可以分为三个阶段: 纯后端渲染: DOM树的生成完全是在后端服务器中完成的,后端服务器的程序会把需要的数据拼合成一个类似于前端DOM节点组成的DOM树,并转化成字节流作为HTTP Response的body返回浏览器 纯前端渲染: 前端渲染把DOM生成的主体逻辑都放在前端,后端之后返回一个框架的DOM结构,然后由js代码把页面的主题渲染到框架中.可以解决后端渲染中出现的

使用echarts插件做图表常见的几个问题(五)——图形的两种渲染方式

场景:echarts中图形有两种渲染方式,canvas渲染和svg渲染,分别运用在什么样的场景下 措施:Canvas 更适合绘制图形元素数量非常大(这一般是由数据量大导致)的图表(如热力图.地理坐标系或平行坐标系上的大规模线图或散点图等),也利于实现某些视觉特效:在不少场景中,SVG 具有重要的优势:它的内存占用更低(这对移动端尤其重要).渲染性能略高.并且用户使用浏览器内置的缩放功能时不会模糊. 在初始化图表实例时,传入参数选择渲染器类型,代码如下 // 使用 Canvas 渲染器(默认) v

vue渲染方式:render和template的区别

template----html的方式做渲染 render----js的方式做渲染 render(提供)是一种编译方式 render里有一个函数h,这个h的作用是将单文件组件进行虚拟DOM的创建,然后再通过render进行解析. h就是createElement()方法:createElement(标签名称,属性配置,children) template也是一种编译方式,但是template最终还是要通过render的方式再次进行编译. 区别: 1.render渲染方式可以让我们将js发挥到极致