GithubHelp home page GithubHelp logo

ine5420's People

Contributors

danielschroder avatar

Watchers

 avatar

ine5420's Issues

Display list of points for each object

When an object is selected on the list, its list of points should be displayed below the list of objects.

Add a label "Object" above the list of points, and a label "Points" above the list of points.

GCC parameters problem

After issue #62 has been merged to develop we're having some problems with CMake and GCC.

Scanning dependencies of target graphics
[ 50%] Building CXX object CMakeFiles/graphics.dir/main.cpp.o
c++: error: unrecognized command line option ‘-Weverything’
CMakeFiles/graphics.dir/build.make:62: recipe for target 'CMakeFiles/graphics.dir/main.cpp.o' failed
make[3]: *** [CMakeFiles/graphics.dir/main.cpp.o] Error 1
CMakeFiles/Makefile2:178: recipe for target 'CMakeFiles/graphics.dir/all' failed
make[2]: *** [CMakeFiles/graphics.dir/all] Error 2
CMakeFiles/Makefile2:190: recipe for target 'CMakeFiles/graphics.dir/rule' failed
make[1]: *** [CMakeFiles/graphics.dir/rule] Error 2
Makefile:157: recipe for target 'graphics' failed
make: *** [graphics] Error 2

We're using compiler specific parameters and this should be treated accordingly.

Make Window Extend Object

The world window will have to be an object on the list, just like any other, and will need to have the same operations, translation, scaling, and rotation.

In order for that to work, we need to make Window extend Object.

Point Transformations Optimization

The point transformation methods - used in the Point, Line, Polygon and Window objects - are calculating the transformations again for every point. Instead, a list of points should be passed into these transformation methods, and the transformation matrix should be calculated once and reused for every point.

Window as List Object

The Window should be displayed on the list of objects as the first/top item. When selected, the tools should manipulate the Window as if it was an object.

Translate world object

After selecting an object we want to be able to translate it to another position, using the arrow keys.

Perspective projection

Implement perspective projection of 3D objects over the 2D Window.
We must take in consideration the 3D clipping methods.

Rotate world objects

After selecting an object we want to be able to rotate clockwise and counter-clockwise, using the left and right arrow keys.

  • By the default we'll be rotating around the center of the object.
  • The user can click at any point to change the center of rotation.

Add. Rotate around the center of the world.

Control Points

It is not possible to see on the canvas the control points that determine the shape of objects. This is specially a problem when trying to visually verify the shape of curves. The control points should be displayed when an object is selected.

Bézier curves

We must implement curves as a new type of object in our world.

The first algorithm we should implement is the Bézier curve.

Draw points as filled circles

The points are being drawn as rectangles. We need to have a draw_circle primitive, so that we can draw the points.

Mix 2D & 3D Objects

The 3D world currently can only show 3D objects. It should be able to display 2D objects as well.

Scale world objects

After selecting an object we want to be able to scale it up and down, using the up and down arrow keys.

Improve Object Visibility Algorithm

If the line's mid-point is out of the window bounds, the line won't be displayed.

Currently, the object visibility algorithm will check only the mid-point of a line to determine if the line is visible. It should instead use the clipping region codes.

Point clipping

We must implement a basic point clipping algorithm that will be used in case of emergencies and if the user chooses it.

Bezier Curve Clipping

As we inserted a new type of object in our world we must improve our clipping methods so that they work with curves.

3D Objects

Implement a Object3D class, which is comprised of a wireframe model of 3D vertices, and is able to perform the translation, scaling and rotation transformations.

Spline Center

The center of the Spline is not being calculated from its control points.

Line-Clipping Method Switch UI

Currently, you have to change the code to choose between Liang-Barsky and Cohen-Shuterland.

We need to add a Line-Clipping menu to allow switching between the methods at runtime.

3D Coords

Implement Coord3D, which has the x, y, and z coordinates, and is able to perform the translation, scaling, and rotation transformations.

Different Coordinate Types

Today, we have a single Coord type for all coordinate systems: Window, Viewport and World.

We should have different Coord types for each coordinate system in order to make it clear the conversion required between them.

Object Visibility

Each object should have one of the following states:

  • Fully visible: all points presenting the object are within the Window bounds.
  • Partially visible: one or more points are outside the Window bounds.
  • Hidden: all points are outside the Window bounds.

When rendering the objects, the visibility state must be verified so that:

  • hidden objects are skipped during rendering.
  • partially visible objects are clipped first, then rendered.
  • fully visible objects are directly rendered without any transformation.

Use the Window coordinate system to determine visibility state of each object.

Implement transformation matrix

We need to implement a basic matrix structure and its operations.

It will be used to implement all the object transformations in the world.

Normalized coordinate system

We need to implement the normalized coordinate system for the world window and use it in the viewport transformation.

3D Object Rotation

The ability to move the 3D objects on all axises.

Currently, the 3D object can only move on the XY plane.

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.