如何告诉 VBO 处理给定的数据?(布料模拟)
How to tell a VBO to handle the given data? (cloth simulation)
我正在努力在openGL中创建布料模拟,我一直在尝试使用VAO和VBO进行渲染,而不是旧的即时模式(glBegin,glEnd(。
我认为最好只提供代码的相关部分而不是全部代码。所以我目前有一个类,Cloth,它把质量(节点(存储在一个向量中。
class Cloth {
private:
std::vector<Mass>masses;
public:
std::vector<Mass> getMasses() { return masses; };
// functions below
还有一个班级,弥撒。
class Mass {
glm::vec3 currentPos;
glm::vec3 oldPos;
glm::vec3 acceleration;
// functions below
我已经像这样创建了一个 VBO
glGenBuffers(1, &VBO_ID);
glBindBuffer(GL_ARRAY_BUFFER, VBO_ID);
glBufferData(GL_ARRAY_BUFFER, cloth.getMasses().size() * sizeof(Mass), &cloth.getMasses().front(), GL_DYNAMIC_DRAW);
和一个 VAO
glGenVertexArrays(1, &VAO_ID);
glBindVertexArray(VAO_ID);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3*sizeof(GL_FLOAT), 3*sizeof(GL_FLOAT)); // unsure about this part
根据我收集的信息,通过调用glVertexAttribPointer,你告诉VBO如何处理提供给它的数据。我给了它一个质量类型的矢量。
我告诉它如何处理数据以便它使用 currentPos 作为顶点的正确方法是什么?
是否有
更好的(性能方面(方法来做到这一点,如果是这样,如何以及为什么?
例如,最好使用结构来保存当前 PoS?
我认为代码没有任何问题。但是使用 vertexBuffer 属性,你不需要告诉 openGL 状态机使用 currentPos 作为顶点,这将在顶点着色器中完成。
编辑我发现代码有问题。我以为你只发送了原始类型。您不能将类发送到您的 GLSL 代码并希望它能够正常工作。YOu 可以发送数据,glVertexAttribPointer 会告诉您的着色器数据的布局。你正在做的事情是行不通的。
我建议你看看它 https://learnopengl.com/对我有很大帮助并且非常完整。
您将拥有:
layout (location = 0) in vec3 currentPos;
layout (location = 1) in vec3 oldPos;
layout (location = 2) in vec2 acceleration;
然后用这个输出顶点的位置:
gl_Position = mvp*vec4(currentPos, 1.0);
MVP 支持您可能作为统一发送的模型视图投影矩阵。
接下来的内容有点超出您的答案范围,但可能会很有趣:
虽然我不知道你想做什么,但你应该知道在顶点着色器中你不能编辑顶点属性,这意味着考虑到你的代码现在的样子,你必须更新你的 VBO 模拟的每一步。 您可以在CPU上更新它(这可能会很慢(, 但是在计算着色器中执行此操作可能会快得多。
- 如何使用Google Mock来模拟gettimeofday()
- G锁定铸造到基础上会释放模拟行为
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 落砂模拟碰撞检测C++和SFML
- 在gtest.中使用fff.h模拟系统API
- 谷歌模拟和覆盖关键字
- 用C#中的并集模拟C++嵌套结构
- 在同一模拟中使用静脉和静脉_ inet内容时出现运行时错误
- 在模拟器中使用并集来模拟CPU寄存器有多合适
- 我写了一个C++程序来模拟Enigma机器.我没有得到输出
- 如何模拟不同边数的骰子滚动?
- 模拟持久按键
- 使用SIR模型的疾病爆发模拟
- 在 c++ 中模拟输入并在 JAVA 中读取它?
- 转发变量参数列表以模拟 std::thread
- 如何在谷歌模拟中匹配 C 样式数组
- 如何使用兰德随机化模拟点击
- 如何告诉 VBO 处理给定的数据?(布料模拟)
- 使用 OpenGL 和 C++ 进行布料模拟
- OpenGL + 优化绘图粒子对象以进行布料模拟