Giter VIP home page Giter VIP logo

xenon's Introduction

Xenon

Cross-platform graphics engine for testing new technologies.

How to build?

Start off by cloning the repository to a local directory. You can follow the following commands to get started.

git clone https://github.com/Nexonous/Xenon
cd Xenon
git submodule update --init --recursive
./Scripts/Bootstrap.[bat/ sh]

Note: Use the proper shell script for the platform. For Windows it's the Bootstrap.bat file and for Linux it's the Bootstrap.sh file. Also the submodule update will also download glTF samples which is like 2 gigabytes.

The scripts will create the output directory and the CMake project files. From there on it's just a CMake build to build the binaries and run!

How to render something?

Once you've built the Studio project, run the XenonStudio application. Then drag and drop a glTF model file. Then go to View -> Layer View to view the model. Use the W, A, S, and D keys to move in the 3D world. To rotate the camera, hold down the middle mouse button and then move the mouse. If the movement speeds are slower than necessary, you can edit them in the Configuration widget (enabled through View -> Configuration).

How to use it with a project?

Take a look into the Studio project's /Studio/CMakeLists.txt file to get started. You can easily add this repo as a submodule if you want which will configure a lot of things for you. Right now we don't have an option to install Xenon (because it's not our biggest concern yet). Just make sure that you set the include path to /Engine/ and link the XenonEngine static library file (which will be in the /Build/Engine/Xenon/ folder).

License

This project is licensed under Apache-2.0.

xenon's People

Contributors

dhirajwishal avatar nexonousadmin avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Forkers

mfkiwl jjzhang166

xenon's Issues

Add the other branches to the CMake actions.

For now, the CMake actions work for a selected few branches only. It would be a pain if we make more branches to add them one by one. It's better to use wildcards so that it will work on all the important branches.

Update the README.md file.

In the README.md file, the following line doesn't make sense.

I don't think anyone would want to use this engine other than to see what it's like to have support for multiple backends with multithreading and to have support for multiple backends.

Please update it to make more sense by changing it to

I don't think anyone would want to use this engine other than to see what it's like to have support for multiple backends with multithreading and to have support for multiple platforms.

Detach descriptors from pipelines.

We need to detach the descriptors from the pipelines and allow the user or the engine to create them using bindings. This also means descriptors have to be managed externally (which might be a pain). I think it would be best to expose the descriptor [set] manager to the frontend and create descriptors from there.

Originally posted by @DhirajWishal in #8 (comment)

Xenon Logo

As we all know, every project needs its logo. Currently, Xenon doesn't have one. If you're kind enough to create one for this project it would be of great help!

Requirements

  • The logo should have something to do with Xenon (the element).
  • We should be able to show it from the repository and also as an icon which we can export with the binary.
  • It should be open source! I don't want to deal with any legal nonsense.
  • Should be family friendly (I'm looking at you memers).
  • Try not to plagiarize anything. That's a big no no.
  • The image format should either be SVG or PNG.

You can add the logo image(s) in a comment and if yall feel like a submitted logo is good for the project you can go ahead and like it. The most liked logo will be chosen (if yall decide to make any ๐Ÿฅฒ).

Add lighting to the engine.

As of now, the engine doesn't have any concept of lighting. This is not good. For this, my first plan is to add a structure or class called light which has the following properties.

  • Intensity
  • Color
  • Position
  • Direction
  • Field angle

I'm sure this information can be stored in a single structure like so.

struct Light final 
{
    glm::vec4 m_Color;
    glm::vec3 m_Position;
    glm::vec3 m_Direction;
    float m_Intensity = 1.0f;    // 0 - No intensity, 1 - Full intensity.
    float m_FieldAngle = 15;
};

The lighting can be added to the scene descriptor at a specific binding. We also need to add support for having more than one light source.

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.