Blitz3D - what do you like, what not?

Started by Xaron, September 16, 2017, 09:37:06

Previous topic - Next topic

ms62

Blitz3D is good with Fast Libraries. It is limited to 3D. Yeah, I don't like field access with "\". PureBasic is like that too.

ms62

Why I like it?

It gets you to a working prototype faster than any program that exist.
Writing a 3D simulation is very easy with it, although it doesn't have double and long data type.

Features that are still rare today:

Entity system which includes Camera too, something you cannot find today.
Very useful 3D vector-matrix command set.
Very powerful and useful and simple 3D pivot implementation.
Community was the best in the world.
Many physics engines were available for it.
Great visual enhancement libraries were available for it.

What a waste!

Well, it doesn't have scene graph, but is scene-graph necessarily a good thing for everything? Ask Horde3D guys!

Yue

Simple, it still works great on Windows 10, and it looks like it will for a while.


RemiD

#18
What i like in Blitz3d :
-commands names which are similar to how a human think (similar to the english language too)
-freedom to code with the style you want. (i don't like oo, i prefer procedural imperative)
-compatible with most computers with Windows OS, and does not require to install others libraries / redistributables / codecs etc...
-i have access to almost everything i need, even the low level stuff
-i can use global variables, global arrays, goto line, to make the others programmers cringe :-*
-the compiled executables run rather fast (even if some things can be optimized)

What i don't like in Blitz3d :
-some bugs were never fixed (linepick sometimes fails on a ROAM terrain, weird behavior of buffers depending on which commands have been used before)
-some commands don't have an appropriate name
-some commands mix things which have nothing to do together (updateworld())
-some essential features were never added by BlitzResearch (possibility to create joints, to set the influence (weight) of some joints over some vertices, to get the skinned vertices positions, to only update the joints orientations/positions and the skinned vertices positions of one rigged skinned mesh, to disable bilinear filtering of textures, and i can probably find others)

Yue

Something to add, version 1106 I use for compatibility with fastlibs, if you look at true compatibility mode they have the ability to run compatibility from xp/vista/7/8 running on windows 10. The version compiled with visual studio 2017 has the option of compatibility from Windows 8.  In other words what I think is that Blitz3D will be around for a long time.

RemiD

#20
I am currently following a course about generating procedural meshes, and the "teacher" uses Unity and c# and i can tell you that the same concepts/things/procedures/commands which are simple in Blitz3d are complicated in Unity... Why ? Is this progress ? No !

peteswansen

I like everything also!  I am working on procedural terrain generation, "prebuilt" procedural "buildings" and trees, Space Exploration related sims, and a simple Minecraft-like game.

What I don't like is the method to make animated humans, animals, etc. I wish we had at the least: generic lo-poly human models (male & female) with walk, tool/weapon holding, sit-lie down and similar quadrapod animal animation routines---  BUILT IN TO the blitz command set.

RemiD

#22
@peteswansen>>if you plan to build rigged skinned meshes (with joints ("bones") and skinned vertices) so that you can animate them, you can't using the default commands of Blitz3d but you can if you add the addons by Bobysait (to create joints ("bones") in code, to set the influences (weights) of some joints over some vertices, to get the skinned vertices positions)
here : http://mojolabs.nz/posts.php?topic=105408


STEVIE G

I like ..

* Being able to access low level mesh information as I build alot of my own stuff in code.
* The entity system in general is excellent.
* It's lighting fast to get prototype's up and running and if you structure your code well, much larger games can be written in it.

I don't like:

* The original IDE - using IDEal is a must!
* Poor documentation - a Sibly trait it seems.
* Sound support is limited.
* DX7 and Windows only and possible future incompatibility.  Seems to be fine on Win10 - long may it continue.
* I've been passed up by publishers purely based on the language the game was written in.  They expect easy porting / compilation to other platforms I think.  I think there is a bit of industry snobbery when it comes to B3D.
* No native shadow system.   

I have AGK and need to spend some time with it but it looks like I can't build meshes in code etc.. I suppose I could build meshes in Blitz3d and write a function to export to a common format.

RemiD

#24
Quote
I have AGK and need to spend some time with it but it looks like I can't build meshes in code
@Stevie G>>really ? and what about images ? and textures ? and joints ? and animations ?

There must be a way to build meshes in code, because with the trend of customizing the characters/vehicles with different clothes/armors/weapons/accessories, you need to be able to load several premade parts and merge them in a few surfaces and one mesh...

STEVIE G

Quote from: RemiD on February 04, 2018, 17:31:16
Quote
I have AGK and need to spend some time with it but it looks like I can't build meshes in code
@Stevie G>>really ? and what about images ? and textures ? and joints ? and animations ?

There must be a way to build meshes in code, because with the trend of customizing the characters/vehicles with different clothes/armors/weapons/accessories, you need to be able to load several premade parts and merge them in a few surfaces and one mesh...

Like I said, I've only briefly looked at the command set:

https://www.appgamekit.com/documentation/home.html

Entities are Objects in AGK but there is no createobject, only createobjectfromheightmap and the usual, cube, cylinder etc.. 
There is no createbone but you can access bones on a created mesh.    Looks like you can also only create sprites/images from files loaded etc..

I may be wrong but looks pretty poor compared to what I'm used to.


Steve Elliott

#26
Quote
Looks like you can also only create sprites/images from files loaded

You really should look at the examples that come with AGK before making inaccurate statements.

I don't know about 3d features because I've not used that side of things.
Win11 64Gb 12th Gen Intel i9 12900K 3.2Ghz Nvidia RTX 3070Ti 8Gb
Win11 16Gb 12th Gen Intel i5 12450H 2Ghz Nvidia RTX 2050 8Gb
Win11  Pro 8Gb Celeron Intel UHD Graphics 600
Win10/Linux Mint 16Gb 4th Gen Intel i5 4570 3.2GHz, Nvidia GeForce GTX 1050 2Gb
macOS 32Gb Apple M2Max
pi5 8Gb
Spectrum Next 2Mb

Qube

QuoteLooks like you can also only create sprites/images from files loaded etc..
You can grab parts of the screen and you can also create sprites in memory using memblocks. You can also render to texture both sprites and movies.

Quotebut there is no createobject
Any of these commands of use? - looks like there are commands to manipulate and create meshes.

CreateObjectFromObjectMesh ( objID, fromObjID, meshIndex )
GetObjectMeshSizeMaxX ( objID, meshIndex )
GetObjectMeshSizeMaxY ( objID, meshIndex )
GetObjectMeshSizeMaxZ ( objID, meshIndex )
GetObjectMeshSizeMinX ( objID, meshIndex )
GetObjectMeshSizeMinY ( objID, meshIndex )
GetObjectMeshSizeMinZ ( objID, meshIndex )
SetObjectMeshNormalMapScale ( objID, meshIndex, scaleU, scaleV )
SetObjectMeshUVOffset ( objID, meshIndex, textureStage, offsetU, offsetV )
SetObjectMeshUVScale ( objID, meshIndex, textureStage, scaleU, scaleV )
AddObjectMeshFromMemblock ( objID, memID )
CreateMemblockFromObjectMesh ( objID, meshIndex )
CreateObjectFromMeshMemblock ( memID )
GetMeshMemblockVertexAlpha ( memID, vertexIndex )
GetMeshMemblockVertexBlue ( memID, vertexIndex )
GetMeshMemblockVertexGreen ( memID, vertexIndex )
GetMeshMemblockVertexNormalX ( memID, vertexIndex )
GetMeshMemblockVertexNormalY ( memID, vertexIndex )
GetMeshMemblockVertexNormalZ ( memID, vertexIndex )
GetMeshMemblockVertexRed ( memID, vertexIndex )
GetMeshMemblockVertexU ( memID, vertexIndex )
GetMeshMemblockVertexV ( memID, vertexIndex )
GetMeshMemblockVertexX ( memID, vertexIndex )
GetMeshMemblockVertexY ( memID, vertexIndex )
GetMeshMemblockVertexZ ( memID, vertexIndex )
SetMeshMemblockVertexColor ( memID, vertexIndex, red, green, blue, alpha )
SetMeshMemblockVertexNormal ( memID, vertexIndex, x, y, z )
SetMeshMemblockVertexPosition ( memID, vertexIndex, x, y, z )
SetMeshMemblockVertexUV ( memID, vertexIndex, u, v )
SetObjectMeshFromMemblock ( objID, meshIndex, memID )
GetObjectMeshName ( objID, meshIndex )
GetObjectMeshPSSource ( objID, meshIndex )
GetObjectMeshVSSource ( objID, meshIndex )
GetObjectNumMeshes ( objID )
SetObjectMeshImage ( objID, meshIndex, imageID, textureStage )
SetObjectMeshLightMap ( objID, meshIndex, imageID )
SetObjectMeshNormalMap ( objID, meshIndex, imageID )
SetObjectMeshShader ( objID, meshIndex, shaderID )
Mac Studio M1 Max ( 10 core CPU - 24 core GPU ), 32GB LPDDR5, 512GB SSD,
Beelink SER7 Mini Gaming PC, Ryzen 7 7840HS 8-Core 16-Thread 5.1GHz Processor, 32G DDR5 RAM 1T PCIe 4.0 SSD
MSI MEG 342C 34" QD-OLED Monitor

Until the next time.

STEVIE G

Quote from: Steve Elliott on February 04, 2018, 18:39:35
Quote
Looks like you can also only create sprites/images from files loaded

You really should look at the examples that come with AGK before making inaccurate statements.

I don't know about 3d features because I've not used that side of things.

Like I said - I may be wrong but should not have jumped to conclusions after a quick schoofty. 

So you and Qube are using AGK - excellent - how do you find it in general and syntax wise?

Quote from: Qube on February 04, 2018, 18:56:41
QuoteLooks like you can also only create sprites/images from files loaded etc..
You can grab parts of the screen and you can also create sprites in memory using memblocks. You can also render to texture both sprites and movies.

Quotebut there is no createobject
Any of these commands of use? - looks like there are commands to manipulate and create meshes.

CreateObjectFromObjectMesh ( objID, fromObjID, meshIndex )
GetObjectMeshSizeMaxX ( objID, meshIndex )
GetObjectMeshSizeMaxY ( objID, meshIndex )
GetObjectMeshSizeMaxZ ( objID, meshIndex )
GetObjectMeshSizeMinX ( objID, meshIndex )
GetObjectMeshSizeMinY ( objID, meshIndex )
GetObjectMeshSizeMinZ ( objID, meshIndex )
SetObjectMeshNormalMapScale ( objID, meshIndex, scaleU, scaleV )
SetObjectMeshUVOffset ( objID, meshIndex, textureStage, offsetU, offsetV )
SetObjectMeshUVScale ( objID, meshIndex, textureStage, scaleU, scaleV )
AddObjectMeshFromMemblock ( objID, memID )
CreateMemblockFromObjectMesh ( objID, meshIndex )
CreateObjectFromMeshMemblock ( memID )
GetMeshMemblockVertexAlpha ( memID, vertexIndex )
GetMeshMemblockVertexBlue ( memID, vertexIndex )
GetMeshMemblockVertexGreen ( memID, vertexIndex )
GetMeshMemblockVertexNormalX ( memID, vertexIndex )
GetMeshMemblockVertexNormalY ( memID, vertexIndex )
GetMeshMemblockVertexNormalZ ( memID, vertexIndex )
GetMeshMemblockVertexRed ( memID, vertexIndex )
GetMeshMemblockVertexU ( memID, vertexIndex )
GetMeshMemblockVertexV ( memID, vertexIndex )
GetMeshMemblockVertexX ( memID, vertexIndex )
GetMeshMemblockVertexY ( memID, vertexIndex )
GetMeshMemblockVertexZ ( memID, vertexIndex )
SetMeshMemblockVertexColor ( memID, vertexIndex, red, green, blue, alpha )
SetMeshMemblockVertexNormal ( memID, vertexIndex, x, y, z )
SetMeshMemblockVertexPosition ( memID, vertexIndex, x, y, z )
SetMeshMemblockVertexUV ( memID, vertexIndex, u, v )
SetObjectMeshFromMemblock ( objID, meshIndex, memID )
GetObjectMeshName ( objID, meshIndex )
GetObjectMeshPSSource ( objID, meshIndex )
GetObjectMeshVSSource ( objID, meshIndex )
GetObjectNumMeshes ( objID )
SetObjectMeshImage ( objID, meshIndex, imageID, textureStage )
SetObjectMeshLightMap ( objID, meshIndex, imageID )
SetObjectMeshNormalMap ( objID, meshIndex, imageID )
SetObjectMeshShader ( objID, meshIndex, shaderID )

Looks like the very chaps - thanks Qube.


Qube

QuoteSo you and Qube are using AGK - excellent - how do you find it in general and syntax wise?
Overall I really like it and it's put the fun back into coding. The language isn't to everyones tastes, especially if you are strictly an OO or die kinda coder. It doesn't have any zippy flippy language gymnastics features like Monkey 1 & 2 have but then again, I've never needed one of those funky methods to make a game.

I like that it has built in support for TexturePacker ( big time saver ) and the broadcast system for testing on mobile is a God send ( no need to faff about with certificates ), just broadcast and it's on your phone / tablet in a few seconds. It also has built in support for Spriter and Spine + tones of other stuff like 2D & 3D physics, tweening, networking, files, 2D & 3D particles. Plus the documentation is not too bad either. 

It can be a bit odd in places, for example there are two methods for drawing on screen. A percentage system and the X / Y coor system. If you want to use the X / Y system then you need to set the virtual resolution beforehand. No big deal, I just found it odd having two draw systems.

Lists are also a little harder to setup than in Blitz3D as in you create a type and then you create an array of the type and use that. Couple more lines of code but hey ho.

Mac Studio M1 Max ( 10 core CPU - 24 core GPU ), 32GB LPDDR5, 512GB SSD,
Beelink SER7 Mini Gaming PC, Ryzen 7 7840HS 8-Core 16-Thread 5.1GHz Processor, 32G DDR5 RAM 1T PCIe 4.0 SSD
MSI MEG 342C 34" QD-OLED Monitor

Until the next time.