Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL VAO始终从原点绘制第一个顶点_Opengl_D_Vao - Fatal编程技术网

OpenGL VAO始终从原点绘制第一个顶点

OpenGL VAO始终从原点绘制第一个顶点,opengl,d,vao,Opengl,D,Vao,标题总结了我的问题,但无论我将第一个顶点设置为什么,OpenGL总是在原点绘制它。我在学校的电脑上试过这个,没问题,但我不在学校,可能是我改变了什么导致了这个问题。不管怎样,我看不出为什么会发生这种情况。如果语法看起来很奇怪,那么这段代码是用D编写的,但应该是C的一个几乎无缝的端口 我的代码是: class Mesh { this(vec3[] vertices, uint[] indices) { draw_count = indices.length; glGenV

标题总结了我的问题,但无论我将第一个顶点设置为什么,OpenGL总是在原点绘制它。我在学校的电脑上试过这个,没问题,但我不在学校,可能是我改变了什么导致了这个问题。不管怎样,我看不出为什么会发生这种情况。如果语法看起来很奇怪,那么这段代码是用D编写的,但应该是C的一个几乎无缝的端口

我的代码是:

class Mesh
{
this(vec3[] vertices, uint[] indices)
{    
    draw_count = indices.length;

    glGenVertexArrays(1, &vertex_array_object);
    glBindVertexArray(vertex_array_object);

    glGenBuffers(NUM_BUFFERS, vertex_array_buffers.ptr);
    glBindBuffer(GL_ARRAY_BUFFER, vertex_array_buffers[POSITION_VB]);
    glBufferData(GL_ARRAY_BUFFER, vertices.length * vertices.sizeof, vertices.ptr, GL_STATIC_DRAW);

    glEnableVertexAttribArray(0);
    glVertexAttribPointer(cast(GLuint)0, 3, GL_FLOAT, GL_FALSE, 0, cast(void*)0);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vertex_array_buffers[INDEX_VB]);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.length * indices.sizeof, indices.ptr, GL_STATIC_DRAW);

    glBindVertexArray(0);
}
void draw()
{
    glBindVertexArray(vertex_array_object);

    glDrawElements(GL_TRIANGLES, draw_count, GL_UNSIGNED_INT, cast(const(void)*)0);

    glBindVertexArray(0);
}
private:
    enum 
    {
        POSITION_VB,
        INDEX_VB,
        NORMAL_VB,
        NUM_BUFFERS
    };
GLuint vertex_array_object;
GLuint vertex_array_buffers[NUM_BUFFERS];
vec3 normals;
int draw_count;
}

顶点[索引[0]]
不是0(或任何下摆)?我的顶点被定义为
自动顶点=[vec3(-0.5f,-0.5f,0.0f),vec3(0.0f,0.5f,0.0f),vec3(0.5f,-0.5f,0.0f)]并且你只有从0到2(包括)的索引?在这个例子中是的,但是我也在一个非常基本的OBJ加载程序中使用了这段代码,我使用的测试立方体模型也有固定到原点的顶点。我在学校的Ubuntu上运行了这个应用程序,它可以很好地渲染三角形。但是,在基本操作系统上,它仍然无法正确渲染三角形。