Я экспериментирую с QtQuick3D на Qt 5.15. Это возможность встраивать QtQuick Item
s довольно круто. Мне нравится создавать прямоугольник (100 x 100 единиц) и заполнять его Image
(1000 x 1000 пикселей).
Это отлично работает, когда я определяю Material
и назначаю его (см. Модель okButCodeSpread
, правый прямоугольник на скриншоте), но это больше для кода.
Намного короче определить Node
и встроить Image
. Однако в этом случае мне сложно контролировать размер текстуры. Что бы я ни пробовал, это расплывчато. См. Модель doesNotWork
и левый прямоугольник на скриншоте.
Я нашел решение, увеличив масштаб Image
вверх и Node
вниз. См. Модель okButUgly
, средний прямоугольник на скриншоте.
Есть идеи, кому получить четкую текстуру для модели doesNotWork
?
Кроме того, как можно скрыть изображение в 2D, используемое для определения Material
? Установка для свойства visible значения false приводит к тому, что текстура в 3D будет solid черным ...
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
}
}