簡體   English   中英

舊版OpenGL紋理立方體

[英]Legacy OpenGL texturing cube

我正在嘗試在舊版OpenGL中紋理長方體。 不管我先渲染長方體的哪一側,都不能像其他所有面一樣正確地對這一面進行正確的紋理化。 我嘗試過先渲染多維數據集的不同面。

這是繪制包含紋理坐標的多維數據集的代碼:

void Objects::cuboidTextured(float width, float height, float depth, float xpos, float ypos, float zpos, float r, float g, float b){
    glMatrixMode(GL_MODELVIEW);

    glPushMatrix();
    glTranslatef(xpos, ypos, zpos);

    glColor3f(r, g, b);

    glBegin(GL_QUADS);
    glVertex3f(  width, -height, depth );
    glTexCoord2f(1,0);
    glVertex3f(  width,  height, depth );
    glTexCoord2f(1,1);
    glVertex3f( -width,  height, depth );
    glTexCoord2f(0,1);
    glVertex3f( -width, -height, depth );
    glTexCoord2f(0,0);
    glEnd();

    glBegin(GL_QUADS);
    glVertex3f( width, -height, -depth );
    glTexCoord2f(1,0);
    glVertex3f( width,  height, -depth );
    glTexCoord2f(1,1);
    glVertex3f( width,  height,  depth );
    glTexCoord2f(0,1);
    glVertex3f( width, -height,  depth );
    glTexCoord2f(0,0);
    glEnd();

    glBegin(GL_QUADS);
    glVertex3f( -width, -height, depth );
    glTexCoord2f(1,0);
    glVertex3f( -width,  height, depth );
    glTexCoord2f(1,1);
    glVertex3f( -width,  height, -depth );
    glTexCoord2f(0,1);
    glVertex3f( -width, -height, -depth );
    glTexCoord2f(0,0);
    glEnd();

    glBegin(GL_QUADS);
    glVertex3f(  width,  height,  depth );
    glTexCoord2f(1,0);
    glVertex3f(  width,  height, -depth );
    glTexCoord2f(1,1);
    glVertex3f( -width,  height, -depth );
    glTexCoord2f(0,1);
    glVertex3f( -width,  height,  depth );
    glTexCoord2f(0,0);
    glEnd();

    glBegin(GL_QUADS);
    glVertex3f(  width, -height, -depth );
    glTexCoord2f(0,1);
    glVertex3f(  width, -height,  depth );
    glTexCoord2f(0,0);
    glVertex3f( -width, -height,  depth );
    glTexCoord2f(1,1);
    glVertex3f( -width, -height, -depth );
    glTexCoord2f(1,0);
    glEnd();

    glBegin(GL_QUADS);
    glVertex3f( -width, -height, -depth);       
    glTexCoord2f(1,0);
    glVertex3f( -width,  height, -depth);      
    glTexCoord2f(1,1);
    glVertex3f(  width,  height, -depth);      
    glTexCoord2f(0,1);
    glVertex3f(  width, -height, -depth); 
    glTexCoord2f(0,0);
    glEnd();

    glPopMatrix();
}

您正在向后做,在glTexCoord()之前調用glVertex() glTexCoord()

glVertex

glVertex命令用於glBegin / glEnd對中,以指定點,線和面的頂點。 調用glVertex時,當前顏色,法線,紋理坐標和霧坐標與該頂點關聯。

因此,通過glTexCoord()和朋友設置所有頂點狀態, 然后調用glVertex()

glBegin(GL_QUADS);
glTexCoord2f(1,0);
glVertex3f( width, -height, -depth );
glTexCoord2f(1,1);
glVertex3f( width,  height, -depth );
glTexCoord2f(0,1);
glVertex3f( width,  height,  depth );
glTexCoord2f(0,0);
glVertex3f( width, -height,  depth );
glEnd();

否則, glVertex()將使用最后設置的任何隨機紋理坐標。

暫無
暫無

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

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