仅在某个视口中显示对象

时间:2010-12-23 12:28:10

标签: c++ opengl

嗨我有4个视口和一个大的我可以在它之间切换现在我有一个对象,即相机和相机目标位置,我显示在这些位置渲染球体。我希望在我的3个视口中显示摄像机位置,但不是最后一个是摄像机显示,但目前我得到了全部或全部情况。

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();
}

我想也许我可以先对3个视口进行一次扫描,然后调用glutSwapBuffers(),然后在没有摄像头位置的情况下进行另一个视口,但我之前遇到的一些口吃被追溯到被调用的glutSwapBuffers()每个视口所以我想必须有另一种方式,只有我无法弄明白。

1 个答案:

答案 0 :(得分:0)

您必须在交换缓冲区之前渲染所有内容。

当你这样做时 - 它不会起作用。实际上,它会起作用,但不是你想要的。

修改

要渲染纹理,请查看其中一个链接here

更改视图后,将特定视图的图像渲染为纹理。然后,对于最终图像,设置最终视图并渲染所有3个纹理。仅在渲染最终图像时,交换缓冲区。

在第二个想法中,如果你可以设置所有对象的顶点来渲染并在一次传递中渲染整个图像会好得多。