Einfache Demo mit Opengl , Fahrgestell mit 3 Kranauslegern

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
wasser
Beiträge: 125
Registriert: 27.11.2006 21:16

Einfache Demo mit Opengl , Fahrgestell mit 3 Kranauslegern

Beitrag von wasser »

Ein neues Opengl-Beispiel mit einem einfachen Fahrgestell und 3 Kranarmen hintereinander.
Fahrgestell und Kranarme können mit den Tasten bewegt werden :

Fahrgestell: Q,E,W,S
Kranarme :T,G,Z,H,U,J
Gitternetz : A,Y und die Pfeiltaten

Die 3d-Daten abspeichern als test1.x

Wurden mit dem Programm Blender als "test1.x" exportiert

Habe festgestellt, das die Daten hier nicht reinpassen, wie kann ich die Daten zugänglich machen ?
Wer die Musterdaten haben möchte ,kann mir hier im Forum eine Nachricht schicken.

Code: Alles auswählen


XIncludeFile "glu.pbi"
; oder XIncludeFile "opengl.pbi"

Global x1.f,z1.f,dx.f,dz.f,anglezz.f
Global xrot.f
Global ausleger_1.f=0.0,ausleger_2.f=0.0,ausleger_3.f=0.0

Global AngleX.f = 25.0
Global AngleY.f = 3.0
Global AngleZ.f = 0.0
Global X.f = 2.0
Global Y.f = -8.0
Global Z.f = -15.0

Global Dim zahl_3d.f(12,2000,2)
Global Dim zahl_farbe.f(12,2)
Global durchlauf_3d.w,anzahl.w

Global i1.w,ii.w,zz1.w
Global text.s

Global q.l = gluNewQuadric_()
gluQuadricNormals_(q, #GL_SMOOTH)
gluQuadricTexture_(q, #GL_TRUE)	

Global *LightAmb = AllocateMemory(4*4)
Global *LightDif = AllocateMemory(4*4)
Global *LightPos = AllocateMemory(4*4)

PokeF(*LightAmb,0.8):PokeF(*LightAmb+4,0.8):PokeF(*LightAmb+8,0.8):PokeF(*LightAmb+12,1.0)
PokeF(*LightDif,0.15):PokeF(*LightDif+4,0.15):PokeF(*LightDif+8,0.15):PokeF(*LightDif+12,1.0)
PokeF(*LightPos,-4.0):PokeF(*LightPos+4,4.0):PokeF(*LightPos+8,-4.0):PokeF(*LightPos+12,1.0)

Structure GLscreen
  container.l
  hWnd.l
  hDC.l
EndStructure

Procedure FindNextExp(Val)
  While a < Val
    a = 1 << b
    b + 1
  Wend
  ProcedureReturn a
EndProcedure

Procedure GLLoadAlphaTexture(Filename.s, TexFilter, TransparentColor)
  img       = LoadImage(#PB_Any, Filename.s)
  Width.l   = FindNextExp(ImageWidth(img))
  Height.l  = FindNextExp(ImageHeight(img))
  ResizeImage(img, Width, Height)
  Size.l    = Width * Height * 4
 
  Dim ImageData.b(Size)
 
  hdc = StartDrawing(ImageOutput(img))
  bmi.BITMAPINFO
  bmi\bmiHeader\biSize        = SizeOf(BITMAPINFOHEADER)
  bmi\bmiHeader\biWidth       = Width
  bmi\bmiHeader\biHeight      = Height
  bmi\bmiHeader\biPlanes      = 1
  bmi\bmiHeader\biBitCount    = 32
  bmi\bmiHeader\biCompression = #BI_RGB
  bmi\bmiHeader\biSizeImage   = (bmi\bmiHeader\biWidth * bmi\bmiHeader\biHeight * bmi\bmiHeader\biBitCount / 8)-1
 
  GetDIBits_(hdc, ImageID(img), 0, bmi\bmiHeader\biHeight, @ImageData(0), bmi, #DIB_RGB_COLORS)
 
  red   = Red (TransparentColor)
  green = Green(TransparentColor)
  blue  = Blue (TransparentColor)
 
  For k=0 To Size-1 Step 4
    b = ImageData(k  ) & $FF
    g = ImageData(k+1) & $FF
    r = ImageData(k+2) & $FF
   
    If r = red And g = green And b = blue
      ImageData(k+3) = 0
    Else
      ImageData(k+3) = $FF
    EndIf
   
    ImageData(k+2) = b
    ImageData(k  ) = r
  Next
  StopDrawing()
 
  glGenTextures_(1, @Tex) ;Textur speichern
  If TexFilter = 0 ;versch. Textur-Filter
    glBindTexture_(#GL_TEXTURE_2D, Tex)
    glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MAG_FILTER, #GL_NEAREST)
    glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MIN_FILTER, #GL_NEAREST)
    glTexImage2D_(#GL_TEXTURE_2D, 0, #GL_RGBA, Width, Height, 0, #GL_RGBA, #GL_UNSIGNED_BYTE, @ImageData(0))
  ElseIf TexFilter = 1
    glBindTexture_(#GL_TEXTURE_2D, Tex)
    glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MAG_FILTER, #GL_LINEAR)
    glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MIN_FILTER, #GL_LINEAR)
    glTexImage2D_(#GL_TEXTURE_2D, 0, #GL_RGBA, Width, Height, 0, #GL_RGBA, #GL_UNSIGNED_BYTE, @ImageData(0))
  ElseIf TexFilter = 2
    glBindTexture_(#GL_TEXTURE_2D, Tex)
    glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MAG_FILTER, #GL_LINEAR)
    glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MIN_FILTER, #GL_LINEAR_MIPMAP_NEAREST)
    gluBuild2DMipmaps_(#GL_TEXTURE_2D, 4, Width, Height, #GL_RGBA, #GL_UNSIGNED_BYTE, @ImageData(0))
  EndIf
  FreeImage(img)
  ProcedureReturn Tex
EndProcedure

Procedure OpenGLScreen(*p.GLscreen,xx,yy,ww,hh)
  If *p
    container = ContainerGadget(#PB_Any,xx,yy,ww,hh)
    If container
      hwnd = GadgetID(container)
      hdc = GetDC_(hwnd)
      pfd.PIXELFORMATDESCRIPTOR
      pfd\nSize = SizeOf(PIXELFORMATDESCRIPTOR)
      pfd\nVersion = 1    
      pfd\dwFlags = #PFD_SUPPORT_OPENGL | #PFD_DOUBLEBUFFER | #PFD_DRAW_TO_WINDOW
      pfd\iLayerType = #PFD_MAIN_PLANE
      pfd\iPixelType = #PFD_TYPE_RGBA
      pfd\cColorBits = 24
      pfd\cDepthBits = 32
      pixformat = ChoosePixelFormat_(hdc, pfd)
      SetPixelFormat_(hdc, pixformat, pfd)
      hrc = wglCreateContext_(hdc)
      wglMakeCurrent_(hdc, hrc)
      SwapBuffers_(hdc)
      *p\container = container
      *p\hWnd      = GadgetID(container)
      *p\hDC       = hdc
      
      glLightfv_(#GL_LIGHT0, #GL_AMBIENT, *LightAmb)
	    glLightfv_(#GL_LIGHT0, #GL_DIFFUSE, *LightDif)
	    glLightfv_(#GL_LIGHT0, #GL_POSITION, *LightPos)
	    glEnable_(#GL_LIGHT0)
	    glEnable_(#GL_LIGHTING)
	    
	    glEnable_(#GL_DEPTH_TEST)
	    glClearColor_( 0.0, 0.0, 0.0, 0.0)
      glEnable_ (#GL_COLOR_MATERIAL)
	    glEnable_(#GL_TEXTURE_2D)
      glEnable_(#GL_ALPHA_TEST)
      glAlphaFunc_(#GL_GREATER, 0.0)
      
      ProcedureReturn 1
    EndIf
  EndIf
EndProcedure

Procedure SetCamera(X.f, Y.f, Z.f, AngleX.f, AngleY.f, AngleZ.f, Near.f = 0.1, Far.f = 100.0) ;Sets the cameraposition and the FOV
  glMatrixMode_(#GL_PROJECTION)
  glLoadIdentity_()
  gluPerspective_(45, 1, Near.f, Far.f)
  glRotatef_(AngleX, 1.0, 0.0, 0.0)
  glRotatef_(AngleY, 0.0, 1.0, 0.0)
  glRotatef_(AngleZ, 0.0, 0.0, 1.0)
  glTranslatef_(X, Y, Z)
  glMatrixMode_(#GL_MODELVIEW)
 
  glDepthRange_(Near.f, Far.f)
EndProcedure

Procedure load_vertex_x(name.s)
  If ReadFile(0, name.s)   
  
  For durchlauf_3d=1 To 12
    text=LTrim(ReadString(0))
    While Mid(text,0,6)<>"Mesh {"
      text=LTrim(ReadString(0))
      If text="}  // End of the Root Frame"
        Break 2
      EndIf  
    Wend
    
    text=LTrim(ReadString(0))
    zz1=Val(StringField(text,1, " ")) 
    zahl_3d(0,0,0)=durchlauf_3d
    zahl_3d(durchlauf_3d,0,0)=zz1
  
    For i1=1 To zz1
      text=LTrim(ReadString(0))
	    zahl_3d(durchlauf_3d,i1,0)=ValF(StringField(text, 1, ";")) 
	    zahl_3d(durchlauf_3d,i1,1)=ValF(StringField(text, 2, ";")) 
	    zahl_3d(durchlauf_3d,i1,2)=ValF(StringField(text, 3, ";")) 
    Next    
    
    text=LTrim(ReadString(0))
    While Mid(text,0,8)<> "Material"
      text=LTrim(ReadString(0))
    Wend  
    text=LTrim(ReadString(0))
    zahl_farbe(durchlauf_3d,0)=ValF(StringField(text, 1, ";")) 
    zahl_farbe(durchlauf_3d,1)=ValF(StringField(text, 2, ";"))
    zahl_farbe(durchlauf_3d,2)=ValF(StringField(text, 3, ";"))  	
    
  Next  
             
  EndIf
  
  
EndProcedure


Procedure Draw_Cube(anfang.w,ende.w) 
   For anzahl=anfang To ende
     glColor3f_(zahl_farbe(anzahl,0),zahl_farbe(anzahl,1),zahl_farbe(anzahl,2))
     glBegin_(#GL_POLYGON)
			 For ii=1 To zahl_3d(anzahl,0,0)
		     glVertex3f_ (zahl_3d(anzahl,ii,0),zahl_3d(anzahl,ii,1),zahl_3d(anzahl,ii,2))
	     Next
	   glEnd_()
	 Next
EndProcedure
  
  If OpenWindow(0, 0, 0, 800,600,  "TEST",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  CreateGadgetList(WindowID(0))
  ButtonGadget(0,520,10,80,20, "links")
  ButtonGadget(1,520,40,80,20, "rechts")
  
  If OpenGLScreen(screen.GLscreen,10,10,500,500)
  
  load_vertex_x("test1.x")
  
  Repeat
    glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT | #GL_STENCIL_BUFFER_BIT)
    
    SetCamera( X, Y, Z, AngleX, AngleY, AngleZ)
    
    glLoadIdentity_()
 
    glPushMatrix_() 
      glTranslatef_(0.0,0.0,0.0)
      glRotatef_(90.0,1,0,0)
      glColor3f_(1.0,1.0,1.0)
      glBegin_(#GL_LINES)           
      For n.w = -10 To 10
      	 glVertex3f_( n, -10, 0)
         glVertex3f_( n, 10, 0)
         glVertex3f_( -10, n, 0)
         glVertex3f_ (10, n, 0)
      Next n
      glEnd_()      
      glPopMatrix_()      
    
      glPushMatrix_()   
        glTranslatef_(dx,0,dz)   
        glRotatef_(anglezz,0,1,0)   
        draw_cube(2,6)
    
        glPushMatrix_()
          glTranslatef_(0,0.3,0)
          glRotatef_(90,0,1,0) 
          glRotatef_(ausleger_1,0,0,1) 
          draw_cube(1,1) 
                 
          glTranslatef_(0,0.75,0.07)
          glRotatef_(ausleger_2,0,0,1)  
          draw_cube(1,1)
             
          glTranslatef_(0,0.75,0.07)
          glRotatef_(ausleger_3,0,0,1) 
          draw_cube(1,1)
        glPopMatrix_()         
      glPopMatrix_()
      
	  glPopMatrix_()
	   
    SwapBuffers_(screen\hdc)
      
    Event = WaitWindowEvent(0)
       
    WindowID = EventWindow() 
  
    GadgetID = EventGadget() 
  
    EventType = EventType() 
      
    If Event = #PB_Event_Gadget
      If GadgetID = 0
        
      EndIf
      If GadgetID = 1
        
      EndIf
    EndIf       
            
  If GetAsyncKeyState_(#VK_UP)
    Z + Cos(AngleX/180*#PI)*Cos(AngleY/180*#PI)*0.01
    Y + Sin(AngleX/180*#PI)*0.01
    X - Sin(AngleY/180*#PI)*Cos(AngleX/180*#PI)*0.01  
  ElseIf GetAsyncKeyState_(#VK_DOWN)
    Z - Cos(AngleX/180*#PI)*Cos(AngleY/180*#PI)*0.01
    Y - Sin(AngleX/180*#PI)*0.01
    X + Sin(AngleY/180*#PI)*Cos(AngleX/180*#PI)*0.01
  EndIf
 
  If GetAsyncKeyState_(#VK_LEFT)
    AngleY -0.02   
  ElseIf GetAsyncKeyState_(#VK_RIGHT)
    AngleY + 0.02
  EndIf
  
  If GetAsyncKeyState_(#VK_A)
    AngleX + 0.02   
  ElseIf GetAsyncKeyState_(#VK_Y)
    AngleX - 0.02 
  EndIf 
  
  If GetAsyncKeyState_(#VK_W)
    x1=Sin(Anglezz/180*#PI)*0.001  
    z1=Cos(Anglezz/180*#PI)*0.001
    dx+x1
    dz+z1    
  ElseIf GetAsyncKeyState_(#VK_S)
    x1=Sin(Anglezz/180*#PI)*0.001  
    z1=Cos(Anglezz/180*#PI)*0.001
    dx-x1
    dz-z1      
  EndIf
  
 If GetAsyncKeyState_(#VK_Q)
    Anglezz + 0.05 
 ElseIf GetAsyncKeyState_(#VK_E)
    Anglezz - 0.05 
 EndIf 
 
 If GetAsyncKeyState_(#VK_G)
    ausleger_1 + 0.05 
 ElseIf GetAsyncKeyState_(#VK_T)
    ausleger_1 - 0.05 
 EndIf 
 
 If GetAsyncKeyState_(#VK_H)
    ausleger_2 + 0.05 
 ElseIf GetAsyncKeyState_(#VK_Z)
    ausleger_2 - 0.05 
 EndIf 
 
 If GetAsyncKeyState_(#VK_J)
    ausleger_3 + 0.05 
 ElseIf GetAsyncKeyState_(#VK_U)
    ausleger_3 - 0.05 
 EndIf 
     
 Until Event = #PB_Event_CloseWindow

 ReleaseDC_(screen\hWnd,screen\hDC)

 EndIf

 EndIf
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Habe festgestellt, das die Daten hier nicht reinpassen

wie meinst du "hier nicht reinpassen"?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
wasser
Beiträge: 125
Registriert: 27.11.2006 21:16

Beitrag von wasser »

Wenn ich die Daten mit "

Code: Alles auswählen

 " reinsetze, fehlen unten die letzten 100 Zeilen

und in  der Klammer von "[code4errsasx]" befinden sich Buchstaben und Zahlen, an die 8 Stück.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

aber es ist klartext?
dann poste es notfalls in zwei getrennten code-tags,
und schreib dazu, das man es ins selbe file patchen soll...
die maximallänge von einem code-abschnitt ist begrenzt im forum...

noch besser wäre es allerdings, wenn du das file irgendwo hochlädst und per downloadlink anbietest.
eigentlich muss man es ja nicht im klartext lesen, also muss man es auch nicht unbedingt komplett posten... ;)

> "[code4errsasx]"
hum... wasn das fürn tag? den kenn ich ja garnich...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
wasser
Beiträge: 125
Registriert: 27.11.2006 21:16

Beitrag von wasser »

> "[code4errsasx]"
Die Buchstaben kamen nach dem Hochladen von selber rein.

MFG
xperience2003
Beiträge: 972
Registriert: 04.10.2004 18:42
Computerausstattung: Amiga, LinuxMint, Windows7
Wohnort: gotha
Kontaktdaten:

Beitrag von xperience2003 »

mach mal ne exe bitte , wuerds gern anschauen
..hab hier auch nich ueberall pure drauf ^^
amiga rulez...
Rebirth Software
wasser
Beiträge: 125
Registriert: 27.11.2006 21:16

Beitrag von wasser »

Schick mir eine Nachricht mit deiner Mailadresse
, dann geht es besser?
Es gibt dann den Sourcecode und die Körperdaten.

Oder es sagt mal einer, wie ich hier eine zip reinstellen kann.
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

Lad doch den Code und die Exe gezippt bei Rapidshare.com hoch :)
Dann kannste die Zip hier verlinken.

mfg
125
Bild
BildDas ist Tux. Kopiere Tux in deine Signatur und hilf ihm so auf seinem Weg zur Weltherrschaft.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Kaeru Gaman hat geschrieben:noch besser wäre es allerdings, wenn du das file irgendwo hochlädst und per downloadlink anbietest.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

Kaeru Gaman hat geschrieben:
Kaeru Gaman hat geschrieben:noch besser wäre es allerdings, wenn du das file irgendwo hochlädst und per downloadlink anbietest.
....
wasser hat geschrieben: Oder es sagt mal einer, wie ich hier eine zip reinstellen kann.
....

Kaeru take it easy ;)
Bild
BildDas ist Tux. Kopiere Tux in deine Signatur und hilf ihm so auf seinem Weg zur Weltherrschaft.
Antworten