首页 > 解决方案 > 为什么没有考虑 QLineWidth?

问题描述

在 Qt3D 中,渲染对象的某些属性不仅仅是简单地设置在渲染器上,而且它们是全局(每个视图)或本地(在渲染对象的材质上)添加到 renderPasses 的——至少我的理解是这样。(我使用的是 PySide2 - 但 C++ 中的代码几乎相同)

例如,当添加几何渲染器并使用其原始类型点 ( Qt3DRender.QGeometryRenderer.Point) 而不是渲染三角形面时,它会显示几何的点。

这是具有默认类型的示例图。

在此处输入图像描述

同样只显示点 ( renderer.setPrimitiveType(Qt3DRender.QGeometryRenderer.Points))

在此处输入图像描述

很难猜,但是这里的点大小已经改变了——使用下面的代码:

material = Qt3DExtras.QPhongMaterial(e)
for t in material.effect().techniques():
    for rp in t.renderPasses():
        pointSize = Qt3DRender.QPointSize(rp)

        pointSize.setSizeMode(Qt3DRender.QPointSize.SizeMode.Fixed)
        pointSize.setValue(5.0)
        rp.addRenderState(pointSize)

Lines根据文档,当使用( LineStrip) 作为原始类型渲染对象时,可以使用相同的机制来更改线宽。添加

    lineWidth = Qt3DRender.QLineWidth(rp)
    lineWidth.setValue(5.)
    lineWidth.setSmooth(True)
    rp.addRenderState(lineWidth)

不改变线宽。

在此处输入图像描述

为什么?我需要在哪里添加 QLineWidth?是我选择的忽略 QLineWidth 状态的材料吗?

标签: qtqt3d

解决方案


我目前正在与类似的问题作斗争。我试图用 Qt3D 线宽测试重现该行为。使用 CoreProfile 将格式版本设置为 4.6 时,线宽的最大值似乎为 1(或等价于线测试显示的宽度 = 3)。这可能是支持的最大范围。请参阅: https ://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glLineWidth.xhtml

opengl glLineWidth() 不会改变线条的大小

注意:我特意选择了 4.6 版本,因为这是我的环境中支持的 openGL 版本。


推荐阅读