• Qt3D 5.9 and future


    2017-05
    http://blog.qt.io/blog/2017/05/24/qt3d/
    Qt3D future
        5.9
            Use Qt Quick or QPainter to render into a texture
            Embed Qt Quick into Qt3D, including input handling
            Level of Detail support for meshes
            Text support - 2D and 3D
            Additional materials such as PBR materials
        others
            Generating and filling buffers out of QAbstractItemModels
            Billboards - camera facing entities
            Particle systems
            VR support
        new aspects:
            碰撞检测
            动画:关键帧动画;骨骼动画;Morph target animation; Removes animation workload from main thread
            物理:刚体/柔体物理模拟
            AI: 
            三维位置音效:如喇叭,越近越响
        工具
            设计时工具:场景设计器
            Qt 3D Studio
            编译时工具:资产状态监控
        More
            贴图控制
            可yizhi算法(OpenGL)
            各种3d模型的加载
    
    2d ui嵌入到 3d里面用Scene2D
        Scene2D {
            id: qmlTexture
            output: RenderTargetOutput {
                attachmentPoint: RenderTargetOutput.Color0
                texture: Texture2D { id: offscreenTexture }
            }
            entities: [ cube ]
            Item {
                id: customQtQuickStuff
            }
        }
            
    
    纹理加载器
        TextureLoader {
            source: "qrc:/assets/textures/pbr-default/pbr-default-metallic.png"
            minificationFilter: Texture.LinearMipMapLinear
            magnificationFilter: Texture.Linear
            wrapMode {
                x: WrapMode.ClampToEdge
                y: WrapMode.ClampToEdge
            }
            generateMipMaps: true
        }
        
    新增材质
        粗糙金属材质
            MetalRoughMaterial
        粗糙金属纹理材质
            TexturedMetalRoughMaterial {
                baseColor: TextureLoader {
                    format: Texture.SRGB8_Alpha8
                    source: "qrc:/assets/powerup/basecolor.png"
                }
                metalness: TextureLoader { source: "qrc:/assets/powerup/metalness.png" }
                roughness: TextureLoader { source: "qrc:/assets/powerup/roughness.png" }
                normal: TextureLoader { source: "qrc:/assets/powerup/normal.png" }
                ambientOcclusion: TextureLoader { source: "qrc:/assets/powerup/ambientocclusion.png" }
            }
            
    新增环境光    
        EnvironmentLight {
            id: envLight
            irradiance: TextureLoader {
                source: "qrc:/assets/envmaps/wobbly-bridge/wobbly_bridge_4k" + _envmapFormat + "_cube_irradiance.dds"
    
                minificationFilter: Texture.LinearMipMapLinear
                magnificationFilter: Texture.Linear
                wrapMode {
                    x: WrapMode.ClampToEdge
                    y: WrapMode.ClampToEdge
                }
                generateMipMaps: false
            }
            specular: TextureLoader {
                source: "qrc:/assets/envmaps/wobbly-bridge/wobbly_bridge_4k" + _envmapFormat + "_cube_specular.dds"
    
                minificationFilter: Texture.LinearMipMapLinear
                magnificationFilter: Texture.Linear
                wrapMode {
                    x: WrapMode.ClampToEdge
                    y: WrapMode.ClampToEdge
                }
                generateMipMaps: false
            }
        }
                
    
    天空盒实体
        SkyboxEntity {
            baseName: "qrc:/assets/envmaps/wobbly-bridge/wobbly_bridge_4k" + _envmapFormat + "_cube_radiance"
            extension: ".dds"
            gammaCorrect: true
        }            
        
    
    相机增加曝光度属性
        Camera {
            id: mainCamera
            position: Qt.vector3d(-10, 0, 0)
            viewCenter: Qt.vector3d(0, 0, 0)
            exposure: 1.4  // 曝光度
        }
    
    加载预设的动画    
        import Qt3D.Animation 2.9
        ClipAnimator {
            id: animator
            loops: 3
            clip: AnimationClipLoader { source: "qrc:/jumpinganimation.json" }
            channelMapper: ChannelMapper {
                mappings: [
                    ChannelMapping { channelName: "Location"; target: cubeTransform; property: "translation" },
                    ChannelMapping { channelName: "Rotation"; target: cubeTransform; property: "rotation" },
                    ChannelMapping { channelName: "Scale"; target: cubeTransform; property: "scale3D" }
                ]
            }
        }
    对象选择器
        ObjectPicker { onClicked: animator.running = true;}
    
    
    根据远近来动态调整场景(volumeOverride)
        LevelOfDetail
            Entity {
                components: [
                    CylinderMesh {
                        radius: 1
                        length: 3
                        rings: 2
                        slices: sliceValues[lod.currentIndex]
                        property var sliceValues: [20, 10, 6, 4]
                    },
                    Transform {
                        rotation: fromAxisAndAngle(Qt.vector3d(1, 0, 0), 45)
                    },
                    PhongMaterial {
                        diffuse: "lightgreen"
                    },
                    LevelOfDetail {
                        id: lod
                        camera: camera
                        thresholds: [1000, 600, 300, 180]
                        thresholdType: LevelOfDetail.ProjectedScreenPixelSizeThreshold
                        volumeOverride: lod.createBoundingSphere(Qt.vector3d(0, 0, 0), 2.0)
                    }
                ]
            }
        LevelOfDetailSwitch
            Entity {
                components: [
                    LevelOfDetailSwitch {
                        camera: camera
                        thresholds: [20, 35, 50]
                        thresholdType: LevelOfDetail.DistanceToCameraThreshold
                    }
                ]
                HighDetailEntity { enabled: false }
                MediumDetailEntity { enabled: false }
                LowDetailEntity { enabled: false }
            }
        LevelOfDetailLoader
            LevelOfDetailLoader {
                id: lodLoader
                camera: camera
                thresholds: [20, 35, 50]
                thresholdType: LevelOfDetail.DistanceToCameraThreshold
                volumeOverride: lodLoader.createBoundingSphere(Qt.vector3d(0, 0, 0), -1)
                sources: ["qrc:/HighDetailEntity.qml", "qrc:/MediumDetailEntity.qml", "qrc:/LowDetailEntity.qml"]
            }
        
    
    渲染文本
        Text2DEntity
            Text2DEntity {
                id: text
                text: "Hello World"
                 20
                height: 10
            }
        ExtrudedTextMesh
            auto *text = new Qt3DCore::QEntity(root);
            auto *textTransform = new Qt3DCore::QTransform();
            auto *textMesh = new Qt3DExtras::QExtrudedTextMesh();
            textMesh->setDepth(.45f);
            QFont font(family, 32, -1, false);
            textMesh->setFont(font);
            textMesh->setText(QString(family));
            auto *textMaterial = new Qt3DExtras::QPhongMaterial(root);
            textMaterial->setDiffuse(QColor(111, 150, 255));
            text->addComponent(textTransform);
            text->addComponent(textMesh);
            text->addComponent(textMaterial);
  • 相关阅读:
    jQuery插件之jqzoom
    python数据分析画图体验
    python正则表达式,以及应用[下载图片]
    Python 程序如何高效地调试?
    从汉诺塔游戏理解python递归函数
    Python文本文件的输入输出操作学习
    Windows搭建python开发环境
    python循环综合运用
    Python参数传递,既不是传值也不是传引用
    使用python实现用微信远程控制电脑
  • 原文地址:https://www.cnblogs.com/surfsky/p/6963146.html
Copyright © 2020-2023  润新知