在QML中为网格的一部分或OBJ Qt3D 5.9添加颜色

时间:2017-11-14 23:32:19

标签: qt qml qt3d

在Qt3D 5.9中,我使用场景3D渲染.obj文件并显示它。我也启用了对象选择,因此当用户选择对象的一部分时,我确切地知道他们点击模型的位置。我想要做的是为用户点击的obj / mesh的那部分添加颜色。更具体地说,对于' y'用户点击的值,我想在对象模型周围为一条线着色一条' y'值。我在网上看了看,找不到任何帮助。不幸的是,我对3D对象,网格等不熟悉。如何在Qt 3D 5.9中为网格的一部分着色?

1 个答案:

答案 0 :(得分:0)

由于您设法加载了自己的网格,我想您已经了解了GeometryRenderer和Geometry QML组件的工作原理。 Geometry组件采用定义(例如)对象的位置和法线的属性。您为这些属性指定的名称允许您在自定义着色器中检索它们。您可以在几何体中添加一个属性,该属性定义一个缓冲区,您将在其中存储顶点颜色而不是位置和法线。

然后,您将需要一个自定义材料(如果您没有自定义材料,请尝试阅读QML文档以了解它是如何工作的。我知道,该文档并不是真正完整但它是一个好的开始)

此自定义材质允许您调用自己的着色器,您可以在其中检索顶点的颜色,方法与检索它的位置相同。

总而言之,由于您只想为顶点的一部分着色,因此需要

  • 包含网格所有顶点的所有颜色的缓冲区
  • 一个Geometry属性,告诉如何读取此缓冲区
  • 在选择
  • 时更新缓冲区的脚本
  • 自定义材质和使用颜色缓冲区绘制对象的自定义着色器

这是一件不容易实现的事情,但它有可能并且应该让您更好地了解几何,材质和着色器在QML中的工作原理。

如果您不熟悉这些,我建议您首先添加par顶点颜色缓冲区并尝试制作一个自定义着色器,将所有对象绘制为红色。从那以后,您将能够继续了解如何将每个顶点颜色传递到着色器

祝你好运

相关问题