bOGL - OGL based open source 3D engine

Community Forums/Showcase/bOGL - OGL based open source 3D engine

Andres(Posted 2005) [#1]
bOGL is an OpenGL based open source 3D engine for BlitzBasic (Tested on BlitzPlus).
No OpenGL knowledge required. It's easy as Blitz3D even most of the function names are identical.



Download bOGL 1.01 beta or a simple demo created with bOGL

Currently are available the following functions:

Graphics3D(title$, width%, height%, depth%, mode%)
CreateCanvas3D(x%, y%, width%,height%, group)
CreateCamera()
CreateLight(red#, green#, blue#, flag%)
CreateCube()
CreateSprite()
CameraRange(handler%, near#, far#)
CameraFieldOfView(handler%, angle#)
CameraFogMode(handler%, mode%[, near#[, far#]])
CameraFogColor(handler%, red%, green%, blue%[, alpha#])
PositionEntity(handler%, x#, y#, z#)
RotateEntity(handler%, x#, y#, z#)
ScaleEntity(handler%, x#, y#, z#)
PaintEntity(handler%, red%, green%, blue%)
EntityAlpha(handler%, alpha#)
EntityTexture(handler%, texture%[, flag%])
ShowEntity(handler%, state%)
FreeEntity(handler%)
FlipPolygons(handler%)
EntityX#(handler%), EntityY#(handler%), EntityZ#(handler%)
EntityXAngle#(handler%), EntityYAngle#(handler%), EntityZAngle#(handler%)
LoadTexture(file$[, quality%]) valid quality - 2, 4, 8, 16
TextureWidth(handler%), TextureHeight(handler%)
RenderWorld()
Distance(x1#, y1#, z1#, x2#, y2#, z2#)


Regular K(Posted 2005) [#2]
Downloading demo...

Seems great :) A simple (right now) 3D engine for BlitzPlus

EDIT: This is great, exactly what I was looking for in a 3d engine (all I want is camera control, and textures :p) I hope you keep working on this :)


IPete2(Posted 2005) [#3]
Ahem,

I think you missed this - it is OPenGL for any Blitz (tested on Blitz Plus).

IPete2.


Andres(Posted 2005) [#4]
Yea, OpenGL might be for any Blitz, but the engine might not. The engine has been tested only on BlitzPlus.


IPete2(Posted 2005) [#5]
oh Okay

Can someone with Opengl knowledge please test this with B3d?

IPete2.


Andres(Posted 2005) [#6]
There is no OpenGL knowledge required. The only thing with Blitz3D is that you have to change the occurred function names. I used the same function names because i thought there would be no use of bOGL in Blitz3D. It already supports 3D and has even more functions than bOGL.


Andres(Posted 2005) [#7]
Some more functions have been added and some of them have been fixed too.


Andres(Posted 2005) [#8]
I measured the speed of bOGL and it's approximately 350000tris/s

I have P4 3GHz, 512MB RAM, ATI radeon 9600SE


BlitzSupport(Posted 2005) [#9]
Cool, I missed this completely!


Damien Sturdy(Posted 2005) [#10]
Can someone test bOGL speed vs Blitz3D speed?

I'm at work, cant test it now, but this seems great :D


Raitsun(Posted 2005) [#11]
Would be cool if it worked with BMax...
would buy it at once....


jfk EO-11110(Posted 2005) [#12]
I don't think 350'000 is a big lot, this would be about 5'000 at 70 FPS. Are you sure it's only 350'000/s ? I'd expect more like 350'000 at 60Hz or something.

BTW does this require Hardware 3D, or is it capable of switching to Softrender Mode when no 3D Hardware is detected? This would be very useful - although slow, but noneless useful.


Andres(Posted 2005) [#13]
Can OpenGL be "switched" to software mode? I'm pretty sure that it's 350k tris/s. Probably I'll need to optimize my code. But it's written in BB so IMO it can't be as fast the other 3D engines, such as Crystal Space and stuff.

Currently I'm drawing faces behind the camera too so to gain more speed i should skip them.

I'm still a noob at OGL and I almost didn't know anything about it when i started with this project.

Doesn't bOGL work on BMAX? I think you don't even need to copy the userlibs.


jfk EO-11110(Posted 2005) [#14]
AFAIK OGL offers a softrender mode. I don't think it's your code that makes it slow (well maybe the camera fustrum culling), the hardware don't care too much if the commands come from BB or from something else. It just has to render the Tris. BTW Crystal Space has a Softrender Mode too.


bytecode77(Posted 2006) [#15]
i would really like to see this working for blitz3d/bb and not just b+ :)

you did a great job. my open gl engine is crap...


Zmatrix(Posted 2006) [#16]
yeah 350k tris per second is pretty slow.

but it might be that your just thrashing the T&l cache with the low poly primatives (cubes) its just not enough triangle data to keep it loaded.

if you could add spheres to it...you would probably a much greate poly trhoughput at the same speed.

also you may need to unlock your vertical retrace if you are only rendering say 5000 tris to a screen. to see what it can really do.

looks like good stuff tho :) thanks for sharing
if I only had b+ heh

Sam


andy_mc(Posted 2012) [#17]
The download for this no longer works. Does anyone have it, or give me a similar totally free 3D engine for BlitzPlus?


Hotshot2005(Posted 2012) [#18]
7 years ago!? I never knew about this one and it look good for BlitzPlus if someone can find the link for it :)


Yasha(Posted 2012) [#19]
Try this: https://dl.dropbox.com/u/46635275/bOGL1.01_beta.rar


Captain Wicker (crazy hillbilly)(Posted 2012) [#20]
Thank you!
Do you have a link to the demo sample?

Last edited 2012


andy_mc(Posted 2012) [#21]
This is great!

Does anyone have a more complex demo I could test?


Yasha(Posted 2012) [#22]
No demo here, sadly. I remember seeing it... guess I must have deleted that one.

Now... let's see if we can't add some relative movement commands and a parenting system, heh heh heh. This is my entertainment for the weekend sorted!


Captain Wicker (crazy hillbilly)(Posted 2012) [#23]
let's see if we can't add some relative movement commands and a parenting system

sweeeeeet!!! ;-)


Yasha(Posted 2012) [#24]
OK, made some rather hefty changes... examine my altered version here, or grab it from the downloads area: https://github.com/Leushenko/bOGL-2

Since this is a hugely different version, I will probably make a new thread for it shortly.

Changes include:
-- faster overall code structure (no more O(n) access time for entity handles!)
-- significantly faster rendering, using vertex arrays instead of glBegin/glEnd (this is still much slower than miniB3D's VBOs, but fast enough for real work)
-- a few error corrections in the GL decls, so do remember to overwrite the old one when copying it
-- a whooole bunch of new commands, notably including CreateMesh and its vertexy friends, and relative movement with MoveEntity, TurnEntity and TFormPoint
-- reference-counted textures, like in Blitz3D and miniB3D
-- quaternion-based rotations, so no gimbal lock
-- directional, point, and ambient lights
-- Rotate/Translate/Scale submesh commands, very handy for implementing a bone-based animation system by grouping vertex operations
-- B3D/miniB3D-style mesh structure (bOGL 1's meshes are more compact, but can basically only be cubes, this allows total customisation)

...and it's still under 950 lines, including comments (not including Peter Scheutz's OpenGL files, but they arguably don't count as part of the engine).

Still to come:
-- parenting system, so that skeletal animations can happen (between relative movement and TFormPoint, you don't technically need parenting, but it certainly makes the code simpler)
-- easy stencil buffer rendering, for shadows, portals and whatnot
-- some EntityFX?
-- documentation, of which there is really not any at the moment short of reading the source (so expect tripups on commands that don't quite match B3D)
-- a C version, eventually

I am open to further suggestions, although I do not consider the already-substantial differences from B3D's command set to be bugs in need of "fixes" (e.g. CopyEntity copies mesh data; meshes have only one built-in surface; some commands have different names or arguments - these are all suited to the nature of the project and don't "need" to be upgraded).

The licence attached to keep GitHub happy is BSD, but don't put too much weight on that just now.

Enjoy!

Last edited 2012


GaryV(Posted 2012) [#25]
Thank you for making a zip version available.


BlitzSupport(Posted 2012) [#26]
Nice work... weird how this one has kicked off again!


Captain Wicker (crazy hillbilly)(Posted 2012) [#27]
Awesome! Nice One Yasha! :D


azrak(Posted 2012) [#28]
@Yasha
createsprite() and createcanvas3d() dont work.


Yasha(Posted 2012) [#29]
CreateSprite does work, but by default it faces away from the camera and is only one-sided. Rotate it by 180 degrees or point it at the camera and it should appear. However, the UVs were wrong (and have been corrected).

I'll take a look at CreateCanvas3D in a bit - I'm not actually familiar with BlitzPlus' unique functions so I left that one more or less alone.

Thank you for testing bits and pieces!

(I should add a minor point about orientations and coordinates: +Z represents backwards movement, and all rotations are right-handed. This is because that's how OpenGL does it, and I saw no real profit in trying to make it look like DirectX just to be more like B3D, when it is not B3D: just be aware that the engine is an OpenGL one and treat it as such, and everything should work fine.)


azrak(Posted 2012) [#30]
I have changed v and uv order in createCube and createSprite,, please correct..

Function CreateCube()
Local m = CreateMesh(), v0, v1, v2, v3

v0 = AddVertex(m,-1, 1,-1, 0, 0) : VertexNormal m, v0, 0, 1, 0 ;Top
v1 = AddVertex(m,-1, 1, 1, 0, 1) : VertexNormal m, v1, 0, 1, 0
v2 = AddVertex(m, 1, 1, 1, 1, 1) : VertexNormal m, v2, 0, 1, 0
v3 = AddVertex(m, 1, 1,-1, 1, 0) : VertexNormal m, v3, 0, 1, 0
AddTriangle m, v0, v1, v2 : AddTriangle m, v0, v2, v3

v0 = AddVertex(m,-1,-1,-1, 0, 1) : VertexNormal m, v0, 0,-1, 0 ;Bottom
v1 = AddVertex(m,-1,-1, 1, 0, 0) : VertexNormal m, v1, 0,-1, 0
v2 = AddVertex(m, 1,-1, 1, 1, 0) : VertexNormal m, v2, 0,-1, 0
v3 = AddVertex(m, 1,-1,-1, 1, 1) : VertexNormal m, v3, 0,-1, 0
AddTriangle m, v0, v2, v1 : AddTriangle m, v0, v3, v2

v0 = AddVertex(m,-1, 1, 1, 1, 0) : VertexNormal m, v0,-1, 0, 0 ;Left
v1 = AddVertex(m,-1, 1,-1, 0, 0) : VertexNormal m, v1,-1, 0, 0
v2 = AddVertex(m,-1,-1,-1, 0, 1) : VertexNormal m, v2,-1, 0, 0
v3 = AddVertex(m,-1,-1, 1, 1, 1) : VertexNormal m, v3,-1, 0, 0
AddTriangle m, v0, v1, v2 : AddTriangle m, v0, v2, v3

v0 = AddVertex(m, 1, 1, 1, 0, 0) : VertexNormal m, v0, 1, 0, 0 ;Right
v1 = AddVertex(m, 1, 1,-1, 1, 0) : VertexNormal m, v1, 1, 0, 0
v2 = AddVertex(m, 1,-1,-1, 1, 1) : VertexNormal m, v2, 1, 0, 0
v3 = AddVertex(m, 1,-1, 1, 0, 1) : VertexNormal m, v3, 1, 0, 0
AddTriangle m, v0, v2, v1 : AddTriangle m, v0, v3, v2

v0 = AddVertex(m,-1, 1,-1, 0, 1) : VertexNormal m, v0, 0, 0,-1 ;Front
v1 = AddVertex(m, 1, 1,-1, 1, 1) : VertexNormal m, v1, 0, 0,-1
v2 = AddVertex(m, 1,-1,-1, 1, 0) : VertexNormal m, v2, 0, 0,-1
v3 = AddVertex(m,-1,-1,-1, 0, 0) : VertexNormal m, v3, 0, 0,-1
AddTriangle m, v0, v1, v2 : AddTriangle m, v0, v2, v3

v0 = AddVertex(m,-1, 1, 1, 0, 0) : VertexNormal m, v0, 0, 0, 1 ;Back
v1 = AddVertex(m, 1, 1, 1, 1, 0) : VertexNormal m, v1, 0, 0, 1
v2 = AddVertex(m, 1,-1, 1, 1, 1) : VertexNormal m, v2, 0, 0, 1
v3 = AddVertex(m,-1,-1, 1, 0, 1) : VertexNormal m, v3, 0, 0, 1


AddTriangle m, v0, v2, v1 : AddTriangle m, v0, v3, v2

Return m
End Function

Function CreateSprite()
Local m = CreateMesh()

; AddVertex m,-1, 1, 0, 1, 0 : VertexNormal m, 0, 0, 0,-1 ;Forward-facing
; AddVertex m, 1, 1, 0, 0, 0 : VertexNormal m, 1, 0, 0,-1
; AddVertex m, 1,-1, 0, 0, 1 : VertexNormal m, 2, 0, 0,-1
; AddVertex m,-1,-1, 0, 1, 1 : VertexNormal m, 3, 0, 0,-1

AddVertex m, -1, -1, 0, 0,1 ;x0,x1

VertexNormal m, 0, 0, 0,-1 ;1

AddVertex m, 1, -1, 0, 1,1 ;x1,x1

VertexNormal m, 1, 0, 0,-1 ;4

AddVertex m, 1, 1, 0, 1,0 ;x1,x0

VertexNormal m, 2, 0, 0,-1 ;6

AddVertex m, -1, 1, 0, 0,0 ;x0,x0

VertexNormal m, 3, 0, 0,-1 ;8

AddTriangle m, 0, 1, 2 : AddTriangle m, 0, 2, 3

Return m
End Function


Yasha(Posted 2012) [#31]
Both of those suggested changes are "wrong":

-- the change to CreateCube simply makes the front UVs upside down.

-- the change to CreateSprite makes it face backwards, which will make it invisible when pointed at the camera (in my version, just PointEntity sprite, EntityX(cam), EntityY(cam), EntityZ(cam) after the sprite is positioned, and it will work)


azrak(Posted 2012) [#32]
Ok..maybe the the camera look to negative Y.. thanks..

Example:


;[Block]
font1=LoadFont ("Arial",48,True)

AutoMidHandle True
image1=CreateImage (400,100,1)
SetBuffer ImageBuffer (image1,0)
ClsColor 0,0,64
Cls
SetFont font1
ClsColor 64,64,64
Rect 0,0,400,99,0
Text 200,50,"Press Escape ",1,1
;SaveBuffer(ImageBuffer (image1,0),"screenshot.bmp")
;[End Block]

Include "bOGL\bOGL.bb"

Graphics3D "bOGL", 800, 600, 32, 2

image3=Texture_FromBuffer (image1,8,1)

AmbientLight 255,255,255
Local light = CreateLight(222, 222, 222, BOGL_LIGHT_DIR)
PositionEntity light, 2, 6, -6
PointEntity light, 0, 0, -6


Local cam = CreateCamera()
CameraClsColor cam,0,0,64
PositionEntity cam, 0, 0, -14
rotateentity cam, 0,180,0
;Local texture2 = LoadTexture ("bOGL.png")

cube = CreateCube ()
PositionEntity cube, 0, 0, -8
EntityTexture cube, ( image3 )
ScaleEntity (cube , 1, .25, .25)
RotateEntity cube,0,180,0

Local sprite12 = CreateSprite()
ScaleEntity (sprite12 , 1, .25, 1)
PositionEntity sprite12, 0, 1, -10
EntityTexture sprite12, ( image3 )
;PointEntity sprite12, EntityX(cam), EntityY(cam), EntityZ(cam)
;RotateEntity sprite12,0,0,180

FreeTexture image3
FreeImage image1
;freetexture texture2
FreeFont font1

;[Block]
While Not KeyHit(1)

TurnEntity sprite12, 0.0, 0.6, 0.0
TurnEntity cube, 0.6, 0.0, 0.0

; Render world
RenderWorld()

; Swap the buffer the front buffer
SwapBuffers(bOGL_hMainDC)
glFinish

Delay 5
Wend
;[End Block]

End

Function Texture_FromBuffer(AImageBuffer, quality = 8, filter = 1)
; Local image = LoadImage(file) : If Not image Then Return False
If quality Then ResizeImage AImageBuffer, 2 ^ quality, 2 ^ quality

Local this.bOGL_Tex = New bOGL_Tex
this\width = ImageWidth(AImageBuffer)
this\height = ImageHeight(AImageBuffer)
this\rc = 1 : this\asVar = True
If filter <> 0 And filter <> 1 Then this\filter = 2 : Else this\filter = filter

Local imgBuffer = ImageBuffer( AImageBuffer ), imageBank = CreateBank(this\width * this\height * 3)

LockBuffer imgBuffer
Local y : For y = 0 To this\height - 1
Local offset = BankSize(imageBank) - (y + 1) * this\width * 3
Local x : For x = 0 To this\width - 1
Local pixel = ReadPixelFast(x, this\height - (y + 1), imgBuffer) ;OpenGL textures are "upside down"
PokeByte imageBank, offset, (pixel And $FF0000) Shr 16
PokeByte imageBank, offset + 1, (pixel And $FF00) Shr 8
PokeByte imageBank, offset + 2, pixel And $FF
offset = offset + 3
Next
Next
UnlockBuffer imgBuffer

; FreeImage image

glGenTextures 1, this
glBindTexture GL_TEXTURE_2D, this\glName

Select filter
Case 0 ; Nearest Filtered Texture
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, 3, this\width, this\height, 0, GL_RGB, GL_UNSIGNED_BYTE, imageBank
Case 1 ; Linear Filtered Texture
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, 3, this\width, this\height, 0, GL_RGB, GL_UNSIGNED_BYTE, imageBank
Default ; MipMapped Texture
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, 3, this\width, this\height, GL_RGB, GL_UNSIGNED_BYTE, imageBank
End Select

FreeBank imageBank
Return Handle this
End Function


Yasha(Posted 2012) [#33]
Heh, I did actually include an "UpdateTexture" command that does more or less that, but of course forgot to add a "CreateTexture" for you to use it on!

I've added CreateTexture to the command set, so you can have a much simpler time doing that now. Try this much more abstracted version, no glCommands or internal types needed:

Function Texture_FromBuffer(img, quality = 8, filter = 1)
	Local pixels = CreateBank(ImageWidth(img) * ImageHeight(img) * 4), buf = ImageBuffer(img), offset
	LockBuffer buf
	Local y : For y = 0 To ImageHeight(img) - 1
		Local x : For x = 0 To ImageWidth(img) - 1
			PokeInt pixels, offset, ReadPixelFast(x, y, buf)
			offset = offset + 4
		Next
	Next
	UnlockBuffer buf
	Local tex = CreateTexture(ImageWidth(img), ImageHeight(img), filter)
	UpdateTexture tex, 0, 0, ImageWidth(img), ImageHeight(img), pixels
	FreeBank pixels : Return tex
End Function


Thanks for the good idea!

Last edited 2012


Captain Wicker (crazy hillbilly)(Posted 2012) [#34]
LoadMesh functions would be nice. Keep going Yasha!!! :)


Yasha(Posted 2012) [#35]
LoadMesh is not something I was going to put into my version, for three main reasons:

1) A standard LoadMesh function wouldn't really be appropriate, because bOGL meshes have no surfaces (mesh = surface, 1:1). This doesn't mean a standard mesh can't be loaded, but it can't be loaded in a way that would be approriate for everybody's needs.

2) Not necessary: you can easily write one using only top-level commands (CreateMesh, AddVertex etc., as you would in B3D). My goals for my version of bOGL are to keep the library to a more or less bare minimum: it should stay one file and readable in one sitting.

3) It would be a great subject for an add-on library. I have this idea that bOGL itself could be limited to core functions, and then we could have things like "bOGL 2D" or "bOGL Anim", or in this case "bOGL Import", that can be included on top of it to provide non-core functionalities, without polluting the whole module or diluting its sense of purpose. Another great reason to keep non-essential stuff out of bOGL itself.


Captain Wicker (crazy hillbilly)(Posted 2012) [#36]
wasn't there an ogre wrapper for B+ at one time? I remember seeing something like that but not sure where.

EDIT: Here we are: http://code.google.com/p/bo3d/downloads/list
It is missing a lot of functionality or ease of use and needs some more work if you ask me, but it is quite usable.

Last edited 2012


azrak(Posted 2012) [#37]
bo3d is for b3d and need same work to convert for B+.

there are also one here http://www.blitzbasic.com/Community/posts.php?topic=89612

probleme with B+ is the realtime alpha rendering take Hi Processing and slow flush graphics.. :(


Yasha(Posted 2012) [#38]
Big update:

-- entity parent system
-- a very limited selection of entityFX
-- very easy stencil buffer control and rendering, sufficient for portals and shadows (well, it will be easy once there's documentation)
-- dynamic extensibility so addon modules don't have to conflict (i.e. "a bank")
-- grab backbuffer data
-- couple of major error fixes

https://github.com/Leushenko/bOGL-2


I think this is now big enough to make a new thread once I've managed to write up some documentation, and probably big enough to actually use. It's still under 1200 lines, and hopefully therefore still comprehensible in a single readthrough.

I do not intend to add any more features to my version (mesh loading/saving, animation, and 2D graphics are all great subject matter for "addon" include modules, and therefore will not appear in my version of the main engine).


Andres(Posted 2012) [#39]
darn, i tried to compile it, but it says : Function 'glcolormask_unsafe' not found in bogl.bb inside RenderWorld function. dont have time to debug it either :(


Andres(Posted 2012) [#40]
i must miss some lib


Yasha(Posted 2013) [#41]
The missing function was because I needed to make a change to the .decls, but foolishly didn't remember to copy my changes to the copies in the project folder so they weren't caught by Git. Sorry about that: it is fixed.

I never did write that documentation. Couldn't find a nice tool for writing HTML-ified API docs. Perhaps I should just do it by hand.

Last edited 2013


Yasha(Posted 2013) [#42]
Biiiiiiiiig update!

It gives me great pleasure to announce... bOGL version 2 is now ready for "release"!


New features since the last post:

-- support for loading meshes in OBJ, MD2, and custom BO3D format
-- support for saving meshes to OBJ format
-- support for MD2 animation playback
-- support for bone-based animation playback and boned meshes (from the custom format)
-- hardware-accelerated 2D graphics drawing and bitmap fonts (similar to Max2D/Draw3D/FastImage)
-- lots and lots of bugfixes

-- FULL DOCUMENTATION complete with clickable indexes (view it on GitHub, the download is just Markdown source), for both the core engine and all four official addon modules
-- example code for all extensions
-- still 100% pure BlitzPlus

...phew!

Find it here: https://github.com/Leushenko/bOGL-2


Remember, the documentation is best viewed on GitHub itself, because GitHub can render it as HTML with links. The command quick reference is also clickable.

The custom BO3D model format sounds scary, but it's really just a cut-down B3D (suitably reduced features for the bOGL engine), and you can convert appropriate B3D files with an included utility (Tools/bo3d_conv.bb).


Still to do:

-- 2D physics addon module
-- start thinking about a Max or Monkey port

I think this is now big enough for its own thread. I'll get on that.


Hezkore(Posted 2013) [#43]
Aw, no BlitzMax Module for it?


Yasha(Posted 2013) [#44]
Easily done if that's what people want. I will add "actually write it" to my to-do list, then.


Hezkore(Posted 2013) [#45]
I want Max Module plox! <3 \o/


jfk EO-11110(Posted 2013) [#46]
So let me get this straight.... If you port it for monkey, I could actually compile blitz3d code (or parts of it) for android, using the ogl renderer on my phone??
Well, that would be ... Wow!


Captain Wicker (crazy hillbilly)(Posted 2013) [#47]
You can already do that with minib3d for monkey..


jfk EO-11110(Posted 2013) [#48]
There's so much I missed, thanks. I see you live with asperger syndrom - how did you become aware of it. Wait, that's offtopic. ( I sometimes feel like I must be a borderline case or something. You could contact me over hanshuber008 ät yahoo.com that I check from time to time.)
Wait a sec - home of pacemaker... But you ain't Ricky?


Yasha(Posted 2013) [#49]
Indeed, miniB3D is probably closer to what you want (starting with the fact that it already exists for Monkey). bOGL is only "inspired by" B3D and doesn't have a perfectly compatible command set (e.g. it uses OpenGL coordinates and rotations which are "backwards" from the B3D perspective, has several renamed commands), nor does it have nearly as many commands.

It has precisely one pro (compared to miniB3D's long list of pros), which is that it's a very small piece of code. You can (supposedly) read through and understand it in a single sitting, whereas I found miniB3D quite hard to follow. That is the only advantage.

I guess that also means it's a lot easier to port, especially if I write Max and C versions, so it might be easier for it to be used across multiple languages, but that's a bit of a stretch (and mostly irrelevant when you're already thinking about writing in Monkey).


Yue(Posted 2013) [#50]
Hi, I can summarize that it is Bog??, Forgiveness not understand.