gpt4 book ai didi

c++ - 有没有办法做到这一点?

转载 作者:行者123 更新时间:2023-11-28 08:28:09 26 4
gpt4 key购买 nike

这是我的问题。我有一个 std::vector<POINTFLOAT>哪个存储顶点。问题是顶点缓冲区对象接受一个指向 float 组的指针。这就是我的问题。我不能给它一个 pointfloat 数组。有没有一种方法可以在不推送拷贝的情况下将指针推送到每个顶点的各个组件?

基本上不是:

vec[0].x
vec[0].y
vec[1].x
vec[1].y

变成

newvec[0]
newvec[1]
newvec[2]
newvec[3]

我想做一个 std::vector<float*>但我不认为 opengl 会喜欢这个。有没有办法在不复制数据的情况下做到这一点?

谢谢

不必为 point.x、point.y 复制数据,我希望 OpenGL 从原始 vector 中获取数据,所以基本上当 openGL 获取 vec[0] 时,它实际上会获取 pointvec[0].x 但是它需要像通过引用传递时一样,没有指向的成员

所以 Opengl 不能做 *vec[0]

最佳答案

您可以这样写,即您有一个用顶点填充的 std::vector,然后您调用一个接受 float* 的函数(例如 openGL 函数)。这是你想要的吗?

void some_function(float* data)
{

}

...

std::vector<float> vec;
vec.push_back(1.2); // x1
vec.push_back(3.4); // y1
vec.push_back(5.6); // x2
vec.push_back(7.8); // y2

some_function(&vec[0]);

编辑:这也有效,因为 float 在内存中的布局相同:

struct POINTFLOAT
{
float x;
float y;
};

void some_function(float* data)
{

}

...

std::vector<POINTFLOAT> vec;
vec.resize(2);
vec[0].x = 1.2; // x1
vec[0].y = 3.4; // y1
vec[1].x = 5.6; // x2
vec[1].y = 7.8; // y2

some_function((float*)(&vec[0]));

关于c++ - 有没有办法做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3233445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com