Rotate view?
BlitzMax Forums/OpenGL Module/Rotate view?
| ||
I have some text scrolling up the screen but I would like to give it the starwars intro effect. Can I rotate the camera view to get perspective whilst still using Max2D for the majority of the code? Any help appreciated. |
| ||
I think that you cannot use Max2D abd rotate the angle of the view. Because Max2D uses (I think) strictly GluOrtho2D or glOrtho. |
| ||
I don't see any reason why you can't call glOrtho2D or whatever any number of times in your code, ie before you render stuff, to give you a perspective projection. |
| ||
Correct, Daniel. Cracked it last nite. You can reset the projection in your code. |
| ||
It's pretty handy too - basically you are moving the camera and it lets you zoom, rotate and fly your game screen around in three dimensions pretty easily. |
| ||
Yeah I like it but I'm slow getting to grips with OGL. It works but I don't know if I'm doing things 'the right way' |
| ||
So, how about posting your code? Because this would be totally sweet to see used in the middle of a game :) |
| ||
graphics 800,600,32 starfont=loadimagefont("Jedi Normal") 'glPushmatrix() SetImageFont starfont Const text_row_h=70 'MY STUFF HERE fin=0 ystart#=450.00 SetBlend ALPHABLEND ncount=0 ndelay=1 glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(20.0,-8.0/6.0,1.0,100000.0) glrotatef(180.0,0,0,1) 'glrotatef (180.0,0.0,0.0,1.0) glEnable(GL_FOG) Local fcols:Float[]=[0.0,0.0,0.0,0.0] Local colptr:Float Ptr=VarPtr fcols[0] glFogfv(GL_FOG_COLOUR,colptr) glFogf(GL_FOG_START,500) glFogf(GL_FOG_END,1000) glFogi(GL_FOG_MODE,GL_LINEAR) xpos=-108 angg#=80.0 dist=-836.0 scaley#=1.29599917 scalex#=0.113999963 Cls Flip Repeat Cls glMatrixMode(GL_MODELVIEW) glLoadidentity() SetOrigin xpos,ystart glTranslatef(0,0,dist) glrotatef(angg,1,0,0) SetScale scalex,scaley SetColor Rand(0,255),Rand(0,255),Rand(0,255) DrawText " ***********************************",0.0,text_row_h DrawText " * your text here!! *",0.0,text_row_h*2 DrawText " **********************************",0.0,text_row_h*3 DrawText " * ************** *",0.0,text_row_h*4 DrawText " *************04/05*************",0.0,text_row_h*5 EndIf ncount:+1 If ncount>ndelay Then ncount=0 If ncount=0 Then ystart:-1 Flip Until KeyHit(KEY_ESCAPE) Or ystart<-2000.0 glMatrixMode GL_PROJECTION glLoadidentity() glOrtho 0,800,600,0,-1,1 SetScale(1,1) SetColor 255,255,255 SetAlpha 1.0 glMatrixMode GL_MODELVIEW glLoadIdentity SetOrigin 0,0 glDisable(GL_FOG) 'glPopmatrix() Cls Flip Here you go - I've tried to make a couple of mods so you can run it straight off the bat - untested - you'll need to download a font called 'Jedi Normal' to see it as intended - this is on a website called "2200 free fonts" - available in Mac or PC format. Make sure the font filename is correct in the code above. |
| ||
compile errors! "endif" without "if missing parameter "size" in line 2 had to go at that point, hope that helps |
| ||
Graphics 800,600,32 starfont=LoadImageFont("Jedi Normal",48) 'glPushmatrix() SetImageFont starfont Const text_row_h=70 'MY STUFF HERE fin=0 ystart#=450.00 SetBlend ALPHABLEND ncount=0 ndelay=1 glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(20.0,-8.0/6.0,1.0,100000.0) glrotatef(180.0,0,0,1) 'glrotatef (180.0,0.0,0.0,1.0) glEnable(GL_FOG) Local fcols:Float[]=[0.0,0.0,0.0,0.0] Local colptr:Float Ptr=VarPtr fcols[0] glFogfv(GL_FOG_COLOUR,colptr) glFogf(GL_FOG_START,500) glFogf(GL_FOG_END,1000) glFogi(GL_FOG_MODE,GL_LINEAR) xpos=-108 angg#=80.0 dist=-836.0 scaley#=1.29599917 scalex#=0.113999963 Cls Flip Repeat Cls glMatrixMode(GL_MODELVIEW) glLoadidentity() SetOrigin xpos,ystart glTranslatef(0,0,dist) glrotatef(angg,1,0,0) SetScale scalex,scaley SetColor Rand(0,255),Rand(0,255),Rand(0,255) DrawText " ***********************************",0.0,text_row_h DrawText " * your text here!! *",0.0,text_row_h*2 DrawText " **********************************",0.0,text_row_h*3 DrawText " * ************** *",0.0,text_row_h*4 DrawText " *************04/05*************",0.0,text_row_h*5 DrawText "BLAH BLAH etc ",0,text_row_h*6 DrawText "* *",0,text_row_h*7 DrawText "* *",0,text_row_h*8 DrawText "* *",0,text_row_h*9 ncount:+1 If ncount>ndelay Then ncount=0 If ncount=0 Then ystart:-1 Flip Until KeyHit(KEY_ESCAPE) Or ystart<-2000.0 glMatrixMode GL_PROJECTION glLoadidentity() glOrtho 0,800,600,0,-1,1 SetScale(1,1) SetColor 255,255,255 SetAlpha 1.0 glMatrixMode GL_MODELVIEW glLoadIdentity SetOrigin 0,0 glDisable(GL_FOG) 'glPopmatrix() Cls Flip OK- snapped out of the bout of laziness. This is tested. Just need the font in the same dir. |
| ||
Thanks. I've used this for some awesome in-game transitions...fade out and spin, then spin back in real fast :) One more thing - how do I set the origin of rotation? opengl noob speaking here. Thanks. |
| ||
Erm - I'm an OGL noob, too. Did most of this by 'fiddling about'. Look at the GLtranslatef() and the GLrotatef() in the main loop - these tell OpenGL to translate so far along the x,y,z axes [GLtranslate (distx,disty,distz)] then from that centre rotate n degrees about vector 'A' [GLrotatef(angle,Ax,Ay,Az)] - before drawing the text - try fiddling with these. |
| ||
Yes, that's all well and good, but then how do I move the camera back before rendering? |
| ||
You don't - you move the scene forward using a GLtranslatef(). |