 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
0oFreako0
Anmeldungsdatum: 17.12.2011 Beiträge: 114
|
Verfasst am: 23.12.2011, 18:49 Titel: OpenB3D Fragen |
|
|
Hi ich hätte kurz ein paar Fragen zur minib3d Engine.
-Ist die Engine komplett freeware also auch falls man sie kommerziell für seine Produkte nutzen will?
-Wie sieht es mit der Syntax aus also muss ich komplett auf B3D Syntax zurückgreifen? Oder kann ich weiterhin auch den Syntax von Freebasic weiterbenutzen. Zb für OOP Programmierung?
Habt ihr sie schon mal benutzt und könnt ihr mir sagen ob diese Engine sich lohnt oder ist es besser ehr reinen OpenGL-Code zu coden?
Aber ich denke diese Engine beinhaltet ja auch schon Collisions Routinen. |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 23.12.2011, 18:53 Titel: |
|
|
OpenB3D ist FreeWare und du kannst damit natürlich auch kommerzielle Programme schreiben.
Du kannst natürlich immer noch alle FreeBasic Befehle nutzen, auch die zur OOP-Programmierung.
Zitat: | Habt ihr sie schon mal benutzt und könnt ihr mir sagen ob diese Engine sich lohnt oder ist es besser ehr reinen OpenGL-Code zu coden? |
Ich schreibe mit dieser Bibliothek mein Spiel "X-the forgotten battles"(kannst ja mal im Projektevorstellungs Unterforum gucken).
Du kannst mit OpenGL das Gleiche machen wie mit OpenB3D auch, nur wird es mit OpenGL länger dauern. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 23.12.2011, 19:04 Titel: |
|
|
Als kleine Ergänzung zur Lizenzfrage: Ein kurzer Blick in die Programmdateien verrät, dass die Bibliothek unter der LGPL steht. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 19.02.2013, 23:50 Titel: |
|
|
hi, ich wollt mir mal openB3D ansehen. Bekomme aber die Fehlermeldung das Variablen in der 2D.bi nicht deklariert wurden.
GL_BGRA in 'glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,TEXX,TEYY,0,GL_BGRA,GL_UNSIGNED_BYTE,TMP+sizeof(fb.image))
GL_UNSIGNED_SHORT_5_6_5 in 'glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,TEXX,TEYY,0,GL_RGB,GL_UNSIGNED_SHORT_5_6_5,TMP+sizeof(fb.image))
glActiveTexture in 'glActiveTexture(GL_TEXTURE0)
glClientActiveTexture in 'glClientActiveTexture(GL_TEXTURE0)
Benutze den Code aus dem Portal Tuturial und hab die openB3D 0.6 geladen
Code: | #Include "3D/openb3d.bi"
#Define Render_OpenGL
#Include "FreeImage.bi"
#Include "3D/2d.bi"
Screenres 1024, 600, 32
Graphics3D 1024, 600, 32
Var light=CreateLight()
Var cam=CreateCamera()
Var cube=CreateCube()
Do
UpdateWorld
RenderWorld
PositionEntity cube, 0, 0, 5
Sleep 1
ScreenSync
Loop Until Inkey=Chr(27)
ClearWorld
End |
|
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 20.02.2013, 00:21 Titel: |
|
|
GL_BGRA und GL_UNSIGNED_SHORT_5_6_5 sind in der glext.bi declariert (weiß ehrlich gesagt auch nicht wieso, gehört da mMn nicht rein)
also diese in der openb3d header dazu linken...
glActiveTexture und glClientActiveTexture müssen unter Windows auch erst 'definiert' werden (keine Ahnung wieso das scheinbar nach all der Zeit unter Windows nie getestet oder behoben worden ist)
Code: |
dim shared glActiveTexture as PFNGLACTIVETEXTUREPROC
dim shared glClientActiveTexture as PFNGLCLIENTACTIVETEXTUREPROC
glActiveTexture = ScreenGLProc("glActiveTexture")
glClientActiveTexture = ScreenGLProc("glClientActiveTexture")
|
irgendwo nach erstellen eines Context... hab die header gerade nicht hier... _________________
 |
|
Nach oben |
|
 |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 20.02.2013, 09:18 Titel: |
|
|
ich hab das jetzt so gemacht
Code: | #Include "GL/glext"
#Include "3D/openb3d.bi"
#Define Render_OpenGL
#Include "FreeImage.bi"
#Include "3D/2d.bi" |
aber wo ich
Code: | dim shared glActiveTexture as PFNGLACTIVETEXTUREPROC
dim shared glClientActiveTexture as PFNGLCLIENTACTIVETEXTUREPROC
glActiveTexture = ScreenGLProc("glActiveTexture")
glClientActiveTexture = ScreenGLProc("glClientActiveTexture")
|
einfügen soll kann ich nicht finden  |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 20.02.2013, 09:51 Titel: |
|
|
neue 2d.bi
Code: |
#include once "fbgfx.bi"
#include once "GL/gl.bi"
''-- by EternalPain
#include once "GL/glext.bi"
#Ifdef __FB_WIN32__
dim shared as PFNGLACTIVETEXTUREPROC glActiveTexture
dim shared as PFNGLCLIENTACTIVETEXTUREPROC glClientActiveTexture
#EndIf
''--
#ifdef Render_OpenGL
namespace ogl
dim shared as integer CORS(255)
dim shared as any ptr BUFFER
dim shared as integer TEXTURE,SCRX,SCRY,BPP
dim shared as double OFX,OFY,UPTIME
dim shared as integer FRAMESKIP=0
sub CallScreen( WID as integer,HEI as integer, BPP as integer,PAGS as integer,FLAGS as integer )
Screenres WID,HEI,BPP,PAGS,FLAGS
WindowTitle("OpenGL Render")
end sub
' ***** Make a integer multiple of a power of 2 ****
#macro ogl_MulBits( MultipleBits, MyIntVar )
asm
mov eax,[MyIntVar]
dec eax
shr eax,(MultipleBits)
inc eax
shl eax,(MultipleBits)
mov [MyIntVar],eax
end asm
#endmacro
' ***** Raise a integer to a power of 2 *****
#macro ogl_Power2( MyIntNumber )
asm
mov eax,[MyIntNumber]
dec eax
bsr ecx,eax
inc ecx
mov eax,0xFFFF0000
rol eax,cl
and eax,0xFFFF
inc eax
mov [MyIntNumber],eax
end asm
#endmacro
end namespace
#undef screenres
sub screenres( WID as integer=-1, HEI as integer=-1, BPP as integer=32, PAGS as integer=1, FLAGS as integer=0 )
dim as integer TEXX,TEYY
dim as any ptr TMP
dim as integer SCX,SCY
ScreenControl(fb.GET_DESKTOP_SIZE,SCX,SCY)
if WID=-1 then WID=SCX
if HEI=-1 then HEI=SCY
if WID>=SCX or HEI>=SCY then FLAGS or= fb.gfx_fullscreen
ogl_Power2(BPP)
if BPP <> 8 and BPP <> 32 and BPP <> 32 then BPP = 32
if BPP = 8 then exit sub
ogl_Mulbits( 3, WID)
ogl_Mulbits( 3, HEI)
ogl.SCRX = WID:ogl.SCRY = HEI
TEXX = WID:TEYY = HEI
ogl_Power2(TEXX)
ogl_Power2(TEYY)
ogl.OFX=WID/TEXX
ogl.OFY=HEI/TEYY
ogl.BPP=BPP
ogl.callscreen WID,HEI,BPP,PAGS,fb.GFX_OPENGL or FLAGS
''-- by EternalPain
#Ifdef __FB_WIN32__
glActiveTexture = ScreenGLProc("glActiveTexture")
glClientActiveTexture = ScreenGLProc("glClientActiveTexture")
#EndIf
''--
glViewport(0,0,WID,HEI)
glMatrixMode(GL_PROJECTION) 'Select The Projection Matrix
glLoadIdentity() 'Reset The Projection Matrix
glMatrixMode(GL_MODELVIEW) 'Select The Modelview Matrix
glLoadIdentity() 'Reset The Projection Matrix
glEnable(GL_TEXTURE_2D) 'Texture Mapping
glGenTextures 1, @ogl.TEXTURE
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST)
glClearColor(0f, 0f, 0f, 1.0f)
glClear(GL_COLOR_BUFFER_BIT)
glLoadIdentity()
glBindTexture GL_TEXTURE_2D, ogl.TEXTURE
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
if BPP = 8 then BPP=32
TMP = ImageCreate(TEXX,TEYY,0,BPP)
if BPP = 32 then
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,TEXX,TEYY,0,GL_BGRA,GL_UNSIGNED_BYTE,TMP+sizeof(fb.image))
else
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,TEXX,TEYY,0,GL_RGB,GL_UNSIGNED_SHORT_5_6_5,TMP+sizeof(fb.image))
end if
if ogl.bpp = 8 then
ogl.BUFFER = TMP
else
ImageDestroy(TMP)
end if
color ,rgba(0,0,0,0)
cls
end sub
#undef screensync
sub screenSync()
glColor4f(1.0, 1.0, 1.0, 1.0)
glActiveTexture(GL_TEXTURE0)
glClientActiveTexture(GL_TEXTURE0)
dim BT as double,TMP as any ptr, BUFSZ as integer
static as integer FS
BT=timer
glBindTexture GL_TEXTURE_2D, ogl.TEXTURE
FS += 1
if FS > OGL.FRAMESKIP then FS=0
if FS=0 then
if ogl.BPP = 32 then
glTexSubImage2D(GL_TEXTURE_2D,0,0,0,ogl.SCRX,ogl.SCRY,GL_BGRA,GL_UNSIGNED_BYTE,screenptr)
elseif ogl.BPP = 16 then
glTexSubImage2D(GL_TEXTURE_2D,0,0,0,ogl.SCRX,ogl.SCRY,GL_RGB,GL_UNSIGNED_SHORT_5_6_5,screenptr)
else
for BUFSZ = 0 to 255
'ogl.CORS(BUFSZ) = rgba(64,0,BUFSZ,0)
Palette Get BUFSZ,ogl.CORS(BUFSZ)
next BUFSZ
TMP = screenptr
BUFSZ = ogl.SCRX*ogl.SCRY
asm
mov esi,[TMP]
mov edi,[ogl.BUFFER]
add edi,sizeof(fb.image)
mov edx,offset ogl.CORS
mov ecx,[BUFSZ]
xor eax,eax
_8TO32_NEXTPIXEL_:
lodsb
mov ebx,[EDX+EAX*4]
mov [edi],ebx
add edi,4
dec ecx
jnz _8TO32_NEXTPIXEL_
end asm
glTexSubImage2D(GL_TEXTURE_2D,0,0,0,ogl.SCRX,ogl.SCRY,GL_BGRA,GL_UNSIGNED_BYTE,ogl.BUFFER+sizeof(fb.image))
end if
end if
glDisable(GL_LIGHTING)
glDisable(GL_CULL_FACE)
glDisable(GL_NORMALIZE)
glMatrixMode (GL_PROJECTION)
glPushMatrix ()
glLoadIdentity ()
glOrtho (-1, 1, -1, 1, -1, 1)
glEnable(GL_TEXTURE_2D)
glEnable(GL_BLEND)
glEnable(GL_ALPHA_TEST)
glDisable(GL_DEPTH_TEST)
glMatrixMode (GL_MODELVIEW)
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)
glLoadIdentity ()
glBegin(GL_QUADS)
glTexCoord2f(ogl.OFX, ogl.OFY):glVertex3f(1,-1,0)
glTexCoord2f(0, ogl.OFY):glVertex3f(-1,-1,0)
glTexCoord2f(0,0):glVertex3f(-1,1,0)
glTexCoord2f(ogl.OFX, 0):glVertex3f(1,1,0)
glEnd()
ogl.UPTIME=timer-BT
flip
glEnable(GL_LIGHTING)
glEnable(GL_CULL_FACE)
glEnable(GL_NORMALIZE)
glDisable(GL_TEXTURE_2D)
glDisable(GL_BLEND)
glEnable(GL_DEPTH_TEST)
end sub
#else
namespace ogl
dim shared as double UPTIME
dim shared as integer FRAMESKIP=0
end namespace
#endif
|
Vermutlich nicht optimal gelöst aber so funktioniert dein Beispiel von oben ohne Änderungen, ohne weitere Fehler _________________
 |
|
Nach oben |
|
 |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 20.02.2013, 22:19 Titel: |
|
|
das mit den Variablen ist gelöst dafür bekomm ich jetzt: cannot find -lOpenB3D
Code: | Command executed:
"C:\Programmieren\FreeBASIC\fbc.exe" -s gui "C:\Programmieren\FreeBASIC\Projekte\Test 3D\FBIDETEMP.bas"
Compiler output:
C:\Programmieren\FreeBASIC\bin\win32\ld.exe: cannot find -lOpenB3D
Results:
Compilation failed
System:
FBIde: 0.4.6
fbc: FreeBASIC Compiler - Version 0.24.0 (08-19-2012) for win32
OS: Windows NT 6.1 (build 7600) |
liegt es vllt. an -s gui ? |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 20.02.2013, 22:49 Titel: |
|
|
Nein, das liegt daran das du die OpenB3D.dll nicht im Arbeitsverzeichnis hast... _________________
 |
|
Nach oben |
|
 |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 20.02.2013, 23:11 Titel: |
|
|
also irgendwie bin ich jetzt verwirrt. Arbeitsverzeichnis ist doch das in welchem ich mein Code gespeichert habe oder nicht? bekomme jetzt die meldung kein zugriff.
Code: | Compiler output:
C:\Programmieren\FreeBASIC\bin\win32\ld.exe: reopening C:\Programmieren\FreeBASIC\Projekte\Test 3D\FBIDETEMP.exe: Permission denied
C:\Programmieren\FreeBASIC\bin\win32\ld.exe: final link failed: Permission denied
|
|
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 20.02.2013, 23:18 Titel: |
|
|
Permission denied Fehler kommen oft dann, wenn es zu dem betroffenen Image noch einen laufenden Prozess gibt.
Falls dies der Fall sein sollte einfach den Prozess im Task-Manager killen. _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 20.02.2013, 23:54 Titel: |
|
|
leider nicht. im taskmanager kann ich nichts finden.
Falls es wichtig ist:
mein Code ist gespeichert in FreeBasic/Projekte/Test 3D/
hier hab ich jetzt auch die openB3D.dll gespeichert
die openb3d.bi und 2d.bi hab ich in inc/3d/ gepackt.
kann es sein das etwas nicht richtig aufgerufen wird ? |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 21.02.2013, 01:03 Titel: |
|
|
Wenn der RAM gerade mal wieder zugemüllt ist, probiere es doch einfach mal mit einem Neustart _________________
 |
|
Nach oben |
|
 |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 21.02.2013, 22:20 Titel: |
|
|
ok das war das problem, danke.
Ich wollt mir das ganze mal ansehen da ich ein beschrifteten 3D ring in einem meiner programme anzeigen wollte.
jetzt hab ich 2 probleme
1. ich hab nach beispiel ein blauen zylinder erstellt, eine textur erstellt und diese auf den zylinder geklatscht. den code der textur hab ich so verstanden das ein grüner hintergrund erstellt wird und und der farbe des zylinders wird der schriftzug drauf gezeichnet.
Bei der Ausführung allerdings ist der zylinder schwarz mit blauem text.
2. in meinem program benutze ich ein durchsichtigen vollscreen, wie kann ich denn den hintergrund im 3D projekt dursichtig bekommen
Code: | #Include "3D/openb3d.bi"
#Define Render_OpenGL
#Include "FreeImage.bi"
#Include "3D/2d.bi"
Screenres 1024, 600, 32,, &h02 or &h10
Graphics3D 1024, 600, 32
Var light=CreateLight()
Var cam=CreateCamera()
Var Cylinder=CreateCylinder(32)
PositionEntity Cylinder, 0, 0, 12
EntityColor Cylinder, 0, 0, 255
var tex1=CreateTexture(128,128,1,1)
var img = imagecreate(128,128,32)
Line img,(0,0)-(127,127),RGB(0,200,100),BF
draw string img, (64-4*12,10),"POSTMAIL"
BufferToTex tex1,img+32,1
EntityTexture cylinder,tex1
'untergrund erstellen
var terrain = CreateTerrain(32)
'create image of terrain
var terimg=imagecreate(32,32,32)
Line terimg,(0,0)-(31,31),RGB(255,100,0),BF
Line terimg,(0,0)-(15,15),RGB(100,255,0),BF
Line terimg,(16,16)-(31,31),RGB(100,255,0),BF
'create texture from image
var tertex=CreateTexture(32,32,1,1)
BufferToTex tertex,terimg+32,1
'untergrund die neue textur zuweisen
EntityTexture terrain,tertex
PositionEntity terrain,-15,-5,30
Do
color , &hff00ff
TurnEntity Cylinder, 0, -10, 0
UpdateWorld
RenderWorld
Sleep 1
ScreenSync
Loop Until Inkey=Chr(27)
ClearWorld
End |
|
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 21.02.2013, 22:45 Titel: |
|
|
Ob es in B3D eine 'fertige' Möglichkeit gibt einen Splashscreen zu erzeugen weiss ich nicht und als alternative fällt mir nur die Möglichkeit ein einen screenshot vom Desktop zu machen und als Textur auf den Screen zu setzen...
Was die Farben angeht kann ich leider auch nicht helfen, egal was ich eingebe, das Ding ist entweder Blau oder Schwarz... denke da ist ein fehler in der BufferToText function von B3D...
... nur ein weiterer Grund warum ich das Ding nie benutze...
Das Ding kann noch so tolle funktionen haben, wenns nicht funktioniert dann taugt es einfach nichts... _________________
 |
|
Nach oben |
|
 |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 21.02.2013, 22:54 Titel: |
|
|
das ist ja schade. was würdest du machen um das umzusetzen was ich mir da gedacht hatte. Also benutzt du eine andere 3D Funktion als openB3D oder schreibst du das alles selbst? |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 21.02.2013, 23:02 Titel: |
|
|
Ich lese mich durch jedes OpenGL Tutorial das ich finden kann.
Leider sind die meisten ziemlich veraltet und neuere bauen leider viel zu oft auf Drittbibliotheken auf was mir auch selten weiter hilft.
Hab mir inzwischen das eine oder andere Buch gekauft.
Je nach komplexität des Vorhabens nicht ganz einfach, bin leider kein Mathe-Ass (Matritzen und Co.) auch muss ich vieles mindestens 10mal lesen und probieren bis ichs überhaupt verstehe... darüber hinaus ist (fast) alles in Englisch was die Sache auch nicht unbedingt einfacher macht.
Wenn es wirklich nur sowas einfaches sein soll wie der Zylinder mit Textur auf einem (fake)transparent-Splashscreen, sollte es allerdings nicht sehr schwer werden... _________________
 |
|
Nach oben |
|
 |
ichhalt
Anmeldungsdatum: 26.01.2013 Beiträge: 39
|
Verfasst am: 23.02.2013, 15:06 Titel: |
|
|
ich kann die blöde .a von openb3d hinpacken wo ich will er findet sie einfach nicht |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 23.02.2013, 15:13 Titel: |
|
|
Du kannst fbc mit dem Parameter "-p" anweisen, einen eigenen Pfad dem Suchpfad des Linkers hinzuzufügen: z.B. Code: | fbc myProg.bas -p "./lib" |
Beachte, dass du, wenn du z.B. #inclib "openb3d" im Quellcode angibst nach einer "libopenb3d.dll.a" bzw. "libopenb3d.a" gesucht wird - du also die Dateierweiterung nicht angeben musst.
Desweiteren wär natürlich die genaue Fehlermeldung hilfreich, die ld (oder etwa schon der fbc?) ausgibt. Den ld Aufruf inkl. Parameter siehst du übrigens am Besten, wenn du den fbc mit Parameter "-v" aufrufst (verbose).
edit: name korrigiert _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|