簡體   English   中英

使用 OpenGL 3 繪制 3D 立方體的邊緣時遇到問題

[英]Having issues drawing 3D cube's edges with OpenGL 3

我正在嘗試使用 OpenGL(4.3 核心配置文件)繪制 3D 立方體的頂點(僅邊緣),我知道glPolygonMode函數,但我不想繪制中間對角線。 我像這樣聲明我的頂點和索引:

struct Vertex {
    glm::vec3 pos;
    glm::vec3 color;
    glm::vec3 normal;
    glm::vec2 uv;
};

Vertex vertices[8];

// Front vertices
vertices[0].pos = glm::vec3(-0.5f, -0.5f, +0.5f);
vertices[1].pos = glm::vec3(+0.5f, -0.5f, +0.5f);
vertices[2].pos = glm::vec3(+0.5f, +0.5f, +0.5f);
vertices[3].pos = glm::vec3(-0.5f, +0.5f, +0.5f);

// Back vertices
vertices[4].pos = glm::vec3(-0.5f, -0.5f, -0.5f);
vertices[5].pos = glm::vec3(+0.5f, -0.5f, -0.5f);
vertices[6].pos = glm::vec3(+0.5f, +0.5f, -0.5f);
vertices[7].pos = glm::vec3(-0.5f, +0.5f, -0.5f);

GLuint indices[36] = {
    0, 1, 2, 2, 3, 0, // Front
    1, 5, 6, 6, 2, 1, // Right
    7, 6, 5, 5, 4, 7, // Back
    4, 0, 3, 3, 7, 4, // Left
    4, 5, 1, 1, 0, 4, // Bottom
    3, 2, 6, 6, 7, 3 // Top
};

我的緩沖區相應地更新:

// Bind Vertex Array
glBindVertexArray(_VAO);

// Bind VBO to GL_ARRAY_BUFFER type so that all calls to GL_ARRAY_BUFFER use VBO
glBindBuffer(GL_ARRAY_BUFFER, _VBO);

// Upload vertices to VBO
glBufferData(GL_ARRAY_BUFFER, verticesNb * sizeof(Vertex), vertices, GL_STATIC_DRAW);

// Bind EBO to GL_ARRAY_BUFFER type so that all calls to GL_ARRAY_BUFFER use EBO
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _EBO);

// Updload indices to EBO
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indicesNb * sizeof(GLuint), indices, GL_STATIC_DRAW);

我正在使用glDrawElements(GL_LINES, 36, GL_UNSIGNED_INT, 0); 繪制我的立方體的邊緣,但由於某種原因它沒有繪制一些邊緣,我不明白為什么。

如果我使用 GL_TRIANGLES,當我想在填充模式下渲染我的 3D 立方體時,它工作得很好。 有誰知道我在這里想念什么? 是指數的問題嗎?

(下面的“立方體”的自定義大小為(1.0f, 2.0f, 3.0f)

OpenGL立方體

您的索引形成GL_TRIANGLES基元而不是GL_LINES基元。 GL_LINES

頂點 0 和 1 被視為一條線。 頂點 2 和 3 被視為一條線。 等等。

索引形成基元。 更改索引:

GLuint indices[] = {
    0, 1, 1, 2, 2, 3, 3, 0, // Front
    4, 5, 5, 6, 6, 7, 7, 4, // Back
    0, 4, 1, 5, 2, 6, 3, 7
};
glDrawElements(GL_LINES, 24, GL_UNSIGNED_INT, 0);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM