Advertisement
czaffik

Qml custom mesh Tetrahedron

May 5th, 2019 (edited)
3,216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
QML 4.86 KB | None | 0 0
  1. // main.qml:
  2. import QtQuick 2.9
  3. import QtQuick.Window 2.2
  4. import QtQuick.Scene3D 2.0
  5.  
  6. Window {
  7.     visible: true
  8.     width: 640
  9.     height: 480
  10.     title: qsTr("Czworościan")
  11.  
  12.     id: mainwindow
  13.  
  14.     Scene3D {
  15.         id: scene
  16.         anchors.fill: parent
  17.         aspects: ["render", "logic", "input"]
  18.         focus: true
  19.  
  20.         Scene {
  21.             id: sceneRoot
  22.         }
  23.     }
  24. }
  25.  
  26. // Scene.qml:
  27. import QtQuick 2.0
  28. import Qt3D.Core 2.0
  29. import Qt3D.Render 2.0
  30. import Qt3D.Input 2.1
  31. import Qt3D.Extras 2.0
  32.  
  33. Entity {
  34.     id: sceneRoot
  35.  
  36.     components: [
  37.         RenderSettings {
  38.             activeFrameGraph: ForwardRenderer {
  39.                 clearColor: Qt.rgba(0.5, 0.5, 0.5, 1.0)
  40.                 camera: camera
  41.             }
  42.         },
  43.  
  44.         InputSettings { }
  45.     ]
  46.  
  47.     Camera {
  48.         id: camera
  49.         projectionType: CameraLens.PerspectiveProjection
  50.         fieldOfView: 45
  51.         aspectRatio: 16/9
  52.         nearPlane: 0.1
  53.         farPlane: 1000.0
  54.         position: Qt.vector3d(0.0, 0.0, 10.0)
  55.         upVector: Qt.vector3d(0.0, 1.0, 0.0)
  56.         viewCenter: Qt.vector3d(0.0, 0.0, 0.0)
  57.     }
  58.  
  59.     OrbitCameraController {
  60.         camera: camera
  61.     }
  62.  
  63.     Entity {
  64.         components: [
  65.             DirectionalLight {
  66.                 color: "white"
  67.                 intensity: 1.0
  68.                 worldDirection: camera.viewCenter.minus(camera.position)
  69.             }
  70.  
  71.         ]
  72.     }
  73.  
  74.     Tetrahedron {
  75.     }
  76. }
  77.  
  78. // Tetrahedron.qml:
  79. import QtQuick 2.0
  80. import Qt3D.Core 2.0
  81. import Qt3D.Render 2.0
  82. import Qt3D.Extras 2.0
  83.  
  84. Entity {
  85.     id: root
  86.  
  87.     property vector3d position: Qt.vector3d(0.0, -1.0, 0.0)
  88.     property real angle: 0.0
  89.  
  90.     components: [ mesh, material, transform ]
  91.  
  92.     PhongMaterial {
  93.         id: material
  94.         ambient: "black"
  95.         diffuse: "#002300"
  96.     }
  97.  
  98.     Transform {
  99.         id: transform
  100.         matrix: {
  101.             var m = Qt.matrix4x4();
  102.             m.rotate(angle, Qt.vector3d(0, 1, 0));
  103.             m.translate(position);
  104.             return m;
  105.         }
  106.     }
  107.  
  108.     GeometryRenderer {
  109.         id: mesh
  110.         instanceCount: 1
  111.         indexOffset: 0
  112.         firstInstance: 0
  113.         primitiveType: GeometryRenderer.Triangles
  114.  
  115.         Buffer {
  116.             id: vertexBuffer
  117.             type: Buffer.VertexBuffer
  118.             data: new Float32Array([
  119.                                        2.0,  0.0,  0.0,              0.0,  0.0,  1.0,
  120.                                       -2.0,  0.0,  0.0,              0.0,  0.0,  1.0,
  121.                                        0.0,  3.46410161513,  0.0,    0.0,  0.0,  1.0,
  122.  
  123.                                        2.0,  0.0,  0.0,              0.0, -1.0,  0.0,
  124.                                       -2.0,  0.0,  0.0,              0.0, -1.0,  0.0,
  125.                                        0.0, 0.0, -3.46410161513,     0.0, -1.0,  0.0,
  126.  
  127.                                        2.0,  0.0,  0.0,              1.0,  1.0, -1.0,
  128.                                        0.0, 0.0, -3.46410161513,     1.0,  1.0, -1.0,
  129.                                        0.0,  3.46410161513,  0.0,    1.0,  1.0, -1.0,
  130.  
  131.                                       -2.0,  0.0,  0.0,             -1.0,  1.0, -1.0,
  132.                                        0.0,  3.46410161513,  0.0,   -1.0,  1.0, -1.0,
  133.                                        0.0, 0.0, -3.46410161513,    -1.0,  1.0, -1.0
  134.             ])
  135.         }
  136.  
  137.         Buffer {
  138.             id: indexBuffer
  139.             type: Buffer.IndexBuffer
  140.             data: new Uint16Array([
  141.                                       2, 1, 0,
  142.                                       4, 5, 3,
  143.                                       6, 7, 8,
  144.                                       9, 10, 11
  145.             ])
  146.         }
  147.  
  148.         geometry: Geometry {
  149.             attributes: [
  150.                 Attribute {
  151.                     attributeType: Attribute.VertexAttribute
  152.                     vertexBaseType: Attribute.Float
  153.                     vertexSize: 3
  154.                     byteOffset: 0
  155.                     byteStride: 6*4
  156.                     count: 12
  157.                     name: defaultPositionAttributeName
  158.                     buffer: vertexBuffer
  159.                 },
  160.  
  161.                 Attribute {
  162.                     attributeType: Attribute.VertexAttribute
  163.                     vertexBaseType: Attribute.Float
  164.                     vertexSize: 3
  165.                     byteOffset: 3 * 4
  166.                     byteStride: 6*4
  167.                     count: 12
  168.                     name: defaultNormalAttributeName
  169.                     buffer: vertexBuffer
  170.                 },
  171.  
  172.                 Attribute {
  173.                     attributeType: Attribute.IndexAttribute
  174.                     vertexBaseType: Attribute.UnsignedShort
  175.                     count: 3*4
  176.                     buffer: indexBuffer
  177.                 }
  178.  
  179.             ]
  180.         }
  181.     }
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement