Announcement

Collapse
No announcement yet.

Linux Game Development and a Qt Developers Rage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Linux Game Development and a Qt Developers Rage

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

    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, 10:40 PM.

  • #2
    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



    Comment


    • #3
      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?

      Comment


      • #4
        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.

        Comment


        • #5
          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, 10:58 PM.

          Comment


          • #6
            Where are you hosting your code at?

            What is the website for your liquid pixels?

            Comment


            • #7
              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, 12:18 AM.

              Comment


              • #8
                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.

                Comment


                • #9
                  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, 01:00 AM.

                  Comment


                  • #10
                    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?

                    Comment

                    Working...
                    X