gpt4 book ai didi

c++ - 绘制 vector opengl C++

转载 作者:行者123 更新时间:2023-11-30 05:19:03 25 4
gpt4 key购买 nike

我关注了a tutorial使用 OpenGL 构建 .obj 模型。

我只有一个问题,最后,我们要绘制一个 vectorglm::vec3。

在教程中他们说使用“glBufferData()”

然后我做了那个

float* _vertices = new float[vertices.size() * 3];
for (int i = 0; i < vertices.size(); ++i)
{
float* _t = glm::value_ptr(vertices[i]);
for (int j = 0; j < 3; ++j)
_vertices[i + j*(vertices.size() - 1)] = _t[j];
}

(我将我的 vector 转换为非 float *)

然后我加载它:

mat4 projection;
mat4 modelview;

projection = perspective(70.0, (double)800 / 600, 1.0, 100.0);
modelview = mat4(1.0);

GLuint vertexbuffer;
glGenBuffers(1, &vertexbuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);

glBufferData(GL_ARRAY_BUFFER, sizeof(_vertices), _vertices, GL_DYNAMIC_DRAW);

我终于在我的主循环中绘制了它:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

modelview = lookAt(vec3(3, 1, 3), vec3(0, 0, 0), vec3(0, 1, 0));

glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);

glDrawArrays(GL_TRIANGLES, 0, vertices.size());
glDisableVertexAttribArray(0);

但它不起作用...(我有黑屏)

最佳答案

sizeof(_vertices) 不会给您所期望的。返回float*的大小,是一个指针,而不是指针后面数据的字节数。

使用 vertices.data() 作为指向 std::vector3 * vertices.size() * sizeof( float) 作为字节数,如果你的 vector 包含 float (glm::vec3 包含 3 个 float )。

一起喜欢:

glBufferData(GL_ARRAY_BUFFER, 3 * vertices.size() * sizeof(float), vertices.data(), GL_DYNAMIC_DRAW);

您还可以将 3 * sizeof(float) 替换为 sizeof(glm::vec3)

同时检查您的 glm::perspective 函数是否期望视野为度数或弧度,您当前使用的是 70.0 度。

关于c++ - 绘制 vector <glm::vec3> opengl C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41337585/

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