如果某些东西不合适,那么第一个问题很抱歉。使用OpenGL制作另一个对象
下面是一个工作得很好的代码片段。
初始化函数
ShaderLoader shaderloader;
Program = shaderloader.LoadShaders("VertexShader.vs", "FragmentShader.fs");
glGenVertexArrays(1, &VertexArrayObject);
glBindVertexArray(VertexArrayObject);
glGenBuffers(1, &VertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, VertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexBufferData) *
vertexBufferData.size(), &vertexBufferData.front(), GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);
glBindVertexArray(0);
渲染功能
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.0, 0.0, 0.0, 1.0);
glUseProgram(Program);
glBindVertexArray(VertexArrayObject);
glDrawArrays(GL_TRIANGLES, 0, 6);
glBindVertexArray(0);
glutSwapBuffers();
这一切工作我的main.cpp内正常,但当我把这个放到一个类它给了我一个访问冲突错误。我的类容器包含自己的VertexArrayObject和VertexBuffer,所以我假设应该有足够的信息来绘制一个简单的三角形,因为它不在类中时可以很好地绘制。我的最终目标是创建两个对象,所以如果我要完全错误的请指出我的方向正确!
代码在精灵类:
void Mesh::init(std::vector<GLfloat> vertexBufferData)
{
glGenVertexArrays(1, &VertexArrayObject);
glBindVertexArray(VertexArrayObject);
glGenBuffers(1, &VertexArrayObject);
glBindBuffer(GL_ARRAY_BUFFER, VertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexBufferData) *
vertexBufferData.size(), &vertexBufferData.front(), GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);
glBindVertexArray(0);
}
void Mesh::Draw()
{
glBindVertexArray(VertexArrayObject);
glDrawArrays(GL_TRIANGLES, 0, 6);
glBindVertexArray(0);
}
我如何使用类在main.cpp中:
Mesh object1;
void init()
{
ShaderLoader shaderloader;
Program = shaderloader.LoadShaders("VertexShader.vs", "FragmentShader.fs");
object1.init(vertexBufferData);
}
void Render()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.0, 0.0, 0.0, 1.0);
glUseProgram(Program);
object1.Draw();
glutSwapBuffers();
}
而抛出的异常是:0x5253F00A
访问冲突阅读地点
请将错误消息和代码放在实际放入类中的位置。 –
已编辑。对于那个很抱歉! – Vishuu
为什么按值传递顶点缓冲区数据? –