Я проверяю, пересекает ли луч треугольник. На данный момент я использую следующий код, чтобы проверить, есть ли пересечение между треугольником и лучом от начала координат до середины треугольника:
Я проверяю, пересекает ли луч треугольник. На данный момент я использую следующий код, чтобы проверить, есть ли пересечение между треугольником и лучом от начала координат до середины треугольника: [code]Ray *ray = new Ray(Vec3(0), chosenTriangle->GetTriangleMidpoint()); [/code] Рядом находится объект Vec3, который я использую для хранения векторных операций: [code]template class Vec3 { public: T x, y, z; Vec3() : x(T(0)), y(T(0)), z(T(0)) { } Vec3(T xx) : x(xx), y(xx), z(xx) { }
Vec3(T xx, T yy, T zz) : x(xx), y(yy), z(zz) {} Vec3& normalize() { T nor2 = length2(); if (nor2 > 0) { T invNor = 1 / sqrt(nor2); x *= invNor, y *= invNor, z *= invNor; } return *this; }
Vec3 operator * (const T &f) const { return Vec3(x * f, y * f, z * f); } Vec3 operator * (const Vec3 &v) const { return Vec3(x * v.x, y * v.y, z * v.z); } T dot(const Vec3 &v) const { return x * v.x + y * v.y + z * v.z; } Vec3 operator - (const Vec3 &v) const { return Vec3(x - v.x, y - v.y, z - v.z); } Vec3 operator + (const Vec3 &v) const { return Vec3(x + v.x, y + v.y, z + v.z); } bool operator == (const Vec3 &v) { return x == v.x && y == v.y && z == v.z; } Vec3 operator - () const { return Vec3(-x, -y, -z); } T length2() const { return x * x + y * y + z * z; } T length() const { return sqrt(length2()); } Vec3 CrossProduct(Vec3 other) { return Vec3(y*other.z - other.y*z, x*other.z - z*other.x, x*other.y - y*other.x); } friend std::ostream & operator