首页 > 解决方案 > Qt/Qml 3D 如何从顶点数组渲染网格

问题描述

尽管我一直坚持绘制一个简单的立方体,但我正在运行时生成网格。为什么屏幕上什么都没有出现?

如何将一组浮点数(三角形顶点)转换为 3D 网格?

为了满足所需的描述长度,我有第二个相关问题。当立方体已经被渲染时,如何在其上放置纹理?

   class Master : public QObject
    {
        Q_OBJECT
    public:
        explicit Master(QObject *parent = nullptr) : QObject(parent)
        {
            float vertexArray[] = {
                -1.0f,-1.0f,-1.0f,
                -1.0f,-1.0f, 1.0f,
                -1.0f, 1.0f, 1.0f,
                1.0f, 1.0f,-1.0f,
                -1.0f,-1.0f,-1.0f,
                -1.0f, 1.0f,-1.0f,
                1.0f,-1.0f, 1.0f,
                -1.0f,-1.0f,-1.0f,
                1.0f,-1.0f,-1.0f,
                1.0f, 1.0f,-1.0f,
                1.0f,-1.0f,-1.0f,
                -1.0f,-1.0f,-1.0f,
                -1.0f,-1.0f,-1.0f,
               -1.0f, 1.0f, 1.0f,
                -1.0f, 1.0f,-1.0f,
                1.0f,-1.0f, 1.0f,
                -1.0f,-1.0f, 1.0f,
                -1.0f,-1.0f,-1.0f,
                -1.0f, 1.0f, 1.0f,
                -1.0f,-1.0f, 1.0f,
                1.0f,-1.0f, 1.0f,
                1.0f, 1.0f, 1.0f,
                1.0f,-1.0f,-1.0f,
                1.0f, 1.0f,-1.0f,
                1.0f,-1.0f,-1.0f,
                1.0f, 1.0f, 1.0f,
                1.0f,-1.0f, 1.0f,
                1.0f, 1.0f, 1.0f,
                1.0f, 1.0f,-1.0f,
                -1.0f, 1.0f,-1.0f,
                1.0f, 1.0f, 1.0f,
                -1.0f, 1.0f,-1.0f,
                -1.0f, 1.0f, 1.0f,
                1.0f, 1.0f, 1.0f,
                -1.0f, 1.0f, 1.0f,
                1.0f,-1.0f, 1.0f
            };

            m_buffer.append(reinterpret_cast<const char*>(vertexArray), sizeof(vertexArray));
        }

        Q_PROPERTY(QByteArray buffer READ buffer CONSTANT)
        QByteArray buffer() const { return m_buffer; }

    private:
         QByteArray m_buffer;

    };

以及 Scene3D 中的 GeometryRenderer:

  Entity{
            Material{
                id: material
                parameters: [
                    Parameter { name: "color"; value: "green" }
                ]
            }

            GeometryRenderer{
                id: geometryRenderer

                instanceCount: 0
                primitiveType: GeometryRenderer.Triangles

                geometry: Geometry{
                    Attribute{
                        attributeType: Attribute.VertexAttribute
                        vertexBaseType: Attribute.Float
                        vertexSize: 3
                        byteOffset: 0
                        byteStride: 3 * 4
                        count: 12
                        buffer : Buffer{
                            type: Buffer.VertexBuffer
                            data: Master.buffer
                        }
                    }
                }
            }
            components: [material, geometryRenderer]
        }

标签: qtqmlqt3d

解决方案


推荐阅读