簡體   English   中英

在 opengl 中紋理映射一個圓錐體

[英]Texture mapping a cone in opengl

我正在嘗試在 opengl 中對圓錐體進行紋理貼圖。 這是我的代碼。

glPushMatrix();
float radius=1;
float r=1;
float h=1;
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texSet[2]);
float t,s;
float i=0.05;

for(s=0.0;s<1.0;s+=i)
{
    for(t=0.0;t<=1.0;t+=i)
    {       
        float r=((h-t)/h)*radius;
        glBegin(GL_POLYGON);
        glTexCoord2f(s,t);
        glVertex3f(r*cos(2*M_PI*s),t,r*sin(2*M_PI*s));
        glTexCoord2f(s+i,t);
        glVertex3f(r*cos(2*M_PI*(s+i)),t,r*sin(2*M_PI*(s+i)));
        glTexCoord2f(s+i,t+i);
        glVertex3f(r*cos(2*M_PI*(s+i)),(t+i),r*sin(2*M_PI*(s+i)));
        glTexCoord2f(s,t+i);
        glVertex3f(r*cos(2*M_PI*s),(t+i),r*sin(2*M_PI*s));
    }
    glEnd();
}

glDisable(GL_TEXTURE_2D);
glPopMatrix();

我沒有得到正確的結果。 我在這里做錯了什么嗎?

第一件事: glBeginglEnd應該被調用相同的次數。 您當前的循環調用glBegin在t循環幾次,但glEnd在S-循環一次。

for(s=0.0;s<1.0;s+=i)
{
    for(t=0.0;t<=1.0;t+=i)
    {       
        glBegin(GL_POLYGON);
        ...
    }
    glEnd();
}

如果使用GL_POLYGON,則開始/結束內列出的任何頂點將形成一個多邊形。 因此,如果您希望/需要堅持下去,請在t循環內調用begin / end。

另一方面,您可以僅使用GL_TRIANGLES創建圓錐體,其中每個3個頂點形成一個三角形。 在這種情況下,您只能在s循環外執行一次開始/結束操作。

你不應該使用 glDisable(GL_TEXTURE_2D); 在功能上。 循環時,它加載紋理並將其刪除,以便您可以看到它 1 秒:))

暫無
暫無

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

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