TempEntity和ViewEntity的小问题
metahook吧
全部回复
仅看楼主
level 5
橙子Peel 楼主
我在V_CalcRefdef中用CL_TempEntAllocHigh创建TempEntity,但是会被ViewEntity遮挡。请问如何将特定的TempEnt改成始终在最上层(应该是绘制顺序吧)?
另外近战武器的v模获取附件时,位置是左右相反的。用模型查看器看的确和枪支的v模镜像相反,客户端有经过什么特殊的处理导致在游戏中不会相反吗(让我记了cl_lw这个指令)怎样才能获取到
正确的
附件位置?
刚接触mh不久,都是自学的[喝酒]
2018年12月07日 03点12分 1
level 12
这两个问题都是3D渲染相关的问题
2018年12月07日 12点12分 2
level 12
想挡住V模型,深度值范围要小于0.2还是多少来着,附件位置应该是没问题的,附件基于动画骨架计算,直接从entity->attachments取就行
2018年12月07日 21点12分 3
level 5
橙子Peel 楼主
请问在哪个事件修改深度值范围呢? R_DrawSpriteModel 还是 R_StudioDrawModel ?
我的确是用entity->attachments获取的位置...
2018年12月08日 04点12分 4
实体的深度值怎么修改呢
2025年05月25日 06点05分
是在R_StudioDrawModel 执行了gStudioInterface.StudioDrawModel(flags);语句后面获取IEngineStudio.GetViewEntity()的attachment
2018年12月08日 04点12分
@橙子Peel 你判断下当前正在Draw的是不是V模型
2018年12月08日 10点12分
回复 展鸿丶 :的确是用了GetCurrentEntity判断是否ViewEntity
2018年12月08日 12点12分
level 12
刀子模型取附件位置不对的原因:
通过 CL_CreateVisibleEntity 或者 CL_TempEntAlloc 创建的实体会存入引擎内部一个实体数组 cl_entities 中等待下一帧绘制。
其中 cl_entities 中的实体由引擎内部函数 R_DrawEntitiesOnList 和 R_DrawTEntitiesOnList 分别完成绘制,这两个函数在引擎内部 R_RenderScene 函数中调用。
R_RenderScene 函数渲染出不包括V模型和HUD的整个游戏地图场景,之后引擎才会调用 R_DrawViewModel 来绘制V模型。
也就是说,实际上TEMPENTITY要比V模型先渲染,TEMPENTITY创建出来的时候是没办法获得最新的V模型上的附件的坐标的。
而刀子模型附件坐标不正确的关键原因是 StudioDrawModel 执行了两次。
引擎绘制V模型之前,会先调用一次 StudioDrawModel( STUDIO_EVENT ) 此时 StudioDrawModel 不会绘制任何东西,仅仅计算附件的位置,但此时计算出来附件位置不一定能跟接下来调用 StudioDrawModel( STUDIO_RENDER ) 绘制出的V模型的位置对得上,因此不能用 StudioDrawModel( STUDIO_EVENT ) 计算出来的附件位置。
紧接着引擎会调用 StudioDrawModel( STUDIO_RENDER ) 来绘制V模型,但此时 StudioDrawModel 不会再计算附件位置,而之前 StudioDrawModel( STUDIO_EVENT ) 计算的附件位置又不能用,怎么办呢。只能自己再计算一次了。
测试代码:
https://paste.ubuntu.com/p/GD5TdrBqmx
2018年12月11日 12点12分 6
谢谢大佬,测试效果还可以
2018年12月12日 11点12分
想让自己的模型或者SPR与V模型成为一体,就在StudioDrawModel绘制完V模型之后手动调用引擎函数来绘制自己的模型或者SPR
2018年12月12日 20点12分
回复 展鸿丶 :有例子吗
2018年12月13日 13点12分
然而往渲染流程里到处乱插hook才是更方便的解决方法2333
2018年12月15日 01点12分
level 7
接单写插件吗?
2019年01月04日 13点01分 7
1