vcg.vertex.Normal3f

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

参考