QVector3D Class
QVector3D 类表示三维空间中的向量或顶点。更多内容...
| 头文件: | #include <QVector3D> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
- 所有成员的列表,包括继承的成员
- QVector3D 属于“3D渲染”范畴。
公共函数
| QVector3D() | |
| QVector3D(QPoint point) | |
| QVector3D(QPointF point) | |
| QVector3D(QVector2D vector) | |
| QVector3D(QVector4D vector) | |
| QVector3D(QVector2D vector, float zpos) | |
| QVector3D(float xpos, float ypos, float zpos) | |
| float | distanceToLine(QVector3D point, QVector3D direction) const |
| float | distanceToPlane(QVector3D plane, QVector3D normal) const |
| float | distanceToPlane(QVector3D plane1, QVector3D plane2, QVector3D plane3) const |
| float | distanceToPoint(QVector3D point) const |
| bool | isNull() const |
| float | length() const |
| float | lengthSquared() const |
| void | normalize() |
| QVector3D | normalized() const |
| QVector3D | project(const QMatrix4x4 &modelView, const QMatrix4x4 &projection, const QRect &viewport) const |
| void | setX(float x) |
| void | setY(float y) |
| void | setZ(float z) |
| QPoint | toPoint() const |
| QPointF | toPointF() const |
| QVector2D | toVector2D() const |
| QVector4D | toVector4D() const |
| QVector3D | unproject(const QMatrix4x4 &modelView, const QMatrix4x4 &projection, const QRect &viewport) const |
| float | x() const |
| float | y() const |
| float | z() const |
| operator QVariant() const | |
| QVector3D & | operator*=(float factor) |
| QVector3D & | operator*=(QVector3D vector) |
| QVector3D & | operator+=(QVector3D vector) |
| QVector3D & | operator-=(QVector3D vector) |
| QVector3D & | operator/=(QVector3D vector) |
| QVector3D & | operator/=(float divisor) |
| float & | operator[](int i) |
| float | operator[](int i) const |
静态公共成员
| QVector3D | crossProduct(QVector3D v1, QVector3D v2) |
| float | dotProduct(QVector3D v1, QVector3D v2) |
| QVector3D | normal(QVector3D v1, QVector3D v2) |
| QVector3D | normal(QVector3D v1, QVector3D v2, QVector3D v3) |
相关的非成员
| bool | qFuzzyCompare(QVector3D v1, QVector3D v2) |
(since 6.12) size_t | qHash(QVector3D key, size_t seed = 0) |
| bool | operator!=(QVector3D v1, QVector3D v2) |
| QVector3D | operator*(QVector3D v1, QVector3D v2) |
| QVector3D | operator*(QVector3D vector, float factor) |
| QVector3D | operator*(float factor, QVector3D vector) |
| QVector3D | operator+(QVector3D v1, QVector3D v2) |
| QVector3D | operator-(QVector3D v1, QVector3D v2) |
| QVector3D | operator-(QVector3D vector) |
| QVector3D | operator/(QVector3D vector, QVector3D divisor) |
| QVector3D | operator/(QVector3D vector, float divisor) |
| QDataStream & | operator<<(QDataStream &stream, QVector3D vector) |
| bool | operator==(QVector3D v1, QVector3D v2) |
| QDataStream & | operator>>(QDataStream &stream, QVector3D &vector) |
另请参阅 QVector2D 、QVector4D 以及QQuaternion 。
成员函数文档
[constexpr noexcept] QVector3D::QVector3D()
构建一个零向量,即坐标为 (0, 0, 0) 的向量。
[explicit constexpr noexcept] QVector3D::QVector3D(QPoint point)
根据一个二维point ,构建一个具有x和y坐标的向量,其z坐标为0。
[explicit constexpr noexcept] QVector3D::QVector3D(QPointF point)
根据一个二维point ,构建一个具有x和y坐标的向量,其z坐标为0。
[explicit constexpr noexcept] QVector3D::QVector3D(QVector2D vector)
根据指定的二维vector 构建一个三维向量。z坐标被设为零。
另请参阅 toVector2D()。
[explicit constexpr noexcept] QVector3D::QVector3D(QVector4D vector)
根据指定的 4D 向量vector 构建一个 3D 向量。w 坐标被舍弃。
另请参阅 toVector4D()。
[constexpr noexcept] QVector3D::QVector3D(QVector2D vector, float zpos)
根据指定的二维向量vector 构建一个三维向量。z坐标设置为zpos ,该值必须为有限数。
另请参阅 toVector2D()。
[constexpr noexcept] QVector3D::QVector3D(float xpos, float ypos, float zpos)
构建一个坐标为 (xpos,ypos,zpos) 的向量。所有参数必须为有限值。
[static constexpr noexcept] QVector3D QVector3D::crossProduct(QVector3D v1, QVector3D v2)
返回向量v1 和v2 的叉积,该向量垂直于由v1 和v2 张成的平面。如果这两个向量平行,则结果为零。
另请参阅 normal()。
[noexcept] float QVector3D::distanceToLine(QVector3D point, QVector3D direction) const
返回该顶点到由point 和单位向量direction 所定义的直线之间的距离。
如果direction 是零向量,则它不定义一条直线。在这种情况下,将返回point 到该顶点的距离。
另请参阅 distanceToPlane()。
[constexpr noexcept] float QVector3D::distanceToPlane(QVector3D plane, QVector3D normal) const
返回该顶点到由顶点plane 和单位向量normal 定义的平面之间的距离。假设参数normal 已被归一化为单位向量。
如果顶点位于平面下方,返回值为负数;如果位于平面上,返回值为零。
另请参阅 normal() 和distanceToLine()。
[noexcept] float QVector3D::distanceToPlane(QVector3D plane1, QVector3D plane2, QVector3D plane3) const
返回该顶点到由顶点plane1 、plane2 和plane3 定义的平面的距离。
如果顶点位于平面下方,返回值为负数;如果位于平面上,返回值为零。
定义该平面的两个向量分别为plane2 -plane1 和plane3 -plane1 。
另请参见 normal() 和distanceToLine()。
[noexcept] float QVector3D::distanceToPoint(QVector3D point) const
返回该顶点到由顶点point 定义的点之间的距离。
另请参阅 distanceToPlane() 和distanceToLine()。
[static constexpr noexcept] float QVector3D::dotProduct(QVector3D v1, QVector3D v2)
返回v1 与v2 的点积。
[constexpr noexcept] bool QVector3D::isNull() const
如果 x、y 和 z 坐标均设为 0.0,则返回 `true `;否则返回 `false`。
[noexcept] float QVector3D::length() const
返回向量到原点的长度。
另请参阅 lengthSquared() 和normalized()。
[constexpr noexcept] float QVector3D::lengthSquared() const
返回向量到原点的距离的平方。这等同于该向量与自身的点积。
另请参阅 length() 和dotProduct()。
[static noexcept] QVector3D QVector3D::normal(QVector3D v1, QVector3D v2)
返回由向量v1 和v2 张成的平面的单位法向量,这两个向量不得彼此平行。
若不需要将结果归一化为单位向量,请使用crossProduct() 来计算v1 与v2 的叉积。
另请参阅 crossProduct() 和distanceToPlane()。
[static noexcept] QVector3D QVector3D::normal(QVector3D v1, QVector3D v2, QVector3D v3)
返回由向量v2 -v1 和v3 -v1 所张成的平面的单位法向量,这两个向量不得彼此平行。
若不需要将结果归一化为单位向量,请使用crossProduct() 来计算v2 -v1 与v3 -v1 的叉积。
另请参阅 crossProduct() 和distanceToPlane()。
[noexcept] void QVector3D::normalize()
就地对当前向量进行归一化。如果该向量为空向量,或者向量的长度非常接近 1,则不会发生任何变化。
另请参阅 length() 和normalized()。
[noexcept] QVector3D QVector3D::normalized() const
返回该向量的归一化单位向量形式。
如果该向量为空,则返回空向量。如果向量的长度非常接近 1,则直接返回该向量。否则,将返回长度为 1 的该向量的归一化形式。
QVector3D QVector3D::project(const QMatrix4x4 &modelView, const QMatrix4x4 &projection, const QRect &viewport) const
返回该向量的窗口坐标,该向量最初以对象/模型坐标系表示,计算时使用模型视图矩阵modelView 、投影矩阵projection 以及视口尺寸viewport 。
在从裁剪空间转换到归一化空间时,会对向量分量进行除以 w 分量的运算。为避免 w 等于 0 时出现除以 0 的情况,w 被设置为 1。
注意: 返回的 y 坐标采用 OpenGL 方向。OpenGL 默认底部为 0,而 Qt OpenGL 中顶部为 0。
另请参阅 unproject()。
[constexpr noexcept] void QVector3D::setX(float x)
将该点的 x 坐标设置为给定的有限x 坐标。
[constexpr noexcept] void QVector3D::setY(float y)
将该点的 y 坐标设置为给定的有限坐标y 。
[constexpr noexcept] void QVector3D::setZ(float z)
将该点的 z 坐标设置为给定的有限坐标z 。
[constexpr noexcept] QPoint QVector3D::toPoint() const
返回该三维向量的QPoint 形式。z坐标将被舍弃。x和y坐标将四舍五入为最接近的整数。
另请参阅 toPointF() 和toVector2D()。
[constexpr noexcept] QPointF QVector3D::toPointF() const
返回该三维向量的QPointF 表示形式。z坐标将被舍弃。
另请参阅 toPoint() 和toVector2D()。
[constexpr noexcept] QVector2D QVector3D::toVector2D() const
返回该三维向量的二维向量形式,并舍弃 z 坐标。
另请参阅 toVector4D() 和toPoint()。
[constexpr noexcept] QVector4D QVector3D::toVector4D() const
返回该 3D 向量的 4D 形式,其中 w 坐标被设为零。
另请参阅 toVector2D() 和toPoint()。
QVector3D QVector3D::unproject(const QMatrix4x4 &modelView, const QMatrix4x4 &projection, const QRect &viewport) const
返回该向量的对象/模型坐标,该向量最初以窗口坐标表示,计算时使用模型视图矩阵modelView 、投影矩阵projection 以及视口尺寸viewport 。
在从剪裁空间转换到归一化空间时,会对向量分量进行除以 w 分量的运算。为防止 w 等于 0 时发生除以 0 的情况,将其设置为 1。
注意: viewport 中的y 坐标应采用 OpenGL 坐标系。OpenGL 默认底部为 0,而 Qt 默认顶部为 0。
另请参阅 project()。
[constexpr noexcept] float QVector3D::x() const
返回该点的 x 坐标。
[constexpr noexcept] float QVector3D::y() const
返回该点的 y 坐标。
[constexpr noexcept] float QVector3D::z() const
返回该点的 z 坐标。
QVector3D::operator QVariant() const
将该 3D 向量作为 `QVariant` 返回。
[constexpr noexcept] QVector3D &QVector3D::operator*=(float factor)
将该向量的坐标乘以给定的有限数factor ,并返回该向量的引用。
另请参阅 operator/=() 和operator*()。
[constexpr noexcept] QVector3D &QVector3D::operator*=(QVector3D vector)
将该向量的每个分量与向量vector 中的对应分量相乘,并返回该向量的引用。
注意:这与该向量的crossProduct()方法以及vector 方法不同。(其各分量的和即为该向量与vector 的点积。)
这是一个重载函数。
另请参阅 crossProduct()、operator/=() 和operator*()。
[constexpr noexcept] QVector3D &QVector3D::operator+=(QVector3D vector)
将给定的vector 添加到该向量中,并返回该向量的引用。
另请参阅 operator-=()。
[constexpr noexcept] QVector3D &QVector3D::operator-=(QVector3D vector)
从该向量中减去给定的vector ,并返回该向量的引用。
另请参阅 operator+=()。
[constexpr] QVector3D &QVector3D::operator/=(QVector3D vector)
将该向量的每个分量除以vector 中对应的分量,并返回该向量的引用。
vector 中的所有分量均不得为零或 NaN。
另请参阅 operator*=() 和operator/()。
[constexpr] QVector3D &QVector3D::operator/=(float divisor)
将该向量的坐标除以给定的divisor ,并返回对该向量的引用。divisor 不能为零或 NaN。
另请参阅 operator*=() 和operator/()。
[constexpr] float &QVector3D::operator[](int i)
返回向量中索引位置为i 的分量,作为可修改的引用。
i i 必须是向量中的有效索引位置(即 0 <= < 3)。
[constexpr] float QVector3D::operator[](int i) const
返回向量在索引位置i 处的分量。
i 该索引位置必须是向量中的有效索引位置(即 0 <=i < 3)。
相关的非成员函数
[noexcept] bool qFuzzyCompare(QVector3D v1, QVector3D v2)
如果 `v1 ` 和 `v2 ` 相等,则返回 `true `(浮点数比较时允许存在微小的误差);否则返回 `false`。
[constexpr noexcept, since 6.12] size_t qHash(QVector3D key, size_t seed = 0)
返回key 的哈希值,并使用seed 作为计算的种子。
该函数于 Qt 6.12 中引入。
[constexpr noexcept] bool operator!=(QVector3D v1, QVector3D v2)
如果v1 不等于v2 ,则返回true ;否则返回false 。该运算符使用精确浮点比较。
[constexpr noexcept] QVector3D operator*(QVector3D v1, QVector3D v2)
返回由将v1 的每个分量与v2 的对应分量相乘而形成的QVector3D 对象。
注意:这 与v1 和v2 的crossProduct()方法不同。(后者的各分量相加即为v1 和v2 的点积。)
另请参阅 QVector3D::crossProduct()。
[constexpr noexcept] QVector3D operator*(QVector3D vector, float factor)
返回给定vector 的副本,并将其与给定的有限factor 相乘。
另请参阅 QVector3D::operator*=()。
[constexpr noexcept] QVector3D operator*(float factor, QVector3D vector)
返回给定vector 的副本,并将其与给定的有限factor 相乘。
另请参阅 QVector3D::operator*=()。
[constexpr noexcept] QVector3D operator+(QVector3D v1, QVector3D v2)
返回一个QVector3D 对象,该对象是给定向量v1 和v2 的和;每个分量分别相加。
另请参阅 QVector3D::operator+=()。
[constexpr noexcept] QVector3D operator-(QVector3D v1, QVector3D v2)
返回一个QVector3D 对象,该对象由从v1 中减去v2 得到;每个分量分别进行减法运算。
另请参阅 QVector3D::operator-=()。
[constexpr noexcept] QVector3D operator-(QVector3D vector)
返回一个QVector3D 对象,该对象是通过将给定的vector 中每个分量的符号进行反转而形成的。
等同于 `QVector3D(0,0,0) - vector`。
这是一个重载函数。
[constexpr] QVector3D operator/(QVector3D vector, QVector3D divisor)
返回一个QVector3D 对象,该对象是通过将给定的vector 的每个分量除以给定的divisor 中对应的分量而形成的。
该divisor 中不得包含任何值为零或NaN的分量。
另请参阅 QVector3D::operator/=()。
[constexpr] QVector3D operator/(QVector3D vector, float divisor)
返回由将给定的vector 的每个分量除以给定的divisor 所构成的QVector3D 对象。
该divisor 的值不得为零或NaN。
另请参阅 QVector3D::operator/=()。
QDataStream &operator<<(QDataStream &stream, QVector3D vector)
将给定的vector 写入给定的stream ,并返回该流的引用。
另请参阅 《Qt 数据类型的序列化》。
[constexpr noexcept] bool operator==(QVector3D v1, QVector3D v2)
如果 `v1 ` 等于 `v2`,则返回 `true `;否则返回 `false`。该运算符使用精确浮点比较。
QDataStream &operator>>(QDataStream &stream, QVector3D &vector)
从给定的stream 中读取一个3D向量到给定的vector 中,并返回该流的引用。
另请参阅 《Qt 数据类型的序列化》。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.