簡體   English   中英

需要一雙新的眼睛來找出為什么我的四邊形沒有被着色

[英]need a new pair of eyes to find out why my quads aren't being colored

我出於學習目的制作了opengl引擎,並在后來的體育場中使用它開發了一些游戲/應用。 現在,隨着引擎的最新迭代,我似乎無法找出為什么我的四邊形沒有着色。

每個頂點由4個坐標(x,y,z,w)和4個色坐標r,g,b,a組成。 據我所知,我傳遞給頂點的值是正確的

偏移量計算隱藏在單獨的靜態類中。 我已經在帖子底部添加了它。

    Vertex[] vertices = new Vertex[] { v0, v1, v2, v3 };
    verticesBuffer = BufferUtils.createFloatBuffer(vertices.length * ELEMENT);
    for (int i = 0; i < vertices.length; i++) {
        verticesBuffer.put(vertices[i].getElements());
    }
    verticesBuffer.flip();

    indicesBuffer = BufferUtils.createByteBuffer(indices.length);
    indicesBuffer.put(indices);
    indicesBuffer.flip();

    int vaoId = glGenVertexArrays();
    glBindVertexArray(vaoId);

    int vboId = glGenBuffers();
    glBindBuffer(GL_ARRAY_BUFFER, vboId);
    glBufferData(GL_ARRAY_BUFFER, verticesBuffer, GL_STATIC_DRAW);
    glVertexAttribPointer(0, POSITION_ELEMENT, GL_FLOAT, false, ELEMENT_BYTES, POSITION_OFFSET);
    glVertexAttribPointer(1, COLOR_ELEMENTS, GL_FLOAT, false, ELEMENT_BYTES, COLOR_OFFSET);
    glBindBuffer(GL_ARRAY_BUFFER, 0);

    int vboIId = glGenBuffers();
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboIId);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, indicesBuffer, GL_STATIC_DRAW);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

    Shaders shader = new Shaders();
    int vsId = shader.load("shaders/shader.vert", GL_VERTEX_SHADER);
    int fsId = shader.load("shaders/shader.frag", GL_FRAGMENT_SHADER);

    pId = glCreateProgram();
    glAttachShader(pId, vsId);
    glAttachShader(pId, fsId);

    glBindAttribLocation(pId, 0, "in_Position");
    glBindAttribLocation(pId, 1, "in_Color");
    glBindAttribLocation(pId, 2, "in_TextureCoord");

    glLinkProgram(pId);
    glValidateProgram(pId);

我的渲染調用位於另一個類中,該類在我通過vaoId,vboIID,索引數量和pId之后傳遞

    glClear(GL_COLOR_BUFFER_BIT); // scherm schoonmaken

    glUseProgram(pId);

    glBindVertexArray(vaoId);
    glEnableVertexAttribArray(0);
    glEnableVertexAttribArray(1);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboIId);
    glDrawElements(GL_TRIANGLES, amount_of_indices, GL_UNSIGNED_BYTE, 0);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
    glDisableVertexAttribArray(0);
    glDisableVertexAttribArray(1);
    glBindVertexArray(0);

單獨的靜態類與偏移量計算

// Amount of bytes per element
static final int BYTES_PER_ELEMENT = 4;

// Elements per parameter
static final int POSITION_ELEMENT = 4;
static final int COLOR_ELEMENTS = 4;
static final int TEXTURE_ELEMENTS = 2;

// Bytes per parameter
static final int POSITION_BYTES = POSITION_ELEMENT * BYTES_PER_ELEMENT;
static final int COLOR_BYTES = COLOR_ELEMENTS * BYTES_PER_ELEMENT;
static final int TEXTURE_BYTES = TEXTURE_ELEMENTS * BYTES_PER_ELEMENT;

// Byte offset per parameter
static final int POSITION_OFFSET = 0;
static final int COLOR_OFFSET = POSITION_OFFSET + POSITION_BYTES;

static final int TEXTURE_OFFSET = COLOR_OFFSET + COLOR_BYTES;

// Amount of elements per vertex
static final int ELEMENT = POSITION_ELEMENT + COLOR_ELEMENTS + TEXTURE_ELEMENTS;

// Byte size per vertex
static final int ELEMENT_BYTES = POSITION_BYTES + COLOR_BYTES + TEXTURE_BYTES;

據我所知,我的偏移量計算是正確的。 我保留了用於紋理貼圖的位置,但是我刪除了它們以查看它們是否不會引起任何問題。

完整版本的代碼位於github https://github.com/darR3Ke/EngineWorks-2.0

nm,我已經解決了。

以某種方式從lwjgl復制示例着色器以獲取紋理四邊形會干擾我的非紋理四邊形。

因此,對於所有遵循Wiki上的lwjgl教程的用戶。 Texture Quad着色器與彩色Quad着色器不兼容。

仍然需要等待幾天,然后我才能檢查該篷

暫無
暫無

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

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