qt3d - 如何在 Qt3D 中将 objectpicker 和 Camera 添加到我的实体?
问题描述
我需要渲染一些在 3d 场景中保存一些数据的线和点。
并且点需要用鼠标拾取,然后获取点中的数据。
我首先尝试定义一个继承自 QQuickFramebufferObject 的类,但是我发现很难进行鼠标选择。
我发现它在 Qt3D 模块中有 ObjectPicker,所以我想使用 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 可以工作
解决方案
推荐阅读
- apache-kafka - 当事件同时发生时,将 Kafka KStream 生成的消息中的列表附加到 KTable 连接不会产生所需的输出
- javascript - 按类识别按钮
- node.js - mongo-connect(session) 的 mongo-connect 错误
- c - C.在一个非常小的程序中发现一个错误。计算序列的前k个数字的总和
- mysql - 第一次打开php页面时出现504错误
- mysql - 如何使用 UNION 总结 MySQL 查询的结果
- postgresql - npgsql 驱动程序 sslmode 缺少 verify-ca 和 verify-full -- PostgreSql
- c# - 无法解决 net.core 3.0 中的依赖 HttpClient
- javascript - 如何通过替换和拆分来缩短过滤器功能?
- r - 在调用 mutate() 时引用上一列/下一列