簡體   English   中英

無法使顯示列表正常工作

[英]Can't get Display List to Work

首先,像往常一樣,感謝所有人對SO社區的大力支持。

因此,我編寫了繪制6個gl_quads(形成一個立方體)的代碼。 最初,此代碼被立即繪制(在顯示函數中明確調用了24個頂點)。 我想將它們放在顯示列表中。 我閱讀了有關顯示列表的教程,並試了一下。 問題是,什么都沒有出現,並且我有一個glulookat可以明確指向立方體的方向(在即時模式下驗證)。 因此,基本上,當不使用顯示列表時,代碼可以完美地工作,但是當我嘗試使用列表時,代碼則無法工作。

好的,足夠了,讓我們看一下代碼:

第二次編輯-將glGenLists移動到initGl中,它可以正常工作。 謝謝大家

* 編輯- *的glGenList通話是全球制造:

GLuint skybox = glGenLists(1);

而且我仍然得到相同的結果。 屏幕上沒有任何內容。

設置列表(在initgl函數中):

glViewport(0,0,WINDOW_WIDTH,WINDOW_HEIGHT); 
glEnable(GL_DEPTH_TEST);    // Enables Depth Testing
glDepthFunc(GL_LEQUAL);

glMatrixMode(GL_PROJECTION);    //setup the projection matrix
glLoadIdentity();
gluPerspective(45, WINDOW_WIDTH/WINDOW_HEIGHT,.1,200.0);

glMatrixMode(GL_MODELVIEW); //switch to modelview
glLoadIdentity();
gluLookAt(-2,2,2,0,0,0,0,1,0);
glClearColor(0, 0, 0, 0);

glNewList(skybox, GL_COMPILE_AND_EXECUTE); //draw the list once to compile/store
drawEnv(); //draw 6 quads
glEndList(); //end list

顯示功能(忽略無關代碼):

/* Clear buffers */
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

//-----Draw Skybox------
glEnable(GL_TEXTURE_2D);
glPushMatrix();  //save env settings (I've tried removing this push/pop pair with same results
glCallList(skybox);
glPopMatrix();
glDisable(GL_TEXTURE_2D);

而drawEnv()函數:

//---------------------------
//--------RIGHT WALL---------
//---------------------------
//This code draws correctly if I move this to the display function (immediate drawing)  
glBindTexture(GL_TEXTURE_2D,rightTextureId);
glBegin(GL_QUADS);  
glTexCoord2f(0.0, 0.0);     glVertex3f( 1.0f, 1.0f, 1.0f);   //V2
glTexCoord2f(0.0, 1.0);     glVertex3f( 1.0f,-1.0f, 1.0f);   //V1
glTexCoord2f(1.0, 1.0);     glVertex3f( 1.0f,-1.0f,-1.0f);   //V3
glTexCoord2f(1.0, 0.0);     glVertex3f( 1.0f, 1.0f,-1.0f);   //V4
glEnd();

//repeat 5 more times

glGenLists() ,只需要首先調用glGenLists()即可生成一組連續的空顯示列表

GLuint listID;
listID = glGenLists( 1 ); // generate 1 display list
glNewList( listID, GL_COMPILE );
// whatever you want in the display list
glEndList();

// call the display list
glCallList( listID );

您還應該進行一些錯誤檢查,以確保glGenLists()返回了有效的顯示列表。

暫無
暫無

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

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