vcg.vertex.Normal3f是一个C++模板,提供3D模型顶点法线的存储和操作。
Normal3f();
Normal3f(float x, float y, float z);
Normal3f(const Point3f& v);
Normal3f(const Normal3f& v);
构造方法用于创建Normal3f对象。
Normal3f()
: 创建一个全为零的Normal3f对象。Normal3f(float x, float y, float z)
: 使用给定的x,y,z值创建一个Normal3f对象。Normal3f(const Point3f& v)
: 使用指定3D点v的x,y,z值创建一个Normal3f对象。Normal3f(const Normal3f& v)
: 使用指定的Normal3f对象v创建一个Normal3f对象。float& operator[](const int n);
const float& operator[](const int n) const;
Normal3f operator-() const;
Normal3f operator+(const Normal3f& rhs) const;
Normal3f operator-(const Normal3f& rhs) const;
Normal3f operator*(const float d) const;
Normal3f operator/(const float d) const;
Normal3f& operator+=(const Normal3f& rhs);
Normal3f& operator-=(const Normal3f& rhs);
Normal3f& operator*=(const float d);
Normal3f& operator/=(const float d);
bool operator==(const Normal3f& rhs) const;
bool operator!=(const Normal3f& rhs) const;
float Length() const;
float LengthSquared() const;
float Normalize();
Normal3f Normalized() const;
float Dot(const Normal3f& rhs) const;
成员方法用于在Normal3f对象上执行操作。
operator[]
: 数组下标操作符用于访问Normal3f中的元素。operator-
: 一元运算符。返回正反方向的法线。operator+
: 二元运算符。返回两个法线的矢量和。operator-
: 二元运算符。返回两个法线的矢量差。operator*
: 二元运算符。返回法线和标量d的乘积。operator/
: 二元运算符。返回法线和标量d的商。operator+=
: 增量操作符。将该法线与rhs相加并覆盖原始法线。operator-=
: 减量操作符。将该法线与rhs相减并覆盖原始法线。operator*=
: 增量操作符。将该法线乘以标量d并覆盖原始法线。operator/=
: 减量操作符。将该法线除以标量d并覆盖原始法线。operator==
: 判断两个法线是否相等。operator!=
: 判断两个法线是否不等。Length()
: 计算法线的长度。LengthSquared()
: 计算法线的长度的平方。Normalize()
: 将法线标准化,返回标准化后法线的长度。Normalized()
: 返回标准化后的法线。Dot()
: 计算该法线与rhs法线的点积。Normal3f对象只有一个属性,即三个float类型的元素(x,y,z),用来存储法线向量。
#include <iostream>
#include <vcg/math/normal.h>
using namespace vcg::math;
int main() {
Normal3f a(1, 2, 3); // 创建3D法线向量
std::cout << "a: " << a[0] << " " << a[1] << " " << a[2] << std::endl; // 输出法线向量的值
Normal3f b(a); // 复制3D法线向量
std::cout << "b: " << b[0] << " " << b[1] << " " << b[2] << std::endl; // 输出法线向量的值
Normal3f c = a + b; // 计算两条法线向量的和
std::cout << "c: " << c[0] << " " << c[1] << " " << c[2] << std::endl; // 输出法线向量的值
Normal3f d = a - b; // 计算两条法线向量的差
std::cout << "d: " << d[0] << " " << d[1] << " " << d[2] << std::endl; // 输出法线向量的值
Normal3f e = a * 2; // 计算法线向量的标量积
std::cout << "e: " << e[0] << " " << e[1] << " " << e[2] << std::endl; // 输出法线向量的值
float f = Dot(a, b); // 计算两条法线向量的点积
std::cout << "f: " << f << std::endl; // 输出点积的值
return 0;
}
输出:
a: 1 2 3
b: 1 2 3
c: 2 4 6
d: 0 0 0
e: 2 4 6
f: 14