Мне нужно визуализировать некоторые линии и точки, которые содержат некоторые данные в 3D-сцене.
И точки должны быть выбраны мышью, а затем получить данные в точке.
Сначала я попытаюсь определить класс, унаследованный от QQuickFramebufferObject, однако я считаю, что выбор мышью затруднен.
Я обнаружил, что у него есть ObjectPicker в модуле Qt3D, поэтому я хочу использовать Qt3D для работы с моей работой.
Мой тестовый код ниже. Я определил свой объект GeometryRenderer и установил данные о вершинах (просто нарисуйте два треугольника). Вот так:
GeometryRenderer {
id: geometry
geometry: Geometry {
boundingVolumePositionAttribute: position
Attribute {
id: position
attributeType: Attribute.VertexAttribute
vertexBaseType: Attribute.Float
vertexSize: 3
count: 4
byteOffset: 0
byteStride: 6 * 4
name: "position"
buffer: vertexBuffer
}
Attribute {
id: color
attributeType: Attribute.VertexAttribute
vertexBaseType: Attribute.Float
vertexSize: 3
count: 4
byteOffset: 3 * 4
byteStride: 6 * 4
name: "color"
buffer: vertexBuffer
}
Attribute {
attributeType: Attribute.IndexAttribute
vertexBaseType: Attribute.UnsignedShort
vertexSize: 1
count: 6
buffer: indexBuffer
}
}
Buffer {
id: vertexBuffer
type: Buffer.VertexBuffer
data: new Float32Array(...)
}
Buffer {
id: indexBuffer
type: Buffer.IndexBuffer
data: new Uint16Array(...)
}
}
А затем определите материальный объект следующим образом:
Material {
id: material
effect: Effect {
techniques: Technique {
graphicsApiFilter {
profile: GraphicsApiFilter.CoreProfile
}
renderPasses: RenderPass {
shaderProgram: ShaderProgram {
vertexShaderCode: loadSource("qrc:/shader/hellotriangle.vert")
fragmentShaderCode: loadSource("qrc:/shader/hellotriangle.frag")
}
}
}
}
}
А затем в моем корневом объекте:
Entity {
id: root
components: [
RenderSettings {
activeFrameGraph: colorBuffer
pickingSettings.pickMethod: PickingSettings.TrianglePicking
pickingSettings.pickResultMode: PickingSettings.NearestPick
},
InputSettings { }
]
ClearBuffers {
id: colorBuffer
clearColor: Qt.rgba(0.8, 0.8, 0.8, 0.6)
buffers: ClearBuffers.ColorDepthBuffer
RenderSurfaceSelector {
RenderStateSet {
renderStates: DepthTest {
depthFunction: DepthTest.Less
}
}
}
}
}
Это работает, рендерингдва треугольника. И я хочу добавить Qt3D Camera и ObjectPicker в мою сцену. Как я могу это сделать?
Я обнаружил, что если я использую ForwardRenderer (но я не смог найти способ визуализации моих собственных линий / точек вершин)вместо ClearBuffers работает Camera и ObjectPicker