我要这个:
GLfloat vertices2[] {
-0.5f, -0.5f, 0.0f, // left
0.5f, -0.5f, 0.0f, // right
0.0f, 0.5f, 0.0f // top
};
Run Code Online (Sandbox Code Playgroud)
和这个:
std::vector<Vec3> vertices3 {
{{ -0.5f, -0.5f, 0.0f}, // left
{ 0.5f, -0.5f, 0.0f },// right
{ 0.0f, 0.5f, 0.0f}} // top
};
Run Code Online (Sandbox Code Playgroud)
具有等效的内存布局,以便我可以将其传递给 OpenGL。
IIUCstd::vector保证连续列出其数据,但我对我的Vec3课程不太确定。
我定义Vec3为:
class Vec3 {
private:
GLfloat _data[3];
public:
Vec3(GLfloat x, GLfloat y, GLfloat z) : _data{x,y,z} {};
GLfloat &x = _data[0];
GLfloat &y = _data[1];
GLfloat &z = _data[2];
inline GLfloat &operator[](size_t i) {
return _data[i];
}
};
Run Code Online (Sandbox Code Playgroud)
但我认为有些事情是错误的,因为vertices3.data()似乎不等于vertices2。
哦..我想我的参考资料不是很免费,是吗?GLfloat &x = _data[0]是添加一个指针吗?有没有另一种方法可以在不受到惩罚的情况下编写此代码,并且除了 之外仍然保留.x,语法?.y[]
这些GLFloat&成员也占用空间。将它们替换为成员函数,例如:
GLfloat& x() { return _data[0]; }
const GLfloat x() const { return _data[0]; }
Run Code Online (Sandbox Code Playgroud)
或者直接使用glm::vec3常用的 GLM 库。