簡體   English   中英

GL_TRIANGLES而不是GL_QUADS

[英]GL_TRIANGLES instead of GL_QUADS

我想修改用於生成3D球體的代碼,因此它使用三角形而不是四邊形進行繪制。 問題是,像往常一樣,我遇到了一些錯誤-“向量迭代器不可遞增”。 它出什么問題了?

SolidSphere(float radius, unsigned int rings, unsigned int sectors)
{
    float const R = 1.0f / (float)(rings-1);
    float const S = 1.0f / (float)(sectors-1);
    int r, s;

    vertices.resize(rings * sectors * 3);
    normals.resize(rings * sectors * 3);
    texcoords.resize(rings * sectors * 2);
    std::vector<GLfloat>::iterator v = vertices.begin();
    std::vector<GLfloat>::iterator n = normals.begin();
    std::vector<GLfloat>::iterator t = texcoords.begin();
    for(r = 0; r < rings; r++) for(s = 0; s < sectors; s++) {
            float const x = sinf(M_PI * r * R) * cosf(2 * M_PI * s * S);
            float const y = sinf(-M_PI_2 + M_PI * r * R );                
            float const z = sinf(2.0f * M_PI * s * S) * sinf( M_PI * r * R );

            *t++ = s*S;
            *t++ = r*R;

            *v++ = x * radius;
            *v++ = y * radius;
            *v++ = z * radius;

            *n++ = x;
            *n++ = y;
            *n++ = z;
    }

    indices.resize(rings * sectors * 4);
    std::vector<GLushort>::iterator i = indices.begin();
    for(r = 0; r < rings-1; r++) for(s = 0; s < sectors-1; s++) {
        /* triangles -- not working!
        *i++ = r * sectors + s;
        *i++ = (r + 1) * sectors + (s + 1);
        *i++ = r * sectors + (s + 1);

        *i++ = r * sectors + s;
        *i++ = (r + 1) * sectors + s;
        *i++ = (r + 1) * sectors + (s + 1); */

        /* quads */
        *i++ = r * sectors + s;
        *i++ = r * sectors + (s+1);
        *i++ = (r+1) * sectors + (s+1);
        *i++ = (r+1) * sectors + s;

    }
}

貌似循環的三角形生成器版本做(sectors-1)(rings-1)迭代,每一個增加i的六倍,但您調整矢量i通過剛才迭代(rings * sectors * 4) ,對於循環的四發電機版本就足夠了。


假設三角形版本可以,則此調整應將其修復:

indices.resize(rings * sectors * 6)

當您在沒有喝足夠咖啡的情況下編碼時,通常會發生這種疏忽。 還是太多 (由於實際分配的空間超出了迭代所需的空間,該圖顯示了代碼實際失敗時的雙曲線邊界(將環和扇區號映射到x和y))。

暫無
暫無

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

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