JCHub

  • Home
  • Category
    • A/V
    • WebRTC
    • Beauty of Programming
    • Linux
    • Windows
    • Moments of Life
    • Campus Life
  • Reference
    • API Reference
    • Utilities
    • AV Test
    • Doc
  • Message Board
  • About
JCHub
Code as My Sword, Lost in Obsession
Information Technology

浅谈吃鸡游戏大地图加载

最近最火的游戏莫过于各种“吃鸡”,自己也是一个fps游戏爱好者,玩过很多枪战游戏,这次也玩了腾讯cf手游的荒岛特训模式以及网易的荒野行动。吃鸡类游戏都是一个开放的大地图,由于手机配置没PC高,而且容易发热,续航是问题,所以玩这两个游戏时,能明显感觉到地图是动态加载的。当角色移动时,前面的物体才逐渐加载出来,这样做也是为了节省内存,减少资源占用。 记得大学时,做碰撞检测写过一个虚拟场景漫游系统,那时我用到了大地图分块技术节省内存,建模时将3d场景切块分区,当人物靠近某块区域时,才加载某块对应场景。玩的这两个吃鸡游戏地面纹理都是一次性加载的,当人物移动时,视野范围内地面上的房屋建筑,植被才慢慢加载出来。这样做可以大大降低对手机配置要求,说是大地图,其实还是一个小场景。

2017年11月26日 0comments 2481hotness 2likes Jeff Read all
Windows

Win10任务管理器GPU信息

睡前更新了下Win10 秋季创意者1709版本,发现任务管理器多了GPU信息。如下是我自己电脑的双显卡信息。 可以查看视频解码,处理,拷贝等信息。对于做视频或者游戏渲染优化的十分有帮助。

2017年10月18日 0comments 2624hotness 1likes Jeff Read all
Windows

DXGI中的flip显示模型

从win8开始,就增加了flip显示模型,通过该显示模型,程序可以减少系统开销,同时增加性能。基于intel media sdk解码,d3d11渲染,在我自己的电脑上通过对比,该模型确实可以明显降低CPU负载,渲染时间几乎忽略不计。不过坑爹的是,在部分独显不同电脑上,该模型并没有发挥出来该有的作用,反而增加GPU很大的负载,得不偿失。在d3d12中只支持flip model渲染,我想这些坑爹的电脑也就不支持d3d12渲染显示了,没想到这个flip model跟显卡类型,驱动等关系很大。下面简单说下flip model渲染。 桌面窗口管理器 桌面窗口管理器是Vista以后的系统中的一个新组件:Desktop Window Manager(DWM)。常见的任务栏窗口的实时缩略图效果,aero效果都是是DWM提供的。DWM提供了基于硬件加速的渲染。DWM出现后,应用程序的显示不再是直接画到屏幕上,而是送到显存中的一个离屏Surface。DWM将这些Surface合成一幅图像显示到屏幕之上。所以现在我们看到的显示器所有内容都是DWM处理过的。 DXGI flip model 与BitBlt model对比 二者主要区别是后台缓冲如何送到WDM。对于bitblt model,调用一次IDXGISwapChain1::Present1,后台缓冲内容就被拷贝到DWM 中一个叫做redirection surface的地方。对于flip model,后台缓冲内容直接与DWM共享,少了拷贝操作,因此更高效。 如何使用 创建交换链时。DXGI_SWAP_CHAIN_DESC1结构体按如下要求填充: 1)SwapEffect:DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL 2)BufferCount:2 3)Format:DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_B8G8R8A8_UNORM,DXGI_FORMAT_R8G8B8A8_UNORM之一; 4)SampleDesc.Count :1; 5)SampleDesc.Quality:0。 每一次调用Present1前,都要调用一次ID3D11DeviceContext::OMSetRenderTargets,因为Present1后,系统会把RenderTargetView解绑,所以每次都需要再调用OMSetRenderTargets设置RenderTargetView。 注意事项 1)一个窗口句柄只能绑定一个flip model交换链; 2)使用了flip model的句柄,就不能再使用其他api绘制了。在flip model中,只有flip model交换链传递到DWM中的Direct3D内容才可见,其他版本Direct3D 以及GDI内容更新将被忽略。

2017年9月28日 0comments 3202hotness 11likes Jeff Read all
Windows

CreateSwapChainForHwnd返回0x887A0001错误

IDXGIFactory2::CreateSwapChainForHwnd 创建交换链时,返回0x887A0001错误,也就是DXGI_ERROR_INVALID_CALL,查了下,原来是一个窗口句柄只能绑定一个flip显示模型交换链。附上MSDN上的解释: Because you can associate only one flip presentation model swap chain at a time with an HWND, the Microsoft Direct3D 11 policy of deferring the destruction of objects can cause problems if you attempt to destroy a flip presentation model swap chain and replace it with another swap chain. For more info about this situation, see Deferred Destruction Issues with Flip Presentation Swap Chains.

2017年9月18日 0comments 2663hotness 0likes Jeff Read all
音视频

流媒体网络性能指标——抖动

有时候我们开发一个流媒体系统,做完了却不知道如何用数字描述我们的系统,体现我们的优势,作为客户来说,可以描述这套系统的数字指标是最直观的,尤其在网络性能这块。在流媒体网络中,影响流媒体服务质量(QOS)的因素有很多,而这些因素可以作为我们衡量流媒体网络性能的指标。 衡量流媒体网络性能的常见指标主要有: 带宽 吞吐量 延时 抖动 丢包率 本篇文章主要讲下抖动(jitter),以及如何处理抖动,本文主要针对语音通信。在网络中,每个包从发送端到接收端的时延是不相同的,而jitter就是用来衡量这种不同。在发送端数据包发送时间间隔是相同的,也就是均匀发送数据,但是由于各种情况,例如拥塞,因为网络错误导致的丢包等,接受端收到数据包间隔就会不一样了,可能一会大,一会小,这就是所谓的抖动,严重影响音质。 下面先了解下传统学术上的相关定义。 延时:记s(i), r(i)分别为第i个包的发送、接收时间戳,延时d(i) = r(i) – s(i) 抖动:jitter(i) = d(i+1) – d(i) 传统定义中,抖动仅能描述某个时刻的情况,而流媒体是持续的,我们更关注某个时间段上的情况,对比某时刻情况更实用。 为了更好描述某个时间段的抖动,我们按如下定义更实用的抖动指标(参考声网): 1)记s(i), r(i)为第i个包的发送与接收时间戳,延时d(i) = r(i) – s(i); 2)t秒为一个统计周期,集合D = {d(i) | i ∈ t秒内收到的包序号集合 }; 3)对集合D做从小到大排序,得到D(sorted); 4)对D(sorted)中每个元素,减去D中最小值min(D),得到新的集合 D(jitter)。 现在D(jitter)中元素含义就是,t秒内所有语音数据包传输延时,相对最快那个数据包的偏移,原来抖动定义是相对前一个包延时偏移。可知D(jitter)中最大元素表示传输延时最大的。 为了消除抖动,接收端要么丢帧,要么延时。一般都会引入一个缓冲区,也就是抖动缓冲(jitterbuffer)。引入了抖动缓冲后,我们可以这样处理抖动: 1)jitter > jitterbuffer length,丢帧处理; 2) jitter

2017年8月14日 5comments 5968hotness 8likes Jeff Read all
Moments of Life

对那些自称“精通c++”人的看法

工作三年了,碰到过各种层次的人,也因为一些原因看过很多人的简历。从中我发现有些人喜欢称自己精通C++,有些人在简历中除了C++,感觉没其他什么内容,有些人整天啃着C++语法,其他啥也不会。 就我自己,我从来不敢称自己精通C++,我只敢说熟悉,语言对我而言只是个工具,不懂得大不了去查。这世界上没有一个人精通C++,C++标准那么多,谁会精通,真精通的话,我觉得你一个人先写一个C++编译器给我看看。一般说精通C++的就我认识的基本都是些刚毕业的,如果工作多年还这么说基本是水平很差的,跟刚毕业的没啥区别。我刚毕业时确实比较在意C++,觉得要花大时间掌握C++语法,那时各种C++题目都很熟练,可是没多久就放弃了,因为我发现这纯粹是浪费时间,一点意义也没,实际用到的又有多少。对于语言工具能用的好就可以,更重要的是自己感兴趣,愿意钻研的领域,某个具体问题的解决,牛逼的技术都在语言之外。正是因为这样以及工作原因,我才会钻研音视频,喜欢研究一些音视频相关东西,以及一些技术背后原理。 记得有一个同事说了类似这样一句话:像我工作多年了,C++学得差不多了,你们年轻应该多花时间学习C++。当时我也只是笑了笑,只能呵呵。下面分享一个大牛在知乎上对此的看法:

2017年6月11日 0comments 2587hotness 1likes Jeff Read all
Windows

DirectX 9 到DirectX 11 API的对应

从DirectX 9到DirectX 11 API变化了很多,对于从DirectX 9升级到DirectX 11的项目可以参考如下文章,这样可以清楚知道如何升级: Map DirectX 9 features to DirectX 11 APIs

2017年6月11日 0comments 1596hotness 0likes Jeff Read all
Information Technology

也搭了个google mirror

我平时科学上网都是用shadowsocks的,不过有时候在别人电脑上操作或者其他移动设备时,不能总下载个客户端,我科学上网主要是查谷歌,谷歌学术,youtube。很早前谷歌可以直接通过ip直接访问,现在不行了,以前用过别人搭建的google mirror,不过大部分都被封了,好不容易找到个可以用的,没过多久又被封了,而且经常会弹出谷歌机器人检测,让你输入验证码,确定你不是机器人,很不方便。我自己有两个美国的vps,主要是搭建网站以及shadowsocks服务,还有很大的利用空间,趁着空闲时间也搭了个google mirror,用的是老网址:so.jianchihu.net。这个网址以前用的是谷歌自定义搜索api搭建的,界面是我大四时用bootstrap写的,那时简直是个搜索神器。不过后来api用不了了,我也没去更新维护。现在把这个网址用作我的google mirror,顺便这个mirror设置了账号访问(防止太多人用,被封锁),以及https访问,作为自己平时搜索使用,我测了下,手机,电脑网络访问谷歌以及谷歌学术都很快,自己动手丰衣足食,以后在哪有网络都可以快速访问谷歌了。

2017年6月6日 0comments 1963hotness 2likes Jeff Read all
1…7891011…25
Copyright Statement

Unauthorized reproduction or plagiarism in any form is strictly prohibited. For reprint requests, please contact via email.

Recent Comments
Pereplanirovka kvartir_cvsr Published at 1 days ago(03 03202633105 25 25pm26) перепланировка услуги [url=https://pereplanirovka-...
Mirzoemele Published at 3 months ago(01 01202613104 06 06pm26) Double blind randomised controlled trial of two to...
PedarPhago Published at 8 months ago(08 08202583109 12 12pm25) Association between selective serotonin reuptake i...
EsielTooft Published at 8 months ago(07 07202573112 29 29am25) International scientific apply guidelines for the ...
dongxuh Published at 8 months ago(07 07202573103 27 27pm25) 真心不错的博客,有机会能一起分享
Ad

COPYRIGHT © 2026 jianchihu.net. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang