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

在QML中为网格或OBJ Qt3D 5.9的一部分添加颜色,qt,qml,qt3d,Qt,Qml,Qt3d,在Qt3D 5.9中,我使用场景3D渲染一个.obj文件并显示它。我还启用了对象拾取,因此当用户选择对象的一部分时,我确切地知道他们在模型上单击的位置。我想做的是为用户单击的obj/网格部分添加颜色。更具体地说,对于用户单击的“y”值,我想在该“y”值的对象模型周围画一条线。我在网上到处找了找,找不到任何帮助。不幸的是,对于3D对象、网格等,我并不熟悉。在Qt 3D 5.9中,如何仅对网格的一部分进行着色?既然您成功加载了自己的网格,我想您了解GeometryRenderer和Geometry

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

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

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

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

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

  • 包含网格所有顶点的所有颜色的缓冲区
  • 指示如何读取此缓冲区的几何体属性
  • 在选择时更新缓冲区的脚本
  • 使用颜色缓冲区绘制对象的自定义材质和自定义着色器
这不是一件容易完成的事情,但它是可能的,并且应该让您更好地理解几何体、材质和着色器在QML中的工作方式

如果你不熟悉这些,我建议你先放平点顶点颜色缓冲器,然后尝试制作一个自定义的着色器,把你的物体涂成红色。从那以后,您将能够继续了解如何将逐顶点颜色传递到着色器


祝您好运

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

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

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

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

  • 包含网格所有顶点的所有颜色的缓冲区
  • 指示如何读取此缓冲区的几何体属性
  • 在选择时更新缓冲区的脚本
  • 使用颜色缓冲区绘制对象的自定义材质和自定义着色器
这不是一件容易完成的事情,但它是可能的,并且应该让您更好地理解几何体、材质和着色器在QML中的工作方式

如果你不熟悉这些,我建议你先放平点顶点颜色缓冲器,然后尝试制作一个自定义的着色器,把你的物体涂成红色。从那以后,您将能够继续了解如何将逐顶点颜色传递到着色器

祝你好运