如果某些東西不合適,那麼第一個問題很抱歉。使用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
爲什麼按值傳遞頂點緩衝區數據? –