簡體   English   中英

OpenGL調整紋理/四邊形的大小

[英]OpenGL resizing a Texture/Quad

我正在為jpeg實現平移/縮放查看器。 我一次顯示一張映射到紋理的圖像,然后在按鍵時在圖像之間交換。

我的問題是,盡管圖像確實發生了變化,但四邊形的大小固定為加載的第一張圖像的寬度和高度,並且不會更新。 這是繪制四邊形等的代碼:

請注意,ROI_WIDTH和ROI_HEIGHT是全局變量,每次加載新圖像時都會成功更新,但是這不會反映在輸出中:

void orthogonalStart (void) {
    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();
    gluOrtho2D(0, ROI_WIDTH, 0, ROI_HEIGHT);
    glScalef(1, -1, 1);
    glTranslatef(0, -ROI_HEIGHT, 0);
    glMatrixMode(GL_MODELVIEW);
}

void orthogonalEnd (void) {
    glMatrixMode(GL_PROJECTION);
    glPopMatrix();
    glMatrixMode(GL_MODELVIEW);
}


void display (void) {
    glClearColor (1.0,1.0,1.0,0.0);
    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();

    orthogonalStart();

    glEnable( GL_TEXTURE_2D );
    glEnable( GL_DEPTH_TEST );
    glDepthFunc(GL_LESS);

    glBindTexture( GL_TEXTURE_2D, texture );
    glRotatef(180.0, 250.0f, 250.0f, 0.0f);

    glBegin(GL_QUADS);
    glTexCoord2i(0,0); glVertex2f(0, 0);
    glTexCoord2i(1,0); glVertex2f(0, ROI_WIDTH);
    glTexCoord2i(1,1); glVertex2f(ROI_HEIGHT, ROI_WIDTH);
    glTexCoord2i(0,1); glVertex2f(ROI_HEIGHT, 0);
    glEnd();


    orthogonalEnd();
    zoomFac();
    glViewport (xView, yView, (GLsizei)(winx*zoomFactor), (GLsizei)(winy*zoomFactor));
    glutSwapBuffers();
}

您對gluOrtho2D()調用告訴OpenGL,輸出的寬度和高度始終為ROI_WIDTH x ROI_HEIGHT單位。 因此,四邊形將始終覆蓋整個輸出區域。 您可能應該在gluOrtho2D()中將寬度和高度設置為輸出區域的像素寬度和高度(您的窗口,視圖或屏幕,取決於您如何設置)。

暫無
暫無

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

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