imgui icon indicating copy to clipboard operation
imgui copied to clipboard

Gallery: Post your screenshots / code here (PART 3)

Open ocornut opened this issue 9 years ago • 78 comments

This is Part 3, I am splitting issues to reduce loading times and avoid github collapsing messages.

Browse all threads and find latest one to post to using the gallery label.

Also see: Software using dear imgui (you can help complete the list!)

You can post your screenshots here!

ocornut avatar Aug 07 '16 10:08 ocornut

Our online slicer for 3D printers (RepRaps, Ultimakers, Prusa, etc.), using the amazing ImGui! Try it here: http://shapeforge.loria.fr/slicecrafter/

slicecrafter-imgui

sylefeb avatar Aug 07 '16 12:08 sylefeb

I'm making a game called Re:creation (more info here). Here are some in-game dev tools I've made with ImGui!

Level editor: leveleditor

Animation editor: animationeditor


I've also made ImGui SFML binding and wrote two articles about ImGui (Part 1, Part 2)

eliasdaler avatar Aug 07 '16 14:08 eliasdaler

Timeline Widget image timeline Source code https://github.com/nem0/LumixEngine/blob/timeline_gui/external/imgui/imgui_user.inl#L814

nem0 avatar Aug 08 '16 13:08 nem0

UI mockup for an asset library/manager I'm working on. Nothing functional as we speak :) Built mostly by re-using code from omar (obviously), dougbinks, juliettef, itamago, simon geilfus, krys and flix01.

Exciting times indeed!

gif0

Edit: @ratzlaff: used http://blog.bahraniapps.com/gifcam/ to encode the gif :) Edit: @Flix01: it's Google's MaterialDesignIcons actually! (fixed-size icons are much better to work with!)

r-lyeh-archived avatar Aug 15 '16 23:08 r-lyeh-archived

@r-lyeh Awesome main menu! And awesome icon font (or probably awesome usage of "Font Awesome" ?!?) :)

Edit: @r-lyeh: good to know that Google's MaterialDesignIcons are fixed-size! "Font Awesome" is a bigger set AFAIK, but their size is not always the same, and this can result in visual problems (for example with check boxes where the width of the unchecked and checked icons is not the same).

Flix01 avatar Aug 16 '16 14:08 Flix01

animtool

bkaradzic avatar Aug 19 '16 21:08 bkaradzic

@bkaradzic nice ! is this anim tool somewhere on your github repos ?

damqui avatar Aug 22 '16 10:08 damqui

@damqui Nope, but all default settings for that UI are in bgfx repo.

bkaradzic avatar Aug 22 '16 16:08 bkaradzic

An unfinished (just the GUI ATM), very bad looking, Sudoku game for Dear ImGui: imguisudokugame

Flix01 avatar Aug 22 '16 19:08 Flix01

Testing Imgui with native cocoa(no external dependencies) and opengl3(Working on Metal version).

captura de pantalla 2016-08-24 a las 10 13 52

phoenixcatdog avatar Aug 24 '16 08:08 phoenixcatdog

Working on my 3D Model Editor/Game Engine, currently fixing my docking code and some bugs, for the most part it works.. imgui makes it very easy and beautiful looking... docking

edin-purkovic avatar Aug 31 '16 18:08 edin-purkovic

This is sneek peak of node editor build on top of ImGui. It handle displaying and user interaction. node_preview_4

ImGui can be bend to handle zooming while keeping crisp details. image

thedmd avatar Sep 02 '16 23:09 thedmd

Squee! Please say the sources are/will be available?

On Sat, Sep 3, 2016 at 2:57 AM, Michał Cichoń [email protected] wrote:

This is sneek peak of node editor build on top of ImGui. It handle displaying and user interaction. [image: node_preview_4] https://cloud.githubusercontent.com/assets/1197433/18221085/52f4c0d4-7179-11e6-9853-7f821089d6a5.gif

ImGui can be bend to handle zooming while keeping crisp details. [image: image] https://cloud.githubusercontent.com/assets/1197433/18220992/e2bb2e8a-7177-11e6-918b-f2a08411d24a.png

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/ocornut/imgui/issues/772#issuecomment-244512595, or mute the thread https://github.com/notifications/unsubscribe-auth/AEQ_R11WHpxJhvSFA-r-DAmZDTTyhcv3ks5qmLfzgaJpZM4Jed-X .

jarikomppa avatar Sep 03 '16 05:09 jarikomppa

@jarikomppa Right now source isn't out there. I will think about making it open source.

thedmd avatar Sep 03 '16 08:09 thedmd

@thedmd I knew you were making awesome stuff! :)

ImGui can be bend to handle zooming while keeping crisp details.

How?

[Edit:] Is this something related to your branch named: 2016-09-fringe-scale, and expecially this commit: https://github.com/thedmd/imgui/commit/94dd233c26ece1586c9ccd7cd06347a85569ee53 ? Is it easy to use ?

Flix01 avatar Sep 03 '16 10:09 Flix01

screenshot_2 I've edited ImGUI a lot, and i solve the AA issue thanks by the way it was about renderer. I changed my hook to Present[17] from EndScene. And this is dll file not exe.

I made this tab system with buttons, i swapped the system of active state. If tab is active, button stays active too.

DrJedikiah avatar Sep 03 '16 22:09 DrJedikiah

@Flix01: You're correct. Branch 2016-09-fringe-scale is related to my solution. I'm scaling content of draw list vertex buffer. When zooming in finge is also magnified. To get rid of that I scale it by inverse of zoom factor. This is basic idea. I will post some code as an example when I get to my PC.

thedmd avatar Sep 03 '16 23:09 thedmd

@thedmd Thanks.

Flix01 avatar Sep 04 '16 13:09 Flix01

@Flix01: In more detail. To achieve scaling choose some scale factor, set fringe to 1 / scale factor and draw as normal. I'm drawing on multiple channels to achieve layering but this isn't necessary. After drawing is done call ImDrawList_TransformChannel_Inner and voilà, you are done. Almost.

This works but some problems arise around it. Working with global coordinate system (GCS) when scaling is involved isn't best experience. Treating your child window as canvas which works in local coordinate system (LCS) is much easier. (0, 0) is in top left corner of child window. I advise to use matrices to represent transformation from one space to another from the start.

First thing is transforming ImGuiIO::MousePos and ImGuiIO::MouseClickPos to LCS. This will allow ImGui to handle input correctly.

Second. Push new clip rectangle which cover visible part of your canvas. When scaling down canvas is larger than actual window, input is clipped to window size in GCS. Pushing larger clip rectangle enable ImGui to handle larger areas. Whole scaeled area isn't visible yet but since MousePos is transfomed ImGui is actually processing input over whole area.

Third. Be ready to restore ImGuiIO::MousePos and ImGuiIO::MouseClickPos to original values and bring them back to LCS. It is necessary if you want show popups correctly.

Last thing to be done is to transform window draw list to make content actually visible. You can use ImDrawList_TransformChannels for that. If you want to write similar function by yourself make sure one vertex is transformed only once. If everything inside window is scalled, good. You can just transform vertices. If only some channels are drawn in LCS things are more tricky. Include code handle former.

If something is unclear or language I use is odd, please point me that out and ask questions.

static void ImDrawList_TransformChannel_Inner(ImVector<ImDrawVert>& vtxBuffer, const ImVector<ImDrawIdx>& idxBuffer, const ImVector<ImDrawCmd>& cmdBuffer, const ImVec2& preOffset, const ImVec2& scale, const ImVec2& postOffset)
{
    auto idxRead = idxBuffer.Data;

    std::bitset<65536> indexMap;

    int minIndex    = 65536;
    int maxIndex    = 0;
    int indexOffset = 0;
    for (auto& cmd : cmdBuffer)
    {
        int idxCount = cmd.ElemCount;

        if (idxCount == 0) continue;

        for (int i = 0; i < idxCount; ++i)
        {
            int idx = idxRead[indexOffset + i];
            indexMap.set(idx);
            if (minIndex > idx) minIndex = idx;
            if (maxIndex < idx) maxIndex = idx;
        }

        indexOffset += idxCount;
    }

    ++maxIndex;
    for (int idx = minIndex; idx < maxIndex; ++idx)
    {
        if (!indexMap.test(idx))
            continue;

        auto& vtx = vtxBuffer.Data[idx];

        vtx.pos.x = (vtx.pos.x + preOffset.x) * scale.x + postOffset.x;
        vtx.pos.y = (vtx.pos.y + preOffset.y) * scale.y + postOffset.y;
    }
}

static void ImDrawList_TransformChannels(ImDrawList* drawList, int begin, int end, const ImVec2& preOffset, const ImVec2& scale, const ImVec2& postOffset)
{
    int lastCurrentChannel = drawList->_ChannelsCurrent;
    if (lastCurrentChannel != 0)
        drawList->ChannelsSetCurrent(0);

    auto& vtxBuffer = drawList->VtxBuffer;

    if (begin == 0 && begin != end)
    {
        ImDrawList_TransformChannel_Inner(vtxBuffer, drawList->IdxBuffer, drawList->CmdBuffer, preOffset, scale, postOffset);
        ++begin;
    }

    for (int channelIndex = begin; channelIndex < end; ++channelIndex)
    {
        auto& channel = drawList->_Channels[channelIndex];
        ImDrawList_TransformChannel_Inner(vtxBuffer, channel.IdxBuffer, channel.CmdBuffer, preOffset, scale, postOffset);
    }

    if (lastCurrentChannel != 0)
        drawList->ChannelsSetCurrent(lastCurrentChannel);
}

thedmd avatar Sep 04 '16 20:09 thedmd

@thedmd thanks again for your detailed explanation. It's something I'll investigate further in the future... (I still have to find out how antialiasing works...).

P.S. I'd also like to manage the draw lists to see if sorting indices on a texture-id basis is worthy or not.

@ocornut : sorry for having asked questions in the "Screenshot" section.

Flix01 avatar Sep 05 '16 10:09 Flix01

This is from a weekend project ascii-renderer where ImGui is used to control how rendering works. Only grayscale now. Everything is rendered on CPU.

image

And yes, you can render ImGui to ASCII buffer. : ) image

thedmd avatar Sep 09 '16 17:09 thedmd

I'm using LumixEngine's docking extensions, as so many others are, to make an editor-ish thing to be mainly used for my simulations. I wanted to create a minimal project with just the essentials to have a decent looking docking example with as few dependencies as possible, so I removed all the things I didn't need from LumixEngine's docking files and replaced it with simpler things.

screenshot_docking

Current work-in-progress code

vassvik avatar Sep 12 '16 00:09 vassvik

@thedmd Please release the source, I'm very interested in node based editors like this!

darkf avatar Sep 14 '16 08:09 darkf

I made a Pixel Art Upscaler using Dear ImGui

https://github.com/lapinozz/ScalaPixel

demo

lapinozz avatar Sep 20 '16 19:09 lapinozz

Still a work in progress...

ExtasyHosting avatar Sep 21 '16 17:09 ExtasyHosting

@ExtasyHosting Slick! :)

bkaradzic avatar Sep 21 '16 17:09 bkaradzic

geobox

GEOGRAM geometry processing library and utilities. [documentation] [download] [online demo]

MOD Moved to http://homepages.loria.fr/BLevy/GEOGRAM/

BrunoLevy avatar Sep 26 '16 19:09 BrunoLevy

@thedmd : Similar to Unreal Engine Blueprint :D

z350z avatar Sep 29 '16 21:09 z350z

@z350z Yes they are

thedmd avatar Sep 30 '16 12:09 thedmd

looped

This is a port of the AntTweakBar rotation widgets. It probably still needs work, but is self contained inside imgui_orient.cpp/h. It works by transforming geometry to screen space, so it doesn't need any ImGui API changes. I had to add a little extra math support (and the original code was flat arrays, so I converted it to use more sensible vector types). All credit to the original author; this is a really nice rotation widget and 'feels' correct when you spin it; at least to me! I imagine this will be immediately useful to many folks.... It is on my fork at: https://github.com/cmaughan/imgui, which is mostly the same as the colorpicker branch. I can imagine this widget would be useful as a model spinner in the main viewport; so an option to remove the background might be nice. It might also work well as a popup like the color picker. I've just done the minimum to get it going for now (you can try it in the Test window). Oh, and here are the docs from original version: http://anttweakbar.sourceforge.net/doc/tools:anttweakbar:twtype#tw_type_quat4d

cmaughan avatar Oct 06 '16 09:10 cmaughan