🎉 Celebrating 25 Years of GameDev.net! 🎉
Not many can claim 25 years on the Internet! Join us in celebrating this milestone. Learn more about our history, and thank you for being a part of our community!
glut and multiple windows
is there a way to open up 2 windows (for multiplayer) of the same instance of the game, with different camera viewports using glut?
a2k
yes.
Morgan
Sorry I can''t be more specific right now, I''m just kinda in the middle of stuff. I''ll get back to you on this.
Morgan
Sorry I can''t be more specific right now, I''m just kinda in the middle of stuff. I''ll get back to you on this.
Hi a2k,
You''re not talkin'' ye-olde split-screen two-people-fighting-for-space-on-one-keyboard multiplayer, are you? Ah, that takes me back...
If that''s what you mean, then there is a couple of ways to show two different views within the same app.
The first is to create another window (using glutCreateWindow(..), is it?) for the second player''s view. Then, in your rendering procedure, just set the active window to player one''s (using glutSetWindow(int window)... or something similar), render the scene from their POV, then change the active window to player two''s, rinse, repeat.
Option 2 is to use one window, and just modify the viewport to draw to half the window for each player (using glViewport(..) )...
This is probably the better way to go, ''coz then you can still run it in fullscreen if you want.
Hope I didn''t totally misunderstand your question
-------------
squirrels are a remarkable source of protein...
You''re not talkin'' ye-olde split-screen two-people-fighting-for-space-on-one-keyboard multiplayer, are you? Ah, that takes me back...
If that''s what you mean, then there is a couple of ways to show two different views within the same app.
The first is to create another window (using glutCreateWindow(..), is it?) for the second player''s view. Then, in your rendering procedure, just set the active window to player one''s (using glutSetWindow(int window)... or something similar), render the scene from their POV, then change the active window to player two''s, rinse, repeat.
Option 2 is to use one window, and just modify the viewport to draw to half the window for each player (using glViewport(..) )...
void Render(){ // clear buffers if you want... glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Player one gets top half of the window glViewport(0,0, windowWidth, windowHeight/2); // set player point of view glLoadIdentity(); glRotatef(...); ... glTranslatef(...); DrawScene(); // Player two gets bottom half of screen glViewport(0, windowHeight/2, windowWidth, windowHeight/2); // set POV... glLoadIdentity(); ... ... DrawScene(); // flip to screen glutSwapBuffers();}
This is probably the better way to go, ''coz then you can still run it in fullscreen if you want.
Hope I didn''t totally misunderstand your question
-------------
squirrels are a remarkable source of protein...
nope, that''s exactly what i mean. thanks. i want to be able to get "ye-olde split-screen two-people-fighting-for-space-on-one-keyboard multiplayer" working before i go onto full-blown network programming. i have to make sure player-player collision works without having to worry about packets and synchronization. thanks again.
a2k
a2k
okay, i''m not out of this one yet. i don''t know how to render different camera angles to the 2 viewports. i know that i can obtain the integer identifier from the createwindow function, but how do i use this in my rendering function?
a2k
a2k
Hmmm, which method are you doing? You don''t need to create another window if you''re doing the viewport method (which is the better of the two). All you have to do is take pretty much the guts out of one of your Reshape3D (or similarly named) callback functions, actually you could create two different ones (one for each viewport) to call in your render function, kinda like this:
Hope that explains it.
Morgan
/********************> ViewPort1() <*****/void Reshape3D( int w, int h ){ // Set the top one glViewport( 0, 0, w, h/2 ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluPerspective( 65.0, ( GLfloat )w / ( GLfloat )h, 0.5, 100 ); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); glTranslatef( 0.0, 0.0, 0.0 ); }/********************> ViewPort1() <*****/void ViewPort2( int w, int h ){ // Set the bottom one glViewport( 0, h/2, w, h ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluPerspective( 65.0, ( GLfloat )w / ( GLfloat )h, 0.5, 100 ); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); glTranslatef( 0.0, 0.0, 0.0 ); }/********************> RenderScene() <*****/void RenderScene( void ){ glClearColor( 0.23, 0.35, 0.78, 1.0 ); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); ViewPort1( 640, 480 ); //Set this to whatever you want // Translate to player 1''s camera position // Render Scene ViewPort2( 640, 480 ); // Translate to player 2''s camera position // Render scene }
Hope that explains it.
Morgan
i''m actually doing it by the first method, because it''s only for testing purposes. if i can''t get it to work this way, i''ll end up doing it with the split-screen method, but i''d still like to know how to render to the two Windows windows.
a2k
a2k
Okay, I''ll look it up quickly when I get home from work later this afternoon. It would still be cool to leave both local multiplayer and network multiplayer.
Morgan
Morgan
I knew I had a program lying around that demonstrated this. What you need to do is first create two windows:
If that doesn't seem to work for you, then let me know.
Morgan
Hmmm, that's wierd, I guess you can't put two source things in the same post,
Edited by - Morgan on July 24, 2000 6:28:11 PM
Edited by - Morgan on July 24, 2000 6:29:11 PM
glutInitWindowSize(320, 240);glutInitWindowPosition(0, 20);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);Window1 = glutCreateWindow("Player 1");glutInitWindowSize(320, 240);glutInitWindowPosition(320, 20);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);Window2 = glutCreateWindow("Player 2");[/source]Then, when you want to draw each one, just do something like the following:[source]glutSetWindow(Window1);// Do your rendering for player 1glutSetWindow(Window2);// Do your rendering for player 2
If that doesn't seem to work for you, then let me know.
Morgan
Hmmm, that's wierd, I guess you can't put two source things in the same post,
Edited by - Morgan on July 24, 2000 6:28:11 PM
Edited by - Morgan on July 24, 2000 6:29:11 PM
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement