我正在關注OpenGL的一些教程,並且遇到了問題。我構建了一個名爲Mesh
的類,該類在其構造函數中接受一個頂點數組,並生成頂點數組,並生成頂點數組,並繪製該頂點。問題是我沒有看到任何東西。下面是接口:OpenGL:vertexArray vs glBegin()
class Mesh
{
public:
Mesh(Vertex * vertices, size_t numVertices);
virtual ~Mesh();
void Draw();
private:
enum { POSITION_VB, NUM_BUFFERS };
GLuint m_vertexArrayObject;
GLuint m_vertexArrayBuffers;
size_t m_drawCount;
};
和這裏的實現
#include "mesh.h"
Mesh::Mesh(Vertex *vertices, size_t numVertices)
{
m_drawCount = numVertices;
glGenVertexArrays(1, &m_vertexArrayObject);
glBindVertexArray(m_vertexArrayObject);
glGenBuffers(NUM_BUFFERS, &m_vertexArrayBuffers);
glBindBuffer(GL_ARRAY_BUFFER, m_vertexArrayBuffers);
glBufferData(GL_ARRAY_BUFFER, numVertices * sizeof(vertices[0]), vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindVertexArray(0);
}
void Mesh::Draw()
{
glBindVertexArray(m_vertexArrayObject);
glDrawArrays(GL_TRIANGLES, 0, m_drawCount);
glBindVertexArray(0);
}
Mesh::~Mesh()
{
glDeleteVertexArrays(1, &m_vertexArrayObject);
}
的Vertex
類型是一個簡單的類,看起來
class Vertex {
public:
Vertex(glm::vec3 const & pos) { this->pos = pos;}
private:
glm::vec3 pos;
};
如果我改變的Mesh::Draw()
到
glBegin(GL_TRIANGLES);
glVertex3f(-1.0f, -0.25f, 0.0f); //triangle first vertex
glVertex3f(-0.5f, -0.25f, 0.0f); //triangle second vertex
glVertex3f(-0.75f, 0.25f, 0.0f); //triangle third vertex
glEnd(); //end drawing of triangles
我得到一個三角形打印到屏幕上。我的問題是:這是否意味着在執行Mesh
'成員函數時出現錯誤,如果有的話,任何人都可以發現它嗎?我想也許glBegin
方法繞過在vertexarray方法無法繞過的代碼中的其他地方的一些錯誤。我會很感激任何幫助。另外,如果需要,我可以發佈其他代碼!
着色器代碼:
#version 120
void main()
{
gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0);
}
着色器呢? –
我在其他地方設置了着色器,我很確定它們正常工作,因爲它們也確定可繪製的glBegin部分的顏色 – Slugger
@Slugger:不可能編寫單個着色器,它可以與* * * glVertex *命令和'glVertexAttribPointer'命令。至少,不是沒有依靠NVIDIA的非標準行爲。所以我想看看你的着色器。 –