metahook吧 关注:697贴子:11,511
  • 20回复贴,共1

TempEntity和ViewEntity的小问题

只看楼主收藏回复

我在V_CalcRefdef中用CL_TempEntAllocHigh创建TempEntity,但是会被ViewEntity遮挡。请问如何将特定的TempEnt改成始终在最上层(应该是绘制顺序吧)?

另外近战武器的v模获取附件时,位置是左右相反的。用模型查看器看的确和枪支的v模镜像相反,客户端有经过什么特殊的处理导致在游戏中不会相反吗(让我记了cl_lw这个指令)怎样才能获取到正确的附件位置?

刚接触mh不久,都是自学的


回复
来自iPhone客户端1楼2018-12-07 11:00
    这两个问题都是3D渲染相关的问题


    回复
    来自iPhone客户端2楼2018-12-07 20:24
      想挡住V模型,深度值范围要小于0.2还是多少来着,附件位置应该是没问题的,附件基于动画骨架计算,直接从entity->attachments取就行


      回复
      3楼2018-12-08 05:07
        请问在哪个事件修改深度值范围呢? R_DrawSpriteModel 还是 R_StudioDrawModel ?


        我的确是用entity->attachments获取的位置...


        回复(9)
        4楼2018-12-08 12:14
          刀子模型取附件位置不对的原因:
          通过 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


          回复(6)
          6楼2018-12-11 20:01
            接单写插件吗?


            回复
            来自Android客户端7楼2019-01-04 21:44