3

我正在 Qt 5.15 上试验 QtQuick3D。嵌入 QtQuick 的功能Item非常棒。我喜欢创建一个矩形(100 x 100 单位)并用Image(1000 x 1000 像素)填充它。

当我定义 aMaterial并分配它时效果很好(参见 Model okButCodeSpread,屏幕截图中的右矩形),但它更多的是代码。

定义 aNode和嵌入a 的时间要短得多Image。但是,在这种情况下,我很难控制纹理的大小。无论我尝试什么,它都是模糊的。请参阅屏幕截图中的模型doesNotWork和左侧矩形。

Image我通过放大和缩小找到了解决方法Node。请参阅屏幕截图中的模型okButUgly,中间矩形。

有什么想法可以为 Model 获得清晰的纹理doesNotWork吗?

另外,如何隐藏用于定义 2D 的图像Material?将可见属性设置为 false 会导致 3D 中的纹理为纯黑色...

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick3D 1.15
import QtQuick3D.Helpers 1.15

Window {
    width: 640
    height: 480
    visible: true

    Image {
        id: image   
        layer.enabled: true
        width: 1000
        height: 1000
        source: "test.png"
    }

    View3D {
        id: view
        width: 400
        height: 400
        renderMode: View3D.Inline

        environment: SceneEnvironment {
            clearColor: "dimgray"
            backgroundMode: SceneEnvironment.Color
        }

        PerspectiveCamera {
            id: cam
            position: Qt.vector3d(0, 0, 350)
        }

        DirectionalLight {
        }

        WasdController {
            controlledObject: cam
        }

        DefaultMaterial {
            id: mat
            diffuseMap: Texture {
                sourceItem: image
            }
        }

        Node {
            id: doesNotWork
            position: Qt.vector3d(-150, 0, 0)

            Image {
                layer.enabled: true
                layer.textureSize: Qt.size(1000, 1000)
                sourceSize: Qt.size(1000, 1000)
                width: 100
                height: 100
                source: "test.png"
           }
        }

        Node {
            id: okButUgly        
            property real scaleFactor: 10
            position: Qt.vector3d(0, 0, 0)
            scale: Qt.vector3d(1/scaleFactor, 1/scaleFactor , 1/scaleFactor)

            Image {
                width: 100 * okButUgly.scaleFactor
                height: 100 * okButUgly.scaleFactor           
                source: "test.png"
            }
        }

        Model {
            id: okButCodeSpread
            position: Qt.vector3d(150, 0, 0)
            source: "#Rectangle"
            materials: mat
        }
    }

    DebugView {
        source: view
    }
}

截屏

4

0 回答 0