General Max3D Topic

Miscellaneous Forums/General Discussion/General Max3D Topic

I'm continuing from this thread here, since the other one got a bit long and I started calling you all insane. You're all still insane, but perhaps you'll be more likely to think of good reasons for what you're saying. My good reason for calling you insane is the contents of this thread.

A few topics worth talking about, if it concerns you:

# The use of Subversion as a distribution method for the initial development of Max3D. So far, there's a few people disagreeing with the use of this, I personally am one of them just because I prefer Git, but I can use Git to mask Subversion's annoyances, so I'm good regardless. Some folks cite difficulty using Subversion, I ask you what's difficult about typing this?
svn co svn://url.to.repo/ name

# The use of C/C++ as the main language. Apparently there are people who do not know how to build C/C++ projects, and I'm sure there will be tutorials for you. If your concern is about it not being written in BMax, why? I think C/C++ is a better language for the engine since it makes it easier to create bindings for different languages, including BMax.

# Prefixing various constructs in Max3D with 'm3d' is apparently an issue. I personally think this is a silly thing to concern yourself about, but whatever. You should refer to BlitzSupport's post here regarding that.

# Lack of an object-oriented interface. I don't know if this is confirmed or not, but I think it may be the case. This is more of a style issue, so try to be careful about this one lest you look like a muppet. I don't think it matters, I would rather have a procedural interface and write my own OO interface that fits my project rather than trying to make it work with Max3D's interface.

# The license is/was an issue with the LGPL. Given the switch to the BSD license, you're pretty much given the freedom to do whatever you want with the code (within the terms of the very loose license). Not sure if this is still a worthwhile topic, but I'm including it.

Anything I'm missing that's of particular importance to folks? Also, happy new year, particularly to those of you who are way behind UTC.

Seb, if you think it's better to just end discussion of Max3D for the time being, just kill this thread. Just figured I'd start one after the bit you had at the end of the last.

You're all still insane, but perhaps you'll be more likely to think of good reasons for what you're saying.

First!

First!
....

I don't mind SVN, C++, the license, or even the prepend. OO-ing it should be fairly easy anyways, but I definitely don't like the use of strings to set options for the engine (http://www.blitzbasic.com/Community/posts.php?topic=82150#928834).

I don't mind SVN, C++, the license, or even the prepend. OO-ing it should be fairly easy anyways, but I definitely don't like the use of strings to set options for the engine (http://www.blitzbasic.com/Community/posts.php?topic=82150#928834).
I agree, but considering this seems to only be used during the engine's initialization (I don't see it occurring elsewhere in the minor example), I don't think it's much of an issue. Beats calling two dozen functions before Init, considering init would ideally init most everything you want the way you want it with this.

What happened to good old bit flags?

The whole point of BlitzMax is offering an easy way for people coming up with something which they otherwise wouldn't be able to/fond of due to different reasons.

Again BlitzMax has a wonderful focus on simplicity and readability of code combined with a fancy touch into the game development direction. It has far less features than other tools but still it's somehow round and the simplicity of it's usage is what makes BlitzMax shine. Now if you don't develop the tool carefully with keeping this in mind, regarding the distribution of itself or it's modules, the syntax, new methods and concepts you're giving up one of the best arguments for using BlitzMax.

All the talk about that people can't deal with something more complex is complete nonsense because that's not the main reason. The point is why would you like to make your life harder and coding less beautiful. There is a big difference between just offering something which works and offering something which also is accessible in a beautiful and easy way.

If you're just interested in a working solution i guess there are far better solutions around already and if you can deal with C++, C# or whatever then why not use it?! Personally, although i could, that's simply not what i'm looking for in BlitzMax and it contradicts the purpose of BlitzMax in my opinion and i think i'm not alone here.

I would love to see BlitzMax following it's tradition and getting less a nerd toy.

Now please relate that to Max3D.

I dont' want to offend anyone, but...
...I missed the point of this (and many others 3dmax) thread: we are discussing (again) on a 'phantom' 3d engine. No one has seen it, none has tested it (excluding Skidracer and beta testers?).
We have seen only a snap-shot of a little example - and the focus is on the syntax (!) - and none asked for the 'features' of the engine itself (the MOST importa thing...) - we have seen ONLY ONE screenshot (a flat cube...).

Ok, Well...I leave you discussing about your concerns....And Happy New Year!

The use of strings, are you sure they're strings? I mean, it looks like a script to me. Wich could open the door to many interesting config options.

To which definition of insanity do you refer? There are 4 listed on wiki. I would like this clarified to know where I stand.

1. Exhibiting unsoundness or disorder of mind; not sane; mad; deranged in mind; delirious; distracted.
2. Used by, or appropriated to, insane persons; as, an insane hospital.
3. Causing insanity or madness.
4. Characterized by insanity or the utmost folly; chimerical; unpractical; as, an insane plan, attempt, etc.


-I only really have an aversion to subversion simply because i like stable web page released updates. Not because i think its complicated or any more difficult than downloading from the site (i use it at work anyway). I think its more because i look to the site for blitz general news that an update exists. As far as I am aware the software is still at version 1.30.

-the M3D thing would be a little irritating but no biggie as it could be assigned to a hotkey. What would be nicer is if mark added namespaces to max so you can "Using m3d"

-Well c/c++ isnt really the 'main language' for the end user anyway, its more like an objective blitz3d in syntax and feel. Still, I would rather see c/c++ be the 'under the hood' language than something slower like C#, java etc.

-i dont care weather its oop or not, neither are dfficult to learn. Personally i would prefer a procedural interface. That way if i want oop i can just write my own sub interface to manage it myself.

-I dont give a stuff what licence it uses as long as i can sell what i make, keep my bits closed and distribute the required lib with my product.

Well you're right that I'm insane but I don't agree that lack of object orientation is a style issue. To be fair, you do say that a lack of an object oriented interface is a style issue, and that's true. The real issue is whether the engine is object oriented, not if it comes with an object oriented interface.

It's pretty much impossible to discuss Max3D specifics, because the vast majority of us have nothing but a tiny code example to go on. So the nearest we have is Max2D. Max2D doesn't have an object oriented interface, but it isn't object oriented in the first place. Writing an interface for it wouldn't change anything, it's about the functionality. The only "object" ( in quotes because it's a figurative object, not a literal one) in Max2D is a RenderState manager. No objects have any renderstates of their own, that's down to you. Now you could write your own objects, and give them all these states, but here's where the important part of not being object oriented comes in.

If your objects don't have those renderstates, everything that goes with that is up to you too. That is to say, things like alphasorting, an inbuilt tweening system, just to name a couple of examples, cannot be part of Max2D either. So it's not just writing an OO interface, it's about all the functionality that cannot exist without OO.

Now it may be that Max3D is object oriented, but just lacks the interface. It may be that it's not OO at all, but even Blitz3D is somewhat OO, despite lacking an OO interface, so that's unlikely. But it may be that it's somewhere in the middle like Blitz3D was.

So I don't think it's a non-issue at all. I've been working a lot with TV3D and it annoys me that a couple of the classes are not really object oriented. Lights, in particular, cannot be treated like all other entities, and that presents a problem when you try to force an OO interface onto it. Sure you can dress things up with types and methods, but there's a lot more to object orientation than window dressing. If objects are not built the right way in the first place, you're going to have a hell of a job trying to get them to inherit from a common base object later.

I smell 87 commands of immense power nearly ready for scoffing...

InitMax3D(importer:Byte Ptr)
UseDegrees()
UseRadians()
RetainResource(obj%)
ReleaseResource(obj%)
BlackTexture%()
WhiteTexture%()
CreateTexture%(width%,height%,format%,flags%)
SetTexturePath(texture%,path$z)
SetTextureData(texture%,data:Byte Ptr)
Create3dTexture%(width%,height%,depth%,format%,flags%)
Set3dTextureData(texture%,data:Byte Ptr)
CreateCubeTexture%(size%,format%,flags%)
SetCubeTextureData(texture%,data:Byte Ptr)
CreateShader%(source$z)
CreateMaterial%()
SetMaterialFloat(material%,name$z,value#)
SetMaterialColor(material%,name$z,red#,green#,blue#)
SetMaterialTexture(material%,name$z,texture%)
CreateSurface%()
SetSurfaceShader(surface%,shader%)
SurfaceShader%(surface%)
SetSurfaceMaterial(surface%,material%)
SurfaceMaterial%(surface%)
AddSurfaceVertex(surface%,x#,y#,z#,s0#,t0#)
AddSurfaceTriangle(surface%,vertex0%,vertex1%,vertex2%)
DestroyEntity(entity%)
CopyEntity%(entity%)
ShowEntity(entity%)
HideEntity(entity%)
SetEntityParent(entity%,parent%)
SetEntityTranslation(entity%,x#,y#,z#)
SetEntityRotation(entity%,yaw#,pitch#,roll#)
SetEntityScale(entity%,x#,y#,z#)
MoveEntity(entity%,x#,y#,z#)
TurnEntity(entity%,yaw#,pitch#,roll#)
EntityX#(entity%)
EntityY#(entity%)
EntityZ#(entity%)
LoadModel%(path$z,collType%,mass#)
CreateModel%()
CreateSphere%(material%,radius#,collType%,mass#)
CreateCapsule%(material%,radius#,length#,collType%,mass#)
CreateCylinder%(material%,radius#,length#,collType%,mass#)
CreateBox%(material%,width#,height#,depth#,collType%,mass#)
AddModelSurface(model%,surface%)
UpdateModelNormals(model%)
UpdateModelTangents(model%)
ScaleModelTexCoords(model%,s_scale#,t_scale#)
ResetModelTransform(model%)
FlipModel(model%)
CreatePivot%()
CreateCamera%()
SetCameraViewport(camera%,x%,y%,width%,height%)
CreateSpotLight%()
CreatePointLight%()
CreateDistantLight%()
SetLightAngle(light%,angle#)
SetLightRange(light%,range#)
SetLightColor(light%,red#,green#,blue#)
SetLightTexture(light%,texture%)
SetLightShadowBufferSize(light%,size%)
CreateSprite%(material%)
CreateTerrain%(material%,xsize%,zsize%,width#,height#,depth#)
SetTerrainHeight(terrain%,height#,x%,z%)
CreateMirror%()
SetMirrorSize(mirror%,width#,height#)
SetMirrorResolution(mirror%,width%,height%)
CreateSphereBody(entity%,radius#,collType%,mass#)
CreateCapsuleBody(entity%,radius#,length#,collType%,mass#)
CreateCylinderBody(entity%,radius#,length#,collType%,mass#)
CreateBoxBody(entity%,width#,height#,depth#,collType%,mass#)
CreateSurfaceBody(entity%,surface%,collType%,mass#)
CreateModelBody(entity%,model%,collType%,mass#)
CreateTerrainBody(entity%,terrain%,collType%,mass#)
CreateBallJoint(entity%,body1%,body2%)
CreateAnimator(entity%)
SetAnimationKey(entity%,seq%,time#,keyEntity%,flags%)
SetAnimatorTime(entity%,seq%,time#)
EnableShadows()
DisableShadows()
EnableCollisions(collType1%,collType2%,friction#,bounciness#,stiffness#)
SetGravity(x#,y#,z#)
SetClearColor(r#,g#,b#)
SetAmbientColor(r#,g#,b#)
UpdateWorld()
RenderWorld()



I wish I could smell as well as Skidracer... ;)

Will happy to buy this module when it comes out.

The big news is (I think) Mark won't be financially exploiting / documenting Max3D on release.

what does that mean? It will be free and undocumented?

Yes and yes.

I would envisage that a rich layer of documentation and samples emerge from a community eager to pay for the treats that have been bestowed.

I personally think it's far more important that Sibly gets his game on, although if he keeps talking about adventures maybe I shouldn't be that excited about the coming year...

to pop back to the subversion discussion thingy, more accessible=more users and is that not the ethos Blitz kind of comes from. I for one reason or another (I am an indie coder....) love the downloadable updates without the necessity for subversion. I do have tortoise subversion - but i think the masses apprecaite simplicity. my 2 bob/10 pence/5 cents...

So, if this is all finished, will "Sibly" start work on my Blitz3D v2?

Talking to max3d from blitz3d should be possible. Naming the .decl file blitz3dv2 is up to you.

I think that if its open source, 'free' and 'undocumented' are also good. I don't think the Blitz3D veterans (or 3D veterans in general) will have any trouble finding their feet with it.

I'm getting a small whiff... nay... its an aroma.... of built-in physics with some of those functions/parameters??!

There seems to me to be quite a bit `missing` from the above list of commands - either features that are so integrated they're hidden behind the scenes, or the engine is a bit on the generic side? Hopefully it's the former, ie there's lots of power under the hood and no need for programmers to mess with it. For example I don't see things like easy-to-define shader programs, spooling of large meshes/landscapes from disk, much in the way of landscape sculpting tools, animation features, a 3d particle system, etc? I guess we'll see.

For example I don't see things like easy-to-define shader programs

Or indeed the ability to do something really simple like set a shader constant.

@Noel Cower
What's valid for BlitzMax should be valid for Max3D as well.

Ahhh interesting to see the commands.

So basically to do something like the demo Mark showed a while ago of a spaceship with some kind of displacement mapping shaders, you'd have to go write your own shader in GLSL (or get one from somewhere) and pass it in as a string? There's no other useful interface or Blitz-like shading language or anything?

shader complexity = types of lighting * type of shadows * type of texturing * type of level of detail

max3d comes with a nice starter set and I think it would be foolish to think the technology itself can be simplified down and am glad Mark hasn't attempted to do so.


Incbin "max3d/blur.glsl"
Incbin "max3d/clear.glsl"
Incbin "max3d/distantlight.glsl"
Incbin "max3d/material.glsl"
Incbin "max3d/mesh.direct.glsl"
Incbin "max3d/mesh.glsl"
Incbin "max3d/mirror.glsl"
Incbin "max3d/model.glsl"
Incbin "max3d/pointlight.glsl"
Incbin "max3d/quad.glsl"
Incbin "max3d/shadowmap.glsl"
Incbin "max3d/spotlight.glsl"
Incbin "max3d/sprite.direct.glsl"
Incbin "max3d/sprite.glsl"
Incbin "max3d/terrain.glsl"
Incbin "max3d/tonemap.glsl"



yes it is OpenGL based,

yes it does need bleeding edge shader technology,

no it's not fantastically simplified,

yes it does seem that after 4 iterations of shader technology it's time to invest

no it won't run on 2007 consumer hardware

yes linux is fastest

yes it is free

yes it is most exciting release since Blitz3D for ultra simple game dev

yes ODE physics do help to power the above command set

Ah, Skid did post meanwhile I was typing.

Feeling a bit more optimistic now.

That looks exciting.

I would change the SetEntityParent, SetEntityTranslation, SetEntityRotation, SetEntityScale commands to ParentEntity, TranslateEntity, RotateEntity, ScaleEntity. There is also a MoveEntity, TurnEntity command, and they're not called SetEntityMove, SetEntityTurn.

It should be very simple to remember all commands: always verb+object to set the value, and object+verb to get the value.

Clearly one is referring to properties with implicit modification in state while the other is performing an action where state change is not implicit.


no it won't run on 2007 consumer hardware



Ahem, my 2006-era Geforce 7600 GS runs it! OK, the more complex stuff isn't quick, but still...

(That said, I think people ought to bear in mind that this is a ~"0.1" release before complaining about a lack of features.)

the more complex stuff isn't quick
What stuff is classed as 'more complex'?

Talking to max3d from blitz3d should be possible. Naming the .decl file blitz3dv2 is up to you.


LOL, Thats the best news i've read so far :)

hmm 7600 is a new card in my books, should run well on at least a 6 series card, and hopefully scale down to Geforce 3 era or older (assuming it does fixed function materials like B3D's not just shaders_)

My nVidia 6600 runs it too...

I dont really mind about the prefix or how commands are named or svn issues. It's just really nice to see this actually happening so I'm not going to quibble over small details.

Many thanks to Mark and BRL.

Talking to max3d from blitz3d should be possible.


You the KING.

Yeah I have Max, and will use it... but that's not the point.