3.qml 3D-Node类学习

2023-12-13 19:53:35

Node类是在View3D 中的对象基础组件,用于表示3D空间中的对象,类似于Qt Quick 2D场景中的Item,介绍如下所示:

如上图可以看到,Node类的子类非常多,比如Model类(显示3D模型)、ParticleSystem3D粒子系统类、Light光照类等等。

所以Node类非常重要,本章我们便来来学习Node类,再来学习其它类就会非常的方便快捷。

1.Node类介绍

Node类是一个节点类,Node 类具有用于确定其在3D空间中位置和变换的属性,如 position、rotation、scale 等。这些属性使得你可以在场景中移动、旋转和缩放3D元素。

Node类支持如下所示:

  1. 网格和几何体: Node 类可以包含3D网格或几何体,用于表示物体的形状。例如,Mesh 类是 Node 的子类,用于表示一个3D网格。
  2. 材质和纹理: Node 可以具有材质,其中包括纹理和其他渲染属性。Material 类是 Node 的子类,用于定义3D对象的外观。
  3. 相机: Camera 类是 Node 的子类,用于定义观察场景的视图。相机的属性包括视角、近裁剪面、远裁剪面等。
  4. 灯光: 不同类型的灯光,如 DirectionalLight、PointLight 和 SpotLight,也是 Node 的子类,用于模拟光照效果。
  5. 动画和变换: 通过属性动画和插值器,你可以使用 Node 类来实现动画效果。这包括改变 position、rotation 等属性,从而实现平滑的过渡效果。

Node常用属性如下所示:

  • eulerRotation : vector3d,该属性包含 x、y 和 z 轴的旋转值。这些值存储为 3d 向量。也可以看看QQuaternion::fromEulerAngles()。
  • forward : vector3d, 此属性返回场景空间中节点前进方向的归一化向量。也可以看看up,right, 和mapDirectionToScene。
  • opacity : real,设置节点不透明度值。该值会被该 Node 的所有子节点继承
  • pivot : vector3d,设置 x、y 和 z 轴的枢轴值。当对节点应用旋转时,这些值用作枢轴点。
  • position : vector3d,设置节点在坐标空间中的xyz位置
  • right : vector3d,此属性返回场景空间中节点右方向的归一化向量。
  • rotation : quaternion,该属性包含节点的旋转值。这些值存储为四元数。
  • scale : vector3d, 设置 x、y 和 z 轴的比例值。
  • scenePosition : vector3d,此属性返回当前节点在3D场景空间中的全局位置,假如一个Node下嵌套了多个Model,如果要获取某个Model的全局位置,则使用该属性。
  • sceneRotation : quaternion,此属性返回当前节点在3D场景空间中的x、y 和 z 轴的旋转值
  • sceneScale : vector3d,此属性返回当前节点在3D场景空间中的全局比例
  • sceneTransform : matrix4x4,该属性返回该节点的全局变换矩阵。
  • staticFlags : int,此属性定义用于评估节点渲染方式的静态标志。目前暂时没有作用,只是充当未来实现的属性。
  • up : vector3d,此属性返回场景空间中节点向上方向的归一化向量。
  • visible : bool,设置可见性,该值会被该 Node 的所有子节点继承
  • x : real,设置x位置,等于position中的x值
  • y : real,设置y位置,等于position中的y值
  • z : real,设置z位置,等于position中的z值

提供的方法如下所示:

vector3d mapDirectionFromNode(QtQuick3D::Node node, vector3d localDirection)

将localDirection从节点的局部空间变换到该节点的局部空间。返回值不受节点(继承的)比例或位置的影响。

注意:返回值将具有与localDirection相同的长度(即未标准化)

vector3d mapDirectionFromScene(vector3d sceneDirection)

将sceneDirection从场景3D空间转换为局部空间。返回值不受节点(继承的)比例或位置的影响。

注意:返回值将具有与sceneDirection相同的长度(即未标准化)。

vector3d mapDirectionToNode(QtQuick3D::Node node, vector3d localDirection)

将localDirection从此节点本地空间转换为节点的本地空间。返回值不受节点(继承的)比例或位置的影响。

注意:返回值将具有与localDirection相同的长度(即未标准化)。

vector3d mapDirectionToScene(vector3d localDirection)

将localDirection从本地空间变换到场景3D空间。返回值不受节点(继承的)比例或位置的影响。

注意:返回值将具有与localDirection相同的长度(即未标准化)。

vector3d mapPositionFromNode(QtQuick3D::Node node, vector3d localPosition)

将localPosition从节点的局部空间变换到该节点的局部空间。

vector3d mapPositionFromScene(vector3d scenePosition)

将scenePosition从场景3D空间变换到局部空间。

vector3d mapPositionToNode(QtQuick3D::Node node, vector3d localPosition)

将localPosition从此节点的本地空间转换为节点的本地空间。

vector3d mapPositionToScene(vector3d localPosition)

将localPosition从本地空间变换到场景3D空间。

注意: 场景3D空间含义是“3D 世界中的全局”,而不是“屏幕或桌面的全局”

rotate(real degrees, vector3d axis, enumeration space)

围绕axis轴旋转该节点给定的degrees度数。可以设置轴的空间类型,取值如下所示:

  • Node.LocalSpace 轴相对于该节点的局部方向。
  • Node.ParentSpace 轴相对于该父节点的局部方向。
  • Node.SceneSpace 轴是相对于3D场景的。

未完待续,后面学习该Node各个子类、在demo中实现这些方法调用实例

文章来源:https://blog.csdn.net/qq_37997682/article/details/134979556
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。