No announcement yet.

Linux Game Development and a Qt Developers Rage

  • Filter
  • Time
  • Show
Clear All
new posts

  • #11
    Wow, this looks very promising. I wish you best luck!


    • #12
      Awesome. Sounds like an idea I've had for a software for a long time. Would love to look at the source code sometime. Please keep us posted on the progress.


      • #13
        Really cool work! Hope you put up a website and host the code on GitHub or somewhere else. This would really help out with Linux Game development!


        • #14
          Originally posted by gururise View Post
          Really cool work! Hope you put up a website and host the code on GitHub or somewhere else. This would really help out with Linux Game development!
          Thanks, and I most certainly plan on it, Hint"Linux Game Development and a Qt Developers Rage" Github for sure.

          Ok while I am cleaning my code up, I am working on that as fast as I can but Note: I have three kids 2-6 years of age so ...... anyways.

          I wanted to point out, in regards to image editing algorithms, there are times when particular Blur filters are more suitable than others. Alot of people make this mistake because they
          fail to read the docs or have a basic understanding in regards to image editing.

          Example: Adaptive Blur "Adaptively blur pixels, with decreasing effect near edges."

          Time: Less than 1/2 a sec

          Time: Just over 1 Sec

          Time: Almost 60 Sec's

          See the problem? The third screenshot's sigma is to high, now you might want to actually blur your image to this degree but read the description
          "Adaptively blur pixels, with decreasing effect near edges."

          We should have used the "Standard Blur Filter" if we wanted this amount of blur. And if we would have our "Time would have been less than 1/2 a sec

          Now a note on High Dynamic Range(RAW Images), Effects, Non-Destructive Editing ..... I forked a Qt program called photivo a month back, I had
          planed on just fixing some bugs and adjusting its ui mainly because it is another great piece of code that was abandoned.

          But what I quickly realized was the vast treasure trove of code that I could use.

          This is what my fork looks like.

          Scaled the image up and down, apply effects, remove them, doesn’t matter in the end the image will retain its original quality.

          What I wanted from this image was a bump map of his "Pores", "Wrinkles" and possibly his beard.

          A couple of features of Photivo:

          16-bit internal processing, color managed with LCMS2.
          Gimp workflow integration (import and export)
          Works with RAWs and Bitmaps (8 bit bitmaps are transformed and processed with 16 bit, which usually gives better results).
          CA correction, Green equilibration, line denoise, badpixel reduction, wavelet denoise, median filters on RAW data.
          Perspective correction (tilt and turn), distorsion and geometry (also defish) correction
          Demosaicing: Bilinear, VNG, VNG4, PPG, AHD, DCB, mod. AHD, VCD, LMMSE, AMaZE (needs work!).
          RGB, R, G, B, L*, a*, b*, Texture, Detail, Denoise, Hue, Saturation, L* by Hue, Base curve.
          Tonemapping (Reinhard 05 (RGB Brighten), Fattal et al. (Dynamic range compress)).
          Several local contrast filters (HiRaLoAm (Local contrast), texture contrast, local contrast stretch).
          Sharpen (Edge avoiding wavlets, USM, Highpass, Inverse diffusion, Wiener filter, Gradient sharpen).
          Denoise, seperately on Luminance and Color (Edge avoiding wavelets, GreyCStoration, Wavelet, Masked bilateral, Pyramid) and via a hue or luminance sensitive denoise curve.
          Adaptive saturation.
          Film grain simulation.
          Black and white conversion.
          (Split) Toning.
          Cross processing.
          Gradual overlay (like Cokin(R) GND filters).
          Softglow / Orton.
          Texture overlay (external texture)
          Fake tilt/shift, toy effect
          Batch mode

          If your familiar with Qt's capability’s, combined with GraphicsMagick(MagickCore & Magick++) in addition to what code photivo gives us. You might see where we just kicked Adobe in the balls, and Pimp slapped Gimp(No disrespect intended to Gimp)
          Last edited by zester; 05-15-2013, 03:05 PM.


          • #15
            Originally posted by zester View Post
            See the problem?

            It looks like the default Ubuntu desktop wallpaper.


            • #16
              Originally posted by johnc View Post

              It looks like the default Ubuntu desktop wallpaper.

              What if all Ubuntu wallpapers are created by applying excessive blur on porn?

              Mind = blown.


              • #17
                Ohhh so tempted to post the full HighRes image lol, she is like 70 years old now but good lord was she hot in her day!!!!!!
                I could do a "Animated Vortex Effect" on her tits!!!!!


                • #18
                  There is another Library called ITK, I am particularly interested in its simplified form SimpleITK(We don't have to use C++ Templates) it has bindings
                  for Python, Lua, ... and some others

                  ITK is an open-source, cross-platform system that provides developers with an extensive suite of software tools for image analysis.

                  I am particularly interested in What it does in regards to detailed "Shape" and "Pattern" recognition.

                  Example: Code Snippit to show ease of use. This looks exactly like Magick++
                  //This filters perform a gaussian bluring with sigma in
                  // physical space. The output image will be of real type.
                  ImageFileReader reader ;
                  reader.SetFileName( "/mynakedmodel.png" ) ;
                  Image image = reader.Execute ();
                  SmoothingRecursiveGaussianImageFilter gaussian ;
                  gaussian.SetSigma ( 2.0 );
                  Image blurredImage = gaussian.Execute ( image ) ;
                  Now the really interesting part.

                  Extraction of 2D Curves using statistical pattern recognition

                  The purpose of this application is to extract the points that are located near the medial line of tubular structures in a 2D image. The image is processed by differential gaussian filters that tune the analysis to a particular scale associated with the expected diameter of the tubular structures.

                  Cellular Model for Image Processing and Shape Recognition

                  Cell populations can be used for image analysis by letting them grow on top of an image. The image is assimilated to a chemical substrate in which the cells lay. The behavior of cells can be programmed in order to react to the content of the substrate (the image) and the state of the neighbor cells.

                  Hmmmmm very very very useful, wonder if Photoshop can create a "Cellular Model for Image Processing and Shape Recognition" ?


                  • #19
                    Originally posted by RushPL View Post
                    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?
                    Thanks, I don't have any issues with the GPL, but honestly I find it tends to hurt those that it was intended to protect(Developer wise) more than it helps. As an example of this take Horde3D

                    Horde3D is licensed under the EPL(Eclipse Public License) and from my understanding the EPL isn't compatible with the GPL in anyway shape or form.

                    And I think Horde3D is pretty fucking cool ...
                    • Modern shader-based architecture with SM 2.0 compatible hardware as a minimum requirement
                    • Robust resource management with internal garbage collection
                    • Interface for loading data from files, streams or any type of archives
                    • Hot-reloading of resources for more increased productivity during development
                    • Lightweight scene tree structure with hierarchical transformations and bounding volumes
                    • Unified scene system where world, models and skeletons are just scene graph branches and no special objects
                    • Loading of scene graph branches from XML files with complete orthogonality to API functions
                    • Frustum culling based on spatial graph
                    • Hardware occlusion culling
                    • Level of detail support for model geometry and materials
                    • Possibility to attach scene nodes to joints (e.g. for character props)
                    • Access to vertex data for collision detection and interoperability with physics engines
                    • Ray collision queries and node picking
                    • Übershader-based effect/material system with automatic shader permutation generation (using GLSL shaders)
                    • XML based customizable rendering pipeline with allocatable render targets and commands for rapid testing of different rendering techniques
                    • Postprocessing framework for effects like bloom, DOF or motion blur
                    • Support for forward rendering and different deferred shading techniques
                    • Support for High Dynamic Range (HDR) textures and lighting
                    • Support for almost all modern rendering techniques, including normal-mapped phong lighting and parallax mapping
                    • Support for real-time reflections and other techniques that require several cameras for rendering
                    • Realtime shadows using Parallel Split Shadow Maps (PSSM)
                    • Software skinning and hardware skinning in vertex shader for rendering hundreds of animated characters
                    • Fully integrated particle systems that can cast shadows and have effects like motion blur
                    • Overlays for rendering GUI elements and font
                    • Unified low-level animation system working directly on scene graph
                    • Keyframe animation for joints and meshes
                    • Skeletal animation with up to 4 weights per vertex for articulated models
                    • Layered animation blending and mixing using masks and additive channels
                    • Inter-frame interpolation for smooth animations
                    • Access to joint data for dynamic animations and ragdoll physics
                    • Morph targets for facial animation and lip synchronization
                    • Custom optimized model and animation formats for maximum performance
                    • Mixture of binary and XML formats for best tradeoff between performance and productivity
                    • Support for DDS textures and other common image formats
                    • Collada Converter for bringing assets from many common DCC tools to Horde3D
                    • Collada Converter implemented as command line tool that can be integrated in automatic build process
                    • Calculation of tangent space basis for normal mapping
                    • Optimization of geometry for GPU post-transform vertex cache
                    • Data-driven rendering pipelines for straight switching between different rendering techniques

                    On Top of that ....
                    It has a Terrain Extension and Bullet 3D Physics Extension.

                    Horde3D is C++ based but it has a C style wrapper on top.

                    Thanks to the C style wrapper I was able to write a Lua binding in addition to adding FMOD for 2D/3D Audio and Grapple for Networking
                    and all of this only took a day to do.

                    But Horde3D and Fmod are GPL incompatible and Grapple is LGPL and Qt is LGPL.

                    Plus Blenders Collada support isn't or wasn't very good. There is a Blender Horde3D export plugin now. I have to check it out.

                    As far as a Vector Graphics Plugin, yes and no, I have done lots of work in regards but its come down to decisions, Vector Graphics in Qt are faster than Inkscape's Cairo, then you have Skia and
                    finaly NV Path Rendering Ext.

                    First off there is a kind of Acid Test for Vector Graphics Engines. Qt, Skia and Cairo fail in terms of proper rendering. Cairo being the worst and Qt the best. Only the NV Path Rendering Ext gets a perfect score.

                    Now Cairo only does VG its not a complete Graphics Framework.
                    Skia and Qt are complete
                    NV Path Rendering only does VG it's not really a complete Graphics Framework "unless" your using shaders in combination.

                    I did some test in regards to integration, I don’t have all the screentshot's and these were really only about performance. What I did was integrate QPainter, Cairo and Skia into SFML2.
                    I was and am only particularly interested in results for Qt and NV Path

                    Rendering the SVG Tiger in Qt you get about 130FPS

                    Rendering the SVG Tiger using QPainter/Qsvg in SFML2 you get about 240FPS

                    Rendering the Tiger using NV Path in OpenGL(Nvidias Demo) you get 400+FPS and an option to speed that up with Cuda.

                    Here is QPainter and SFML2

                    Here is SFML2 inside Qt

                    Here is Skia in SFML2 I was running Drawing Commands here.

                    If your interested in the Skia SFML2 code
                    #include <SFML/Graphics.hpp>
                    #include "SkCanvas.h"
                    #include "SkGraphics.h"
                    #include "SkImageEncoder.h"
                    #include "SkString.h"
                    #include "SkTemplates.h"
                    #include "SkTypeface.h"
                    #include <iostream>
                    // g++ main.cpp -Wl,-rpath,./ -L. -lskia -Iinclude/core -Iinclude/config -Iinclude/images -lpthread -lfreetype -lpng -lsfml-window -lsfml-graphics -lsfml-system 
                    using namespace std;
                    int main(int argc, char **argv) {
                      int width = 800;
                      int height = 600;
                      // Create the main window
                      sf::RenderWindow window(sf::VideoMode(width, height), "SFML window");
                      sf::Image image; 
                        SkAutoGraphics ag;
                        //Set Text To Draw
                        SkString text("Hydra Skia v0.0.1a");
                        SkPaint paint;
                        //Set Text ARGB Color
                        paint.setARGB(255, 255, 255, 255);
                        //Turn AntiAliasing On
                        paint.setTypeface(SkTypeface::CreateFromName("sans-serif", SkTypeface::kNormal));
                        //Set Text Size
                        SkBitmap bitmap;
                        bitmap.setConfig(SkBitmap::kARGB_8888_Config, width / 2, height);
                        //Create Canvas
                        SkCanvas canvas(bitmap);
                        canvas.drawARGB(100, 25, 25, 25);
                        //Text X, Y Position Varibles
                        int x = 80;
                        int y = 60;
                        canvas.drawText(text.c_str(), text.size(), x, y, paint);
                        //Set Style and Stroke Width
                        //Draw A Rectangle
                        SkRect rect;
                        paint.setARGB(255, 0, 0, 0);
                        //Left, Top, Right, Bottom
                        rect.set(50, 100, 200, 200);
                        canvas.drawRoundRect(rect, 20, 20, paint);
                        canvas.drawOval(rect, paint);
                        //Draw A Line
                        canvas.drawLine(10, 300, 300, 300, paint);
                        //Draw Circle (X, Y, Size, Paint)
                        canvas.drawCircle(100, 400, 50, paint);
                        image.Create(bitmap.width(), bitmap.height(), reinterpret_cast<const sf::Uint8*>(bitmap.getPixels()));
                      // Load a sprite to display
                      sf::Texture texture;
                      if (!texture.LoadFromImage(image))
                              return EXIT_FAILURE;
                      sf::Sprite sprite(texture);
                      //sprite.SetPosition(100, 100);
                      //sprite.Resize(400, 400);
                      // Load a sprite to display
                      sf::Texture tex;
                      if (!tex.LoadFromFile("background.jpg"))
                             return EXIT_FAILURE;
                      sf::Sprite texs(tex);
                      // Start the game loop
                      while (window.IsOpened())
                             // Process events
                             sf::Event event;
                             while (window.PollEvent(event))
                                 // Close window : exit
                                 if (event.Type == sf::Event::Closed)
                             // Clear screen
                             // Update the window
                         return EXIT_SUCCESS;

                    I would like to combine Qt and the Nv Path Rendering Ext, but that's going to take some time.

                    You can learn more about Nv Path Rendering here
                    Last edited by zester; 05-16-2013, 10:30 AM.


                    • #20
                      Just to break the topic of VG up as it was getting cluttered.

                      What I would like is ...
                      1. Nvidia Path Rendring, as a Qt Plugin with that in QGraphicsScene/QGraphicsView(OpenGL) Note: Will probably just start with Qt's VG capability’s and move to nvpath later.
                      2. Box2D for Physics
                      3. Qt has Animation Classes for Tweening
                      4. 2D/3D Audio with effects (OpenAL, CAudio(OpenAL C++ Wrapper), Fmod, or RtAudio & STK)
                      5. Pre-Made Shaders
                      6. Particle Effects (Note: Combined with Box2D would be cool)
                      7. Bone System (Skeletal Animation) (Might be able to modify Animadead for this) or find something better. But Animadead is easy to use for 3D haven’t tried to restrict it for 2D yet.
                      8. A B-tree State Machine "Like Playmaker for Unity3D" (Might not need to do this my self, There are a couple of Internal and External options for Qt)
                      9. Scripting (Python, Lua, Javascript)
                      10. Libav or FFMPEG for encoding/decoding the animated frames to a video.
                      11. Renderer (Ray Tracer maybe? not sure but the thought is interesting)

                      Combine this with everything else I have posted and you get all kinds of possibility’s.

                      Oh but to answer your question, no VG is not hard, actually very easy to the point of why not spice it up and think about what you could do with it.
                      Last edited by zester; 05-16-2013, 10:59 AM.