Coder Social home page Coder Social logo

iwatake2222 / rotation_master Goto Github PK

View Code? Open in Web Editor NEW
227.0 4.0 31.0 1.43 MB

Provide conversion between the major representations of 3D rotation and visualize the orientation of a rigid body

Home Page: https://iwatake2222.github.io/rotation_master/rotation_master.html

License: Apache License 2.0

CMake 4.95% C++ 89.99% Shell 0.63% HTML 4.43%
cpp 3d rotation quaternion opengl imgui wasm emscripten

rotation_master's Introduction

image

Rotation Master

rotation_master_demo.mp4

CI/CD Status

Status Details
CMake ubuntu-20.04, windows-2019, macos-10.15
CodeQL ubuntu-20.04
WASM Deploy https://iwatake2222.github.io/rotation_master/rotation_master.html

How to Use

https://github.com/iwatake2222/rotation_master/wiki/How-to-Use

How to Build

https://github.com/iwatake2222/rotation_master/wiki/How-to-Build

License

Acknowledgements

rotation_master's People

Contributors

iwatake2222 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

rotation_master's Issues

[FEATURE] Select left/right-handed coordnate system

The reason WHY this new feature is needed

  • The app uses right-handed coordinate system. It will be useful if it shows in left-handed coordinate system and a user can select coordinate system

Describe WHAT this new feature is

  • Add option to seelct left/right-handed coordinate system

HOW to achieve this new feature

  • Not yet considered

Related issues

  • Parent issue
    • None
  • Related issue
    • None

Additional context

None

[FEATURE] Add google analytics for GitHub pages

The reason WHY this new feature is needed

  • I want to see how many people use my app

Describe WHAT this new feature is

  • Add google analytics for GitHub pages

HOW to achieve this new feature

  • Add script into shell_minimal.html

Related issues

  • Parent issue
    • None
  • Related issue
    • None

Additional context

None

[FEATURE] Create web application version

The reason WHY this new feature is needed

  • It must be useful if the app runs on a browser

Describe WHAT this new feature is

  • Create a web application version

HOW to achieve this new feature

Related issues

  • Parent issue
    • None
  • Related issue
    • None

Additional context

None

[FEATURE] Display views from each axis

The reason WHY this new feature is needed

  • It will be useful for uses to display views from X-axis, Y-axis and Z aixs

Describe WHAT this new feature is

On the right of the window, display views from each axis

HOW to achieve this new feature

  • Add a new function to generate ViewProjection matrix to Window class
    • Select axis(X, Y or Z) by argument
  • Draw the view on the right
  • probably it's needed to draw background or border lines

Related issues

  • Parent issue
    • Add a parent issue number if exists (e.g. #1234)
  • Related issue
    • Add related issue number if exists (e.g. #1234)

Additional context

None

[FEATURE][DEVELOP] Create a blank project to use OpenGL + GLFW

The reason WHY this new feature is needed

  • We need a project to be based on

Describe WHAT this new feature is

  • Add a blank cmake project to use OpenGL + GLFW

HOW to achieve this new feature

  • Create cmake settings
  • Create a blank cpp source

Related issues

  • Parent issue
    • None
  • Related issue
    • None

Additional context

None

[FEATURE] Minor tunings for WASM

The reason WHY this new feature is needed

  • By issue #45 , the web application version is compiled
  • However, it needs some modification because behavior and appearance is not good so far

Describe WHAT this new feature is

  • See the next section

HOW to achieve this new feature

  • Use HTML template instead of using the original html
  • Add CD badge
  • Fix mouse scroll

Related issues

  • Parent issue
  • Related issue
    • None

Additional context

None

[FEATURE][DEVELOP] Introduce UnitTest

The reason WHY this new feature is needed

  • It's important to test each logic to improve quality and prevent degradation

Describe WHAT this new feature is

Add Unit Test

HOW to achieve this new feature

  • Use GoogleTest
  • Create test directory under desktop directory
  • Under the test directory, create the same directory structure as the project. Then add test code for each sub module
  • To contain GoogleTest, we use git submodule, rather than FetchContent_Declare function in git
    • It's because, we want to avoid multiple download

Related issues

  • Parent issue
  • Related issue
    • None

Additional context

None

[FEATURE][DEVELOP] Create UI window

The reason WHY this new feature is needed

  1. A user inputs angles in a selected representation
  2. The program converts the input angles to all the other representations
  3. The program also draw the object with the specified rotation

Describe WHAT this new feature is

  • In this issue, we will implement UIs for 1 and 2

HOW to achieve this new feature

  • Create components for input
  • Create components for output
  • Create class or structure to contain data
    • but no calculation will be implemented yet

Related issues

  • Parent issue
  • Related issue
    • None

Additional context

None

[FEATURE][DEVELOP] Update document for build, test, coverage measurement

The reason WHY this new feature is needed

  • Now that the basic development environment was setup, it's time to write document to describe how to build, test and measure coverage

Describe WHAT this new feature is

  • Add wiki page for
    • how to run
    • how to build, test, measure coverage

HOW to achieve this new feature

  • Wiki page to explain how to run
  • Wiki page to explain how to build, test and measure coverage
  • Add link to wiki pages into README

Related issues

  • Parent issue
    • None
  • Related issue
    • None

Additional context

None

[FEATURE] Separete UI window for buttons

The reason WHY this new feature is needed

  • Currently, UI window is too huge. So that the application window needs to be huge , too.

Describe WHAT this new feature is

Separate UI window for buttons

HOW to achieve this new feature

  • UI Window1
    • Input and Output values
  • UI Window2 (will be places next to UI Window1)
    • Buttons
  • UI Window3 (will be places next to UI Window2)
    • Operation manual

Related issues

  • Parent issue
    • None
  • Related issue
    • None

Additional context

None

[FEATURE] Show how to use

The reason WHY this new feature is needed

  • A user who uses this app for the first time may have difficulty to use the app
  • It's because he/she don't know how to use the app

Describe WHAT this new feature is

Display a simple manual to describe how to use the app

HOW to achieve this new feature

  • Add text box using ImGui to show the manual
View: 
Right mouse button drag: ooo
Middle mouse button drag: ooo
Scroll: ooo
Input angles:
Left mouse button drag on the input area: ooo
Ctrl + Left mouse button click on the input area: ooo

Related issues

  • Parent issue
  • Related issue
    • None

Additional context

None

[FEATURE][DEVELOP] Display axes and object

The reason WHY this new feature is needed

  • To begin with, drawing fixed axes and object(which to be rotated) is mandatory

Describe WHAT this new feature is

  • Draw fixed axes
  • Draw target object as a simple monolith

HOW to achieve this new feature

  • Create window class
  • Create axes object
  • Create object(monolith) object

Related issues

  • Parent issue
  • Related issue
    • None

Additional context

None

[FEATURE] Auto select representation

The reason WHY this new feature is needed

  • When a user wants to try another representations, the user needs to check the radio box, but it's kind of bother
  • It will be useful the representation is automatically selected when the user change the input value for the representation

Describe WHAT this new feature is

  • automatically select representation where the user modifies value

HOW to achieve this new feature

  • e.g.
      1. the user changes the input values for axis angle
      1. the axis-angle representation is automatically selected

Related issues

  • Parent issue
    • None
  • Related issue
    • None

Additional context

None

[ISSUE] Test in macOS is needed

System information

  • Hardware: None
  • CPU: None
  • OS: macOS
  • Commit id or version: None

Describe the issue

  • Currently, the application is tested only in Windows and Linux
  • It's not sure if it works on macOS. Also, test with retina display is needed because it uses different resolution policy
  • Update wiki for macOS if needed

Expected behavior

  • The application doesn't crash
  • Display is not broken

To Reproduce

  • Run the application in macOS

Build Command

None

Log

None

Screenshots

None

Additional context

None

[FEATURE] Hide console in Windows

The reason WHY this new feature is needed

  • Although this is a window application, it shows a console in Windows. It's unnecessary

Describe WHAT this new feature is

Hide console in Windows

HOW to achieve this new feature

  • Change build setting to hide console

Related issues

  • Parent issue
    • None
  • Related issue
    • None

Additional context

None

[FEATURE][DEVELOP] Rotate the object(monolith) in response to input angle

The reason WHY this new feature is needed

  1. A user inputs angles in a selected representation
  2. The program converts the input angles to all the other representations
  3. The program also draw the object with the specified rotation

Describe WHAT this new feature is

  • In this issue, we will implement 3

HOW to achieve this new feature

  • Using 2, rotate the monolith and draw it
    • it's not decided which representation is used

Related issues

  • Parent issue
  • Related issue
    • None

Additional context

None

[FEATURE][DEVELOP] Introduce CI/CD

The reason WHY this new feature is needed

  • This project will run on multi platforms (Windows, Linux and Mac OS). However, I have Windows PC only
  • Also, it takes time to test on each platform and to test each logic
  • Also, it will take time to create binary file for each platform at release
  • It should be helpful if build and test run on multi-platform automatically

Describe WHAT this new feature is

  • Setup continuous integration environment
  • Do build and test on Windows, Linux and Mac OS

HOW to achieve this new feature

  • Setup GitHub Actions

Related issues

  • Parent issue
  • Related issue
    • None

Additional context

None

[FEATURE][DEVELOP] Measure test coverage

The reason WHY this new feature is needed

  • Even after we introduce unit test, we don't know how much portion of code is tested, and we are not sure all the code is tested

Describe WHAT this new feature is

Add option and script to measure test coverage

HOW to achieve this new feature

  • We use gcovr to measure and summarize test coverage
  • Add cmake option to generate necessary files for gcovr
  • Also, Add script to measure test coverage

Related issues

  • Parent issue
  • Related issue
    • None

Additional context

None

[FEATURE][DEVELOP] Implement logic to convert between different angle representations

The reason WHY this new feature is needed

  1. A user inputs angles in a selected representation
  2. The program converts the input angles to all the other representations
  3. The program also draw the object with the specified rotation

Describe WHAT this new feature is

  • In this issue, we will implement the logic for 2

HOW to achieve this new feature

  • Not yet decided

Related issues

  • Parent issue
  • Related issue

Additional context

None

[FEATURE] Update document

The reason WHY this new feature is needed

  • Since implementation is finished, the document must be updated

Describe WHAT this new feature is

  • Update readme
  • Modify terms in the app and documents

HOW to achieve this new feature

None

Related issues

  • Parent issue
    • None
  • Related issue
    • None

Additional context

None

[FEATURE] Add option to go-around the object

The reason WHY this new feature is needed

  • Currently, the camera moves freely. However, most of the case, a user wants to see the object and go-around the object

Describe WHAT this new feature is

  • Add option to select how to move
  • When go-around is selected, the camera go-around the object

HOW to achieve this new feature

  • In go-around mode,
    • right-drag: rotate around the object
    • scroll: change the distance from the origin
    • middle-drag: none

Related issues

  • Parent issue
    • None
  • Related issue
    • None

Additional context

None

[FEATURE] Create web application version

The reason WHY this new feature is needed

  • It must be useful if the app runs on a browser

Describe WHAT this new feature is

  • Create a web application version

HOW to achieve this new feature

  • Use WASM (Emscripten)
  • Do not separate directory for desktop/web
  • Convert to HTML+JS
  • Add CD(Deploy) using GitHub Actions

Related issues

  • Parent issue
    • None
  • Related issue
    • None

Additional context

Reference: https://github.com/astomih/rotation_master

[FEATURE][DEVELOP] Integrate Dear ImGui

The reason WHY this new feature is needed

Describe WHAT this new feature is

  • Include Dear ImGui
  • Add a sample code to use ImGui

HOW to achieve this new feature

  • Add cmake setting to include ImGui
  • Write sample code to use ImGui

Related issues

  • Parent issue
  • Related issue
    • None

Additional context

None

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.