无论我如何尝试,我都无法使RenderCollision
工作。文档显示:
RenderCollision (view_id: int, vtx_layout: VertexLayout, prg: ProgramHandle, render_state: RenderState, depth: int) -> None
下面是我对应该将什么作为参数传递给这个函数的(有限的)理解:
view_id
:根据doc,可以从0到255进行设置。在我的例子中,它是0vtx_layout
:用于存储3D线的顶点布局ProgramHandle
:绘制3D线条所需的程序(着色器)RenderState
:我应该使用ComputeRenderState
提供的内容(在此处找到)depth
:我猜是与zDepth相关的东西吧?
在这一点上,我觉得我离正确使用它不远了,但是我很难弄清楚 RenderState 的事情。
1条答案
按热度按时间bvpmtnay1#
RenderCollision
是一个调试函数,因此它不会“消耗”任何view_id。实际上,您可以将view_id传递给它,它将写入当前视图。正如您所猜测的,vtx_layout和prg处理调试线的渲染(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