2010-12-23 60 views
0

嗨我有4個視口和一個大的,我可以切換現在我得到一個對象,即相機和相機目標位置,我在這些位置呈現一個球體顯示。我想在我的三個視口中顯示攝像機的位置,但不是在最後一個攝像機顯示中,但是此刻我得到了全部或全部的場景。在某個視口中顯示對象

void display(int what) 
{ 
if(what==5){ 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
camControll();} 

if(what==1){ 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
gluLookAt(75,15,-5,0,5,-5,0,1,0);} 

if(what==2){ 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
gluLookAt(0,110,0,0,0,0,1,0,0);} 

if(what==3){ 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
gluPerspective(45.0f, float(320)/float(240), 0.1f, 100.0f); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
camControll();} 

if(what==4){ 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
gluLookAt(185,75,25,0,28,0,0,1,0);} 


//glMatrixMode(GL_MODELVIEW); 
//glLoadIdentity(); 
////gluLookAt(cos(shared.time) * shared.distance, 10, sin(shared.time) * shared.distance, 0, 0, 0, 0, 1, 0); 
////ca.orbitYaw(0.05); 
//ca.lookAt(); 

glClearColor(0, 0, 0, 1); 
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 
drawScene(); // scene that all views should render 
drawCamera();/camera position that only certain views should render 
glutSwapBuffers(); 
} 

我在想,也許我可以爲第一三個視做一次掃描,然後調用glutSwapBuffers(),然後做其他視無我以前曾被曝glutSwapBuffers攝像機的位置,但有些結巴( )被稱爲每個視口,所以我想必須有另一種方式,只是我無法弄清楚。

回答

0

在交換緩衝區之前,您必須渲染所有內容。

當你這樣做 - 它不會工作。其實,它會起作用,但不是你想要的。

編輯

要渲染到紋理看看到的鏈接here之一。

更改視圖後,將特定視圖的圖像渲染爲紋理。然後爲最終圖像設置最終視圖並渲染全部3個紋理。只有在渲染最終圖像時,交換緩衝區。

在第二個想法中,如果您可以將所有對象的頂點設置爲一次渲染並呈現整個圖像,將會好得多。

+0

是的,但我應該怎麼做?我從3個固定角度和1個相機觀看我的場景,但是我只希望從3個固定角度看到場景中的一些物體。 – PSilo 2010-12-23 13:03:36