我正在 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
}
}