It is currently Tue Oct 22, 2019 7:55 pm

All times are UTC + 1 hour




Post new topic Reply to topic  [ 10 posts ] 
Author Message
 Post subject: Panoramview with OpenGl?
PostPosted: Wed Aug 14, 2019 10:14 am 
Offline
Addict
Addict
User avatar

Joined: Wed Apr 30, 2003 8:15 am
Posts: 986
Location: Germany
Hello, folks,

currently I use OGRE to view 180 degree panoramas and 360 VR images.
Unfortunately, loading larger files is very slow and OGRE can't handle umlauts and long file names.

Is there a possibility to create the following code via OpenGl?

Code:
  [..]
  If CreateMaterial(0, LoadTexture(0,file$))
    DisableMaterialLighting(0,#True)
    MaterialFilteringMode(0,#PB_Material_Trilinear)
    RotateMaterial(0,180,#PB_Material_Fixed)
   
    If IsCamera(0) And IsEntity(0)
      RotateEntity(0,0,0,0, #PB_Absolute)
      MoveCamera(0,0,0,0, #PB_Absolute  )
      RotateCamera(0,0,0,0, #PB_Absolute)
      CameraFOV(0, 90)
    EndIf
   
      If IsTexture(0)
        w = TextureWidth(0)
        h = TextureHeight(0)
      EndIf
   

    If  (g360 = 0 And CreateCylinder(0, -1, -1.5, 32, 32, 0)) Or ( g360 = 1 And CreateSphere(0, -10, 64, 64))
      CreateLight(#PB_Any, RGB(25, 25, 180), 0, 0, 0, #PB_Light_Point)
     
      If g360 = 0
        RotateCamera(0,0,0,180, #PB_Absolute)
      Else
        RotateCamera(0,0,0,0, #PB_Absolute)
      EndIf
     
      If CreateEntity(0,MeshID(0),MaterialID(0))
        Result = #True
      EndIf
    EndIf
  EndIf


I'm also thinking about using the webgadget, because viewing panoramas runs very well with Javascript in the browser.

Ciao Dige

_________________
"Daddy, I'll run faster, then it is not so far..."


Top
 Profile  
Reply with quote  
 Post subject: Re: Panoramview with OpenGl?
PostPosted: Thu Aug 22, 2019 8:01 am 
Offline
Enthusiast
Enthusiast
User avatar

Joined: Tue Sep 22, 2009 10:41 pm
Posts: 441
OpenGL can do it certainly but native statement too normally do it.
Code:
CameraFOV(CamerAngle.D)


Top
 Profile  
Reply with quote  
 Post subject: Re: Panoramview with OpenGl?
PostPosted: Sat Aug 24, 2019 4:06 pm 
Offline
Addict
Addict

Joined: Sun Jun 25, 2006 7:28 pm
Posts: 1374
hope that this example of some usage, it is cooked from several examples. the picture is wide, and we can look at different parts of the scene by rotating the camera with left/right keys. there are complex codes in the web about the FishEye and spheric projection, unfortunately mostly written in modern opengl

i expect but not sure that CameraFOV have some resemblance with:
gluPerspective( GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar)
and
gluLookAt( GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ, GLdouble centerX, GLdouble centerY, GLdouble centerZ, GLdouble upX, GLdouble upY, GLdouble upZ)


try different values for gluPerspective

if someone have more to add or to correct please help to enrich the subject.
save this picture as arches.jpg in the same folder as the code:
http://www.mundhenk.com/photos/panorama/Arches.national.park.panorama.www.mundhenk.com.jpg
or from http://s000.tinyupload.com/index.php?file_id=49085436176961855121
Code:
Structure Point3D
  x.f
  y.f
  z.f
  tu.f
  tv.f
  r.f
  g.f
  b.f
EndStructure

UseJPEGImageDecoder()
UseJPEGImageEncoder()
UsePNGImageDecoder()

Declare FillArray()
Define event, quit

Dim *Buffer(1)

LoadImage(1, "arches.jpg")

*Buffer(1) = EncodeImage(1) ; default is: #PB_ImagePlugin_BMP : encode the image in BMP

Dim TexID(1)
OpenWindow(0, 0, 0, 800, 600, "... Up/Down: zoom in/out...Left/Right: rotate the Camera .. 'W': wire frame... ")
SetWindowColor(0, RGB(200,220,200))
OpenGLGadget(0, 10, 10, WindowWidth(0) , WindowHeight(0) , #PB_OpenGL_Keyboard)

;- Generate textures

glGenTextures_(1, @TexID(1))
glBindTexture_(#GL_TEXTURE_2D, TexID(1))
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MIN_FILTER, #GL_LINEAR)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MAG_FILTER, #GL_LINEAR)
glTexImage2D_(#GL_TEXTURE_2D, 0, 3, ImageWidth(1), ImageHeight(1), 0, #GL_BGR_EXT, #GL_UNSIGNED_BYTE, *Buffer(1))

FreeMemory(*Buffer(1))

glEnable_(#GL_TEXTURE_2D)   ; Enable texture mapping
glBindTexture_(#GL_TEXTURE_2D, TexID(1))

glLoadIdentity_();
gluPerspective_(45.0, 800/600, 1.0, 60.0)
glTranslatef_(0, 0, -5)
glEnable_(#GL_DEPTH_TEST)

Global NbX = 100
Global NbY = 100

Global Dim Point3D.Point3D(NbX,NbY)
Global Dim MeshDataInd.PB_MeshFace(60000)
Global indexsize = ArraySize(MeshDataInd()) + 1
Global r.f
Global dist.f = 40
;Debug indexsize
;Debug WindowWidth(0)
;Debug WindowHeight(0)
FillArray()
  ;Debug indx 
 ;=================================================================================
rot.f = 1
;glPointSize_( 1 ) 
;glTranslatef_(0.0, 0.0, -30)
SetActiveGadget(0) ; make the openGLgadget active

glPushMatrix_(); to store the current state
glMatrixMode_(#GL_PROJECTION)
glLoadIdentity_();
;gluPerspective_(60.0, WindowWidth(0)/WindowHeight(0), 1.0, 200.0)
gluPerspective_(90.0, 800/5000, 1.0, 200.0)
glMatrixMode_(#GL_MODELVIEW)
;glTranslatef_(0, 0, -5)
glShadeModel_(#GL_SMOOTH)
glEnable_(#GL_DEPTH_TEST)
glViewport_(0, 0, WindowWidth(0), WindowHeight(0))

gluLookAt_( 0, 0, dist, ; the camera looking from position 0,0,dist  to 0,0,0 from above
            0,  0, 0,
            0,  1,  0 )

glPopMatrix_()

Repeat
 
  Event = WindowEvent()
 
  glViewport_(0, 0, WindowWidth(0), WindowHeight(0))
  glClearColor_(0.9, 0.9, 0.9, 1)
  glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
   
  glEnableClientState_(#GL_VERTEX_ARRAY )
  glEnableClientState_(#GL_COLOR_ARRAY)
  glEnableClientState_(#GL_TEXTURE_COORD_ARRAY)
  ;glRotatef_(rot/2, 0, 1, 0);
 
  glVertexPointer_(3, #GL_FLOAT,SizeOf(Point3D),@Point3D(0,0)\x)
  glColorPointer_(3, #GL_FLOAT, SizeOf(Point3D), @Point3D(0,0)\r)
  glTexCoordPointer_(2, #GL_FLOAT, SizeOf(Point3D), @Point3D(0,0)\tu)
   
  glDrawElements_(#GL_TRIANGLES,indexsize,#GL_UNSIGNED_INT, @MeshDataInd(0)\Index)
  ;glDrawElements_(#GL_POLYGON,indx,#GL_UNSIGNED_INT, @MeshDataInd(0)\Index)
 
  glDisableClientState_(#GL_TEXTURE_COORD_ARRAY)
  glDisableClientState_(#GL_COLOR_ARRAY)
  glDisableClientState_(#GL_VERTEX_ARRAY);
 
  If Event = #PB_Event_Gadget And EventGadget() = 0
    If EventType() = #PB_EventType_KeyDown  ; like KeyboardReleased
            key = GetGadgetAttribute(0,#PB_OpenGL_Key )
           
            If key = #PB_Shortcut_Escape ;  Esc key to exit
               quit = 1
           
               ElseIf Key = #PB_Shortcut_W; display wire Frame or solid frame
               If fill
                glPolygonMode_(#GL_FRONT_AND_BACK, #GL_FILL )
                fill ! 1
               Else
                glPolygonMode_(#GL_FRONT_AND_BACK, #GL_LINE )
                fill ! 1
              EndIf
            ElseIf Key = #PB_Shortcut_Up
                dist - 0.2
                glLoadIdentity_()
                gluLookAt_( 0, 0.1, dist,  r, 0, 0,  0,  1,  0 )
                ;glScalef_(1.05,1.05,1.05)
              ElseIf Key = #PB_Shortcut_Down
                dist + 0.2
                glLoadIdentity_()
                gluLookAt_( 0, 0.1, dist,  r, 0, 0,  0,  1,  0 )
                ;glScalef_(0.95,0.95,0.95)
              ElseIf Key = #PB_Shortcut_Right
                r+0.05
                ;glMatrixMode_(#GL_MODELVIEW);
                glLoadIdentity_()
                gluLookAt_( 0, 0.1, dist,  r, 0, 0,  0,  1,  0 )
              ElseIf Key = #PB_Shortcut_Left
                r-0.05
                ;glMatrixMode_(#GL_MODELVIEW);
                glLoadIdentity_()
                gluLookAt_( 0, 0.1, dist,  r, 0, 0,  0,  1,  0 )
                                             
            EndIf
               
    EndIf
   EndIf
   
   SetGadgetAttribute(0, #PB_OpenGL_FlipBuffers, #True)
   Delay(5)
Until Event = #PB_Event_CloseWindow Or quit = 1

  glDeleteTextures_(1, @TexID(1))
   
   
Procedure FillArray()

xMin.f = -20 : yMin.f = -20: zMin.f = -20 : xMax.f = 20: yMax = 20 : zMax = 20
  range.f = xMax - xMin
  step1.f = range*1 / NbX
  x.f = xMin: z.f = zMin : y.f = yMin : tu.f: tv.f
 
  For b=0 To NbY
   t.f=0
    For a=0 To NbX
     t + #PI/(NbX+1)
      z.f = 0  ;-40*Sin(t)+Cos(t)
     
      ;**********************************************************************           
     
      Point3D(a,b)\x = x*1
      Point3D(a,b)\y = y*1.5 ; change to 2 to amplify the height
      Point3D(a,b)\z = z*1
     
      Point3D(a,b)\tu = a/NbX
      Point3D(a,b)\tv = b/NbY     
     
      Point3D(a,b)\r = 1 :Point3D(a,b)\g = 1 :Point3D(a,b)\b = 1
           
      x.f + step1
     
    Next a
   
    x = xMin
    y.f + step1
  Next b
 
   ;ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
 
  Nb=NbX+1
  For b=0 To NbY-1
    For a=0 To NbX-1
     
      P1=a+(b*Nb)
      P2=P1+1
      P3=a+(b+1)*Nb
      P4=P3+1
      ;MeshFace(P3, P2, P1)
      ;MeshFace(P2, P3, P4)
      MeshDataInd(indx)\Index = P3
      MeshDataInd(indx+1)\Index = P2
      MeshDataInd(indx+2)\Index = P1
     
      MeshDataInd(indx+3)\Index = P2
      MeshDataInd(indx+4)\Index = P3
      MeshDataInd(indx+5)\Index = P4
      indx+6
    Next
  Next 
    EndProcedure
   
 


Top
 Profile  
Reply with quote  
 Post subject: Re: Panoramview with OpenGl?
PostPosted: Sat Aug 24, 2019 5:35 pm 
Offline
Enthusiast
Enthusiast
User avatar

Joined: Sun Sep 11, 2016 2:17 pm
Posts: 543
Is it just scrolling or does it need to be mapped onto a sphere/ cylinder?


Top
 Profile  
Reply with quote  
 Post subject: Re: Panoramview with OpenGl?
PostPosted: Sun Aug 25, 2019 6:39 am 
Offline
Addict
Addict

Joined: Sun Jun 25, 2006 7:28 pm
Posts: 1374
@Mijikai , the Ogre code above have CameraFOV and camera rotation so i guess it is scrolling the scene by rotating the camera. and not like these pictures http://idea.hosting.lv/a/gfx/cubeshots.html


Top
 Profile  
Reply with quote  
 Post subject: Re: Panoramview with OpenGl?
PostPosted: Sun Aug 25, 2019 10:22 pm 
Offline
Enthusiast
Enthusiast
User avatar

Joined: Tue Sep 22, 2009 10:41 pm
Posts: 441
Does the compiler support that is following ?

CameraFOV(myCamera, 360)
ResizeCamera(myCamera, -100, -100, 300, 300)


Top
 Profile  
Reply with quote  
 Post subject: Re: Panoramview with OpenGl?
PostPosted: Tue Aug 27, 2019 3:14 pm 
Offline
Enthusiast
Enthusiast
User avatar

Joined: Tue Sep 22, 2009 10:41 pm
Posts: 441
@ApplePi

I can see your code contains gl functions and I can see also you gave an other gl code. I will try to copy them and to test them.

I appreciate gl functions.


Top
 Profile  
Reply with quote  
 Post subject: Re: Panoramview with OpenGl?
PostPosted: Wed Aug 28, 2019 9:15 am 
Offline
Enthusiast
Enthusiast
User avatar

Joined: Sat Feb 19, 2011 10:06 am
Posts: 784
Location: Denmark
Quote:
currently I use OGRE to view 180 degree panoramas and 360 VR images.
Unfortunately, loading larger files is very slow and OGRE can't handle umlauts and long file names.

The speed of loading images are based on size of memory (ram), ram speed and disk speed.
Your other problem can be circumventet by using LoadImage() and then draw it to
the texture.

_________________
“Tell me and I forget. Teach me and I remember. Involve me and I learn.”
— Benjamin Franklin
Current configurations: Windows 7/10, Intel 6800K, Gtx 970, 32 gb ram.


Top
 Profile  
Reply with quote  
 Post subject: Re: Panoramview with OpenGl?
PostPosted: Wed Aug 28, 2019 11:13 am 
Offline
Addict
Addict
User avatar

Joined: Wed Apr 30, 2003 8:15 am
Posts: 986
Location: Germany
@DK_PETER: thx for that hint. I'll try if its fix the problem :-)

_________________
"Daddy, I'll run faster, then it is not so far..."


Top
 Profile  
Reply with quote  
 Post subject: Re: Panoramview with OpenGl?
PostPosted: Sun Oct 13, 2019 1:53 am 
Offline
New User
New User

Joined: Sun Oct 13, 2019 1:49 am
Posts: 1
Mijikai wrote:
Is it just scrolling transfert cdg or does it need to be mapped onto a sphere/ cylinder?

I am a newbie to this but so far the only post processor and I have not had these grooves you show.


Top
 Profile  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 10 posts ] 

All times are UTC + 1 hour


Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
Jump to:  

 


Powered by phpBB © 2008 phpBB Group
subSilver+ theme by Canver Software, sponsor Sanal Modifiye