debugging 使用RenderCollision显示Harfang 3D物理调试?

7nbnzgx9  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(204)

无论我如何尝试,我都无法使RenderCollision工作。文档显示:

RenderCollision (view_id: int, vtx_layout: VertexLayout, prg: ProgramHandle, render_state: RenderState, depth: int) -> None

下面是我对应该将什么作为参数传递给这个函数的(有限的)理解:

  • view_id:根据doc,可以从0到255进行设置。在我的例子中,它是0
  • vtx_layout:用于存储3D线的顶点布局
  • ProgramHandle:绘制3D线条所需的程序(着色器)
  • RenderState:我应该使用ComputeRenderState提供的内容(在此处找到)
  • depth:我猜是与zDepth相关的东西吧?

在这一点上,我觉得我离正确使用它不远了,但是我很难弄清楚 RenderState 的事情。

bvpmtnay

bvpmtnay1#

RenderCollision是一个调试函数,因此它不会“消耗”任何view_id。实际上,您可以将view_id传递给它,它将写入当前视图。
正如您所猜测的,vtx_layoutprg处理调试线的渲染(RenderCollision使用线绘制碰撞形状)。
它通常是这样工作的:
绘制调试信息时避免清除视图
hg.SetViewClear(view_id, hg.CF_None, 0, 1.0, 0)
设置当前视图的矩形(与主渲染相同)
hg.SetViewRect(view_id, 0, 0, screen_size_x, screen_size_y)
设置摄影机变换矩阵(与当前摄影机相同)
hg.SetViewTransform(view_id, view_matrix, projection_matrix)
这是你可能正在看的一个:BM_Opaque将让Harfang知道您希望在渲染管道中的哪个位置进行绘制:
render_state = hg.ComputeRenderState(hg.BM_Opaque, hg.DT_Disabled, hg.FC_Disabled)
绘制碰撞形状的最终说明:
physics.RenderCollision(view_id, vtx_line_layout, line_shader, render_state , 0)
您将在此处找到一个工作示例,希望它对您有所帮助:https://github.com/harfang3d/tutorials-hg2/blob/master/physics_overrides_matrix.py#L69

相关问题