如何在游戏中显示线框?(不是在编辑器里)
godot吧
全部回复
仅看楼主
level 4
kankan1322 楼主
如何在游戏中显示线框?(不是在编辑器里)
2021年03月11日 13点03分 1
吧务
level 13
这个里面有人提供了一种解决方法,但是有缺陷 好像mesh要挂在camera下
https://github.com/godotengine/godot/issues/15149
在游戏中运行线框模式,reduz认为没有必要。
2021年03月11日 15点03分 3
[啊]作者竟然觉得没必要……这怎么可能。我觉得线框模式很有用(尤其是在做一些特效以及过场动画的时候,会用得上)
2021年03月12日 03点03分
吧务
level 14
虽然不知道3楼提供的解决方法是否还可以,不过3楼也提到了那个方法有缺陷。[惊讶]我也有一个不同的办法,虽然可以解决3楼的缺点,不过也有另外的缺陷,
我的方法是:使用ImmediateGeometry节点来手动绘制线框,
如图所示:
在上图中可以看到,图中左侧是编辑器里的线框,图中右侧是游戏中的线框(右下角)
[乖]思路是从模型(MeshInstance)上获取顶点位置,然后遍历顶点位置通过ImmediateGeometry节点来绘制线条,代码如图所示:
[狂汗]这个方法的缺点是:只对静态模型有效。如果模型带有变形动画或骨骼动画,那么绘制的线框仍然是静态的,不会随动画而改变
2021年03月12日 03点03分 5
“ImmediateGeometry 节点” 不错,刚用godot
2021年03月12日 08点03分
“ImmediateGeometry 节点” 就像opengl3.0以前的样子
2021年03月12日 08点03分
你说的缺陷,只要将代码放在_process里,而不是_ready里,大概就行。就是不知道效率怎么样?
2021年03月12日 08点03分
@kankan1322 [委屈]GDScript的效率应该会第一些,这就是为什么3楼提到的方法可能很有用的原因。如果能够使用编辑器本身的线框模式,实际上就是用底层的C++来渲染,效率才会比GDScript更快
2021年03月12日 09点03分
level 4
kankan1322 楼主
确实,GDScript的效率应该和python,JavaScript差不多,循环超过一万就会明显有差距。
2021年03月12日 12点03分 7
level 4
kankan1322 楼主
3楼提到的帖子,其中的方法是对的,但细节没有交代清楚,帖子是2017年的,版本很前面,它用SceneTree节点(我没找到),所以我用了最普遍的Spatial节点。
下面代码 godot_3.2.3测试有效
func _init():
VisualServer.set_debug_generate_wireframes(true) #原来要把你插在这,为此我用了一天时间
func _ready():
get_viewport().set_debug_draw(Viewport.DEBUG_DRAW_WIREFRAME)
2021年03月12日 18点03分 9
[真棒]这个好,这下可以支持带变形动画的3D模型了
2021年03月13日 03点03分
level 1
在godot4中有一个很简单的方法可以实现模型的线框模式,就是利用着色器的渲染模式
shader_type spatial;
render_mode wireframe,unshaded;
varying vec4 color;
varying vec3 normal;
void vertex() { /
/ Called for every vertex the material is visible on.
}
void fragment() {
if(ALBEDO.r+ALBEDO.g+ALBEDO.b<0.001){
discard;
}
ALBEDO=vec3(VERTEX.y,0.0,0.0);
// Called for every pixel the material is visible on.
}
2024年06月04日 06点06分 10
1