簡體   English   中英

如何在OpenGL中為GL_TRIANGLE_STRIP創建的圓柱體做紋理映射以及如何使圓柱體變細

[英]How to do texture mapping for cylinder created by GL_TRIANGLE_STRIP in OpenGL and how to taper a cylinder

我目前正在嘗試從海綿寶寶的房子中創建一個魷魚模型。

我已經用 GL_TRIANGLE_STRIPs 創建了一個圓柱體,因為我不允許使用任何預定義的 OpenGL 模型來創建形狀。

我正在嘗試為圓柱體上的每個三角形進行紋理映射,但紋理被拉伸而不是像它應該的那樣。

這是我的氣缸代碼

glPushMatrix();
    glTranslated(xPos, yPos, TABLETOP_Z - cubeLen);
    glScaled(cubeLen / 2, cubeLen / 2, 1.0);
        
    glBegin(GL_TRIANGLE_STRIP);
        glTexCoord3f(xPos, yPos, TABLETOP_Z);
        glTexCoord3f(xPos, yPos, TABLETOP_Z);

        for (int i = 0; i <= 32; i++) {
            double x_next = 1.0 * cos((i + 1) * 2.0 * PI/ (32 - 2.0));
            double y_next = 1.0 * sin((i + 1) * 2.0 * PI / (32 - 2.0));

            if (i % 2 == 0) {
                glTexCoord3f(x_next, y_next, TABLETOP_Z + cubeLen);
                glVertex3f(x_next, y_next, TABLETOP_Z + cubeLen);

            } else {
                glTexCoord3f(x_next, y_next, TABLETOP_Z);
                glVertex3f(x_next, y_next, TABLETOP_Z);
            }
        }

    glEnd();
    glPopMatrix();

這是紋理應該是什么樣子: 在此處輸入圖片說明

這是圓柱體上的樣子在此處輸入圖片說明

紋理坐標是二維的,必須在 [0.0, 1.0] 范圍內:

glBegin(GL_TRIANGLE_STRIP);
for (int i = 0; i <= 32; i++) {
    double x_next = 1.0 * cos((i + 1) * 2.0 * PI/ (32 - 2.0));
    double y_next = 1.0 * sin((i + 1) * 2.0 * PI / (32 - 2.0));

    if (i % 2 == 0) {
        glTexCoord3f((float)i / 32.0f, 1.0f);
        glVertex3f(x_next, y_next, TABLETOP_Z + cubeLen);

    } else {
        glTexCoord3f((float)i / 32.0f, 0.0f);
        glVertex3f(x_next, y_next, TABLETOP_Z);
    }
}
glEnd();

請參閱opengl 紋理坐標如何工作?

暫無
暫無

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

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