glDrawArrays在GL_TRIANGLES模式下不绘制任何内容

时间:2014-07-14 08:06:09

标签: c++ opengl sdl glew

我的问题是glDrawArray命令停止工作。我写过一些我用过那个命令的程序。但是现在,我不知道它为什么不起作用。

但我仍然可以使用GL_LINES代替GL_TRIANGLES在屏幕上绘制线条。

这是我的代码:

#include "Mesh.h"
#include <iostream>

Mesh::Mesh()
{
    glGenVertexArrays(1, &vao);
    glBindVertexArray(vao);

    glGenBuffers(1, &vbo);
    size = 0;
}

void Mesh::AddVertices(const Vertex vertices[], int length)
{
    size = length;

    glBindBuffer(GL_ARRAY_BUFFER, vbo);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
}

void Mesh::Draw()
{
    glEnableVertexAttribArray(0);

    glBindBuffer(GL_ARRAY_BUFFER, vbo);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, Vertex::SIZE * 4, 0);

    glDrawArrays(GL_TRIANGLES, 0, size);

    glDisableVertexAttribArray(0);
}

Draw总是被Game类调用。我的Vertex课程:

#include "Vertex.h"

Vertex::Vertex(glm::vec3 pos)
{
    this->pos = pos;
}

Vertex::Vertex(float x, float y, float z)
{
    pos = glm::vec3(x, y, z);
}

glm::vec3 Vertex::GetPos() const
{
    return pos;
}

void Vertex::SetPos(glm::vec3 pos)
{
    this->pos = pos;
}

2 个答案:

答案 0 :(得分:2)

我找到了解决方案。当我初始化我的OpenGL函数时,我不小心写了glFrontFace(GL_CW)而不是glFrontFace(GL_CCW)

答案 1 :(得分:1)

sizeof(vertices)sizeof(void*),因为在C或C ++中,函数参数中的数组会衰减为指针。如果大小以字节为单位,则应使用第二个参数中提供的length