Page 1 of 5 123 ... LastLast
Results 1 to 10 of 44

Thread: Linux Game Development and a Qt Developers Rage

  1. #1
    Join Date
    Jun 2011
    Posts
    267

    Default Linux Game Development and a Qt Developers Rage

    This is in response to http://phoronix.com/forums/showthrea...Book-Pro/page3

    Quote Originally Posted by uid313
    What is that?
    Where can I find more information about it?

    First off I have been a Linux developer for as long as it has publicly existed Gtk "8 years" and Qt "to date" I am only pointing
    this out for when you ask your self is this possible to pull off?

    So what is this LiquidPixel thing!!!! Well its a Software Development Toolkit used to build applications like ..

    Photoshop or Gimp, Illustrator or Inkscape, Premiere, Audacity, Unity 3D,
    AfterEffects or NukeX, Mudbox or Mari, MotionBuilder, Milkshape 3D

    Using Qt.

    I know what your thinking GTFO not possible. Just hold on there and let me explain for a minute....

    The thing is not only is this possible but has been for quite a few years now, the only thing thats blocking us from having the type of
    application I just described is "Politics" and "Compromise" in the Linux community. We could literally end Microsoft, Apple, Oracle,
    Autodesk, The Foundry, Adobe, Unity3D ... In a years time "IF....IF" we would all just work together. But we are not going to and we
    won't do purely to "Politics" and "Compromise".


    The reason this thing is in toolkit form is because it seriously violates the GPL in a big way as a single application.


    The solution was to build it in toolkit form, with each plugin implementing a particular feature, none of which on there own would
    land me in any legal trouble. The application you see below is what you get, other than that you have to download all plugins via
    its embedded bittorrent client, thats setup to look kinda like an app store.

    Consequently I ended up in a "KISS", "Make Small Incremental Improvements/Commit Frequently" and "Do one thing and do it well" type situation.

    The 3D view you see below is code forked from an old Qt MilkeShape 3D clone called "Misfit Model 3D" that was abandoned years and years ago, we got the application to
    compile under Qt 4.8 and then ripped it piece by piece into Plugin form.

    So what you get is a Milkshape 3d plugin that can talk to and interact with every other plugin installed. "Note" We are using Embedded Lua in this Demo"




    Image Editing Filters The first place I started was with GraphicsMagick (MagickCore and Magick++) as it was the easiest to start with,
    combined with what apis I had there I also read the ImageMagick "scripting" page? And was able to figure out what functions I could combine to create
    other cool filters and effects. Naturally I ended up with just about every filter and effect both photoshop and gimp offered out of the box. But in plugin form!! Yaaaa.

    The cool thing is all you have to do is expose whatever library your wanting to implement as a plugin, and then using PythonQt add in the logic or you could just use C++

    Plane Qt Widget Example

    C++ Code
    Code:
        PythonQt::init(PythonQt::RedirectStdOut);
        PythonQtObjectPtr mainModule = PythonQt::self()->getMainModule();
    
        mainModule.addObject("minSatSlider", ui->minSatSlider);
        mainModule.evalFile(":colorPlugin.py");
    Python Code "colorPlugin.py"
    Code:
       minSatSlider.setValue(50)
    I took the Milkeshape 3D clone plugin and started working on adding OpenMesh for working with triangles. Here is what OpenMesh can do for "subdivision"
    ...
    Note: Only OpenMesh standard demos are shown.






    From there I started working on Projection Painting using a makehuman model... Note this is using Ptex and wouldnt for for Games

    Last edited by zester; 05-14-2013 at 11:40 PM.

  2. #2
    Join Date
    Jun 2011
    Posts
    267

    Default

    Lastly In regards to a Game Development Plugin we have "Horde3D, Bullet, Fmod, ..." Note at the time I used Lua for scripting I have to
    move this to Python but the Qt Widget/Plugin it done for the Renderer.

    Here is what the Lua code looked like
    Code:
    -- Create Window Object
    win = Window()
    win:init()
    win:openWindow(800, 600, 8, 8, 8, 8, 24, 0, 0) -- Open Window, Set Max Colors, Alpha, Depth, Stencel 
    win:setWindowTitle("Hydra Example v0.0.1a") -- Set Window Title
    win:clearColor(0.50, 0.0, 0.0, 1.0) -- Set Window RGBA background color
    
    -- Create GraphicsEngine Object
    graphics = GraphicsEngine()
    graphics:init()
    
    graphics:setOption(7, 1)
    graphics:setOption(5, 0)
    graphics:setOption(8, 0)
    graphics:setOption(4, 4)
    graphics:setOption(9, 2048)
    
    forwardPipeRes = graphics:addResource(9, "pipelines/forward.pipeline.xml", 0)
    knightres = graphics:addResource(1, "models/knight/knight.scene.xml", 0)
    logoMatRes = graphics:addResource(4,  "overlays/logo.material.xml", 0) 
    lightMatRes = graphics:addResource(4,  "materials/light.material.xml", 0) 
    envRes = graphics:addResource(1,  "models/platform/platform.scene.xml", 0) 
    skyBoxRes = graphics:addResource(1,  "models/skybox/skybox.scene.xml", 0) 
    
    graphics:loadResourcesFromDisk("../content") 
    
    cam = graphics:addCameraNode(1, "Camera", forwardPipeRes)
    graphics:setNodeTransform( cam, 10, 50, 200, 0, 0, 0, 1, 1, 1 )
    
    env = graphics:addNodes(1, envRes)
    graphics:setNodeTransform(env, 0, 0, 0, 0, 0, 0, 5, 5, 5)
    
    sky = graphics:addNodes(1, skyBoxRes)
    graphics:setNodeTransform(sky, 0, 0, 0, 2, 2, 2, 500, 500, 500)
    graphics:setNodeFlags( sky, 2, true )
    
    knight = graphics:addNodes(1, knightres )
    graphics:setNodeTransform( knight,  0, 0, 40, 0, 0, 0, 1, 1, 1 )
    
    light = graphics:addLightNode(1, "Light1", lightMatRes, "LIGHTING", "SHADOWMAP" )
    graphics:setNodeTransform( light, 0, 100, 50, -30, 0, 0, 10, 10, 10 )
    graphics:setNodeParamF( light, 501, 0, 200 )
    graphics:setNodeParamF( light, 502, 0, 90 )
    graphics:setNodeParamI( light, 505, 3 )
    graphics:setNodeParamF( light, 506, 0, 0.9 )
    graphics:setNodeParamF( light, 507, 0, 0.001 )
    graphics:setNodeParamF( light, 503, 0, 0.9 )
    graphics:setNodeParamF( light, 503, 1, 0.7 )
    graphics:setNodeParamF( light, 503, 2, 0.75 )
    
    graphics:setNodeParamI( cam, 609, 0 );
    graphics:setNodeParamI( cam, 610, 0 );
    graphics:setNodeParamI( cam, 611, 800 );
    graphics:setNodeParamI( cam, 612, 600 );
    graphics:setupCameraView(cam, 45.0, 800 / 600, 0.5, 2048.0);
    graphics:resizePipelineBuffers( forwardPipeRes, 800, 600 );
    
    
    -- Create 3D Sound Object
    sound = Sound()
    sound:init() -- Initalize it
    sound:createSound("../content/sounds/Scoldt-From_My_Guts.mp3") -- Load Music File
    sound:setMode(0) -- Set Mode
    sound:play() -- Play Music
    sound:upDateSystem() -- Update Sound System
    
    -- Create Network Client Object
    networkClient = NetworkClient()
    networkClient:init("testgame","1") -- Initalize it
    networkClient:setAddress("81.168.26.50") -- Set Network Address
    
    -- Start Game Loop
    i = 0
    while i == 0 do
    	win:clear(0) -- Clear Window
    
    	i = win:getKey(257) or win:getWindowParam(0) -- Get ESC and Window Close Button Click
    
    	-- Rendering code goes here --
    	graphics:render( cam )
    	graphics:finalizeFrame()
    	graphics:clearOverlays()
    
    	win:swapBuffers() -- Swap Graphic Buffers
    end
    Here is a screenshot of the above lua script running.


    Here are some screenshots of General Horde3D, Bullet Physics and Terrain Plugins. For those who have never seen Horde3D before




  3. #3
    Join Date
    May 2011
    Posts
    1,615

    Default

    Certainly looks interesting.

    Hit me up if you ever need any help. I've got time on my hands.

    Maybe a demo is in order?

  4. #4
    Join Date
    Jun 2011
    Posts
    267

    Default

    Quote Originally Posted by johnc View Post
    Certainly looks interesting.

    Hit me up if you ever need any help. I've got time on my hands.

    Maybe a demo is in order?
    Sure I just have to clean it up, right now i am have a nameing situation going on ...

    mainModule.addObject("checkbox", ui->checkBox);
    mainModule.addObject("nextButton", ui->nextButton);
    mainModule.addObject("backButton", ui->backButton);
    mainModule.addObject("stackedWidget", ui->stackedWidget);

    etc except 100 times worse lol.

  5. #5
    Join Date
    Jun 2011
    Posts
    267

    Default

    Now another plugin I want to add, this might be above my capabilities but being this thing is designed to eat plugins to add capabilities, even if I get primitives and shaders working someone else might be able to add in a sculpting tool or two or 10. Or some seriously Houdini like particle effects. Anyways ....

    http://pointclouds.org/

    Voxel Sculpting

    These are not dense at all but it show what Point Clouds are.


    Checkout 3DCoat to see what I am talking about
    http://3d-coat.com/


    I wonder if Point Clouds, FFTW, Bullet and some shaders would be a good start for a RealFlow like Plugin?
    Last edited by zester; 05-14-2013 at 11:58 PM.

  6. #6

    Default Where are you hosting your code at?

    What is the website for your liquid pixels?

  7. #7
    Join Date
    Jun 2011
    Posts
    267

    Default

    Quote Originally Posted by halfmanhalfamazing View Post
    What is the website for your liquid pixels?
    I don't have one yet its code base needs to be cleaned up and I have to group the plugins as there are some that implement a particular feature but are useless without
    its relating plugins "NLE Video Editing in Particular" parts of the "3D Game Modeler" etc so I will have to group the ones that are ready and offer some form of complete functionality
    and then store the ones that need companion plugins on github.

    Ill let you know, just need to do some cleaning, as of right now its a mess. The point really wasn't the Application it self but the plugins, because they can be taken and used to
    develop other standalone Qt projects and easily maintained and extended.

    Here is a video we made of an animated wallpaper for an experimental QML based desktop environment a couple of years ago using the same Swirl plugin.
    http://zester.googlecode.com/files/out-1.ogv

    I like this particular plugin, because if you were making a movie with a space scene, I think this plugin would be good for some kind of crazy space distortion.
    or even water swirling down a drain effect?

    Example: This is a gwenview clone done in Qt only we are using the GraphicsMagick swirl plugin.

    and


    Here is one of the Swirl then Wave plugins Note: Sorry for small pic, its a older screenshot and this was the thumbnail the larger one was removed from tinypic for some reason.
    Last edited by zester; 05-15-2013 at 01:18 AM.

  8. #8
    Join Date
    Jun 2011
    Posts
    267

    Default

    In regards to Voxel Sculpting (3DCoat)

    I forgot all about a project called PolyVox
    http://www.volumesoffun.com/




    This would be a good start, then you would retop your voxel sculpture. Projection painting (Diffuse, Bump, Specular, ...) could
    add in that extra detail. I am wondering what the limitations of PolyVox is and how small those voxels could go or if there is a
    count limit.

  9. #9
    Join Date
    Jun 2011
    Posts
    267

    Default

    Pacepalm ok this thing supports 99% of the things needed for voxel sculpting out of the box and it supports Qt.


    Ok say for example you develop a "Primary Voxel Sculpting" plugin its purpose is to combine all addition related plugins. Not saying it has to be done like this.
    This is just a theoretical example on how development could be done in a simple manner that would allow someone to build up to a complete application. Or use
    particular combinations of plugins.

    You might make this piece of code into its own independent plugin that would show up as an "option" in the preference panel for
    the voxel sculpting application.

    QGLWidget derived
    Code:
    	// Convert a Surface Mesh to OpenGL index/vertex buffers with a Low Level Of Detail?
    	void OpenGLWidget::setSurfaceMeshToRenderLowLOD(const PolyVox::SurfaceMesh<PolyVox::PositionMaterialNormal>& surfaceMesh);
    Not sure if this applies to the whole scene or one selected object in particular. I would have to investigate this more and really read the docs, This was just an example. Note also this library uses
    alot of Templated code, so in order to enable Python scripting inside LiquidPixel, a well planned abstraction layer might be needed.
    Last edited by zester; 05-15-2013 at 02:00 AM.

  10. #10
    Join Date
    Jun 2012
    Posts
    26

    Default

    I literally love your approach. Your working around GPL limitations is very practical. If a plugin can easily live on its own then the application utilizing the plugin is hardly derivative work and merely a loader like a shell calling exec. I gather you already have some basic vector image manipulation plugin, how would you say it compares to inkscape performance-wise? I love inkscape but it's such a pain in the ass sometimes. The startup can take up several seconds (loading fonts ..) and manipulating complex paths takes ages. Add some filters to it and you can make a coffee between operations... I would love to build and test your stuff on vector drawing and if usable improve upon it. Oh!! I fell in love in your work for you are developing it on a black theme! Too many applications break using black themes so I am glad this one would have prime support. Where is your Paypal donate button?

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •