#include <iostream>
struct SVector
{
float X, Y, Z;
};
class CVector
{
private:
float X, Y, Z;
public:
CVector(float X, float Y, float Z) : X(X), Y(Y), Z(Z) {}
void set(float X, float Y, float Z)
{
this->X = X; this->Y = Y; this->Z = Z;
}
bool operator == (const CVector& V) const
{
return ((X == V.X) && (Y == V.Y) && (Z == V.Z));
}
CVector& operator ^= (const CVector& V)
{
X = (Y * V.Z) - (Z * V.Y);
Y = (Z * V.X) - (X * V.Z);
Z = (X * V.Y) - (Y * V.X);
return *this;
}
CVector& CrossProduct(const CVector& V)
{
return CVector(*this) ^= V;
}
};
void GLFunc(void* some_vertex_structure, int size, int stride)
{
for (int i = 0; i < size / stride; ++i)
{
unsigned char* c = reinterpret_cast<unsigned char*>(some_vertex_structure) + (stride * i);
std::cout<<*reinterpret_cast<float*>(c)<<"\n";
}
}
int main()
{
SVector sv = {1.0f, 2.0f, 3.0f};
CVector cv(4.0f, 5.0f, 6.0f);
GLFunc(&sv, sizeof(sv), sizeof(float));
GLFunc(&cv, sizeof(cv), sizeof(float));
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IFNWZWN0b3IKewoJZmxvYXQgWCwgWSwgWjsKfTsKCmNsYXNzIENWZWN0b3IKewoJcHJpdmF0ZToKCQlmbG9hdCBYLCBZLCBaOwoJCglwdWJsaWM6CgkJQ1ZlY3RvcihmbG9hdCBYLCBmbG9hdCBZLCBmbG9hdCBaKSA6IFgoWCksIFkoWSksIFooWikge30KCQkKCQl2b2lkIHNldChmbG9hdCBYLCBmbG9hdCBZLCBmbG9hdCBaKQoJCXsKCQkJdGhpcy0+WCA9IFg7IHRoaXMtPlkgPSBZOyB0aGlzLT5aID0gWjsKCQl9CgkJCgkJYm9vbCBvcGVyYXRvciA9PSAoY29uc3QgQ1ZlY3RvciYgVikgY29uc3QKCQl7CgkJICAgIHJldHVybiAoKFggPT0gVi5YKSAmJiAoWSA9PSBWLlkpICYmIChaID09IFYuWikpOwoJCX0KCQkKCQlDVmVjdG9yJiBvcGVyYXRvciBePSAoY29uc3QgQ1ZlY3RvciYgVikKCQl7CgkJICAgIFggPSAoWSAqIFYuWikgLSAoWiAqIFYuWSk7CgkJICAgIFkgPSAoWiAqIFYuWCkgLSAoWCAqIFYuWik7CgkJICAgIFogPSAoWCAqIFYuWSkgLSAoWSAqIFYuWCk7CgkJICAgIHJldHVybiAqdGhpczsKCQl9CgkJCgkJQ1ZlY3RvciYgQ3Jvc3NQcm9kdWN0KGNvbnN0IENWZWN0b3ImIFYpCgkJewoJCSAgICByZXR1cm4gQ1ZlY3RvcigqdGhpcykgXj0gVjsKCQl9Cn07CgoKdm9pZCBHTEZ1bmModm9pZCogc29tZV92ZXJ0ZXhfc3RydWN0dXJlLCBpbnQgc2l6ZSwgaW50IHN0cmlkZSkKewoJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplIC8gc3RyaWRlOyArK2kpCgl7CgkJdW5zaWduZWQgY2hhciogYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KHNvbWVfdmVydGV4X3N0cnVjdHVyZSkgKyAoc3RyaWRlICogaSk7CgkJc3RkOjpjb3V0PDwqcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KGMpPDwiXG4iOwoJfQp9CgppbnQgbWFpbigpCnsKCVNWZWN0b3Igc3YgPSB7MS4wZiwgMi4wZiwgMy4wZn07CgkKCUNWZWN0b3IgY3YoNC4wZiwgNS4wZiwgNi4wZik7CgkKCUdMRnVuYygmc3YsIHNpemVvZihzdiksIHNpemVvZihmbG9hdCkpOwoJR0xGdW5jKCZjdiwgc2l6ZW9mKGN2KSwgc2l6ZW9mKGZsb2F0KSk7CglyZXR1cm4gMDsKfQ==