Spatial geometry for augmented reality applications [closed] - geometry

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
Does anyone know any good book or web resource for geometric and mathematical fundamentals of augmented reality?
Thanks!

Here's a good library for Augmented Reality:
ARToolKit
Ports to various platforms:
NyARToolKit
A simple but still impressive sample application using this library:
Project Marble

A great read is Chapter 10 of the Black Art of 3d Game Programming. All the AR/3D maths you'll ever need is there.
Once you've mastered this stuff, you'll be ready for 3d spatial projections etc, for AR/Target tracking.

I can't point any specific book right now, but depending on your math background I'd suggest go in this order
Vector and Linear algebra, intermediate level, up to matrix operation, LU decomposition, cross product.
Projective geometry, up to homogenious coordinates, planar homography
3d graphics, viewing and projection matrix, frustum
Basics of image processing, thresholds, edge detection, line detection
After those 4 two you can understand rectangular marker tracking
Calculus of many variables, Fourier transform, DFT
Least squares method
Intermediate linear algebra, eigenvalues, eigenvectors, SVD
Advanced numerical methods, nonlinear least-squares, Gauss-Newton, Levenberg-Marquardt
Advanced image processing, blob detection SIFT/SURF/FAST
Intermediate projective geometry: Essential and fundamental matrices, epipolar geometry
Bundle adjustment
After that you can understand markerless tracking
And some more advanced math which is used in cutting edge AR:
Understanding of basics of Lie groups and algebras
Statistics, robust estimators
Quaternions
Kalman filters
Clifford algebras (Geometric algebra) - generalization of quaternions
Wavelets
Advanced projective geometry (like trifocal tensor, 5-point algorithm)

I'd recommend the following two books. Both are pricey but contain lots of really useful stuff in Projective Geometry which is what you need to know.
It's hard going though so unless you really want to understand the maths behind it you may want to use a third party library as suggested above.
Multiple View Geometry in Computer Vision by Hartkey and Zisserman
and
Three Dimensional Computer Vision: A Geometric Viewpoint by Faugeras

Related

Are there existing tools that raytrace triangle meshes?

Disclaimer: I'm not 100% on whether this is a well-formed question, so please feel free to comment and suggest improvements. I'll be actively looking out for ways to improve this question.
I have a triangle mesh, let's say the Stanford Bunny. Now, I want to raycast a ray from a source point in 3D along a 3D direction vector, and identify just the first intersection of that ray with the triangle mesh.
I already have a naive implementation cooked up. However, I'm looking for a more advanced implementation. In particular, I'll be casting many millions of rays in many directions, so I'm looking for a multi-threaded or GPU-accelerated implementation.
I have to believe that there must be some pretty complete projects online, as raycasting triangle meshes is a fundamental part of 3D computer graphics. However, I can't find anything beyond personal projects, which leads me to believe that I am using the wrong search terms, or something pretty simple along those lines.
I am looking for suggestions on existing tools that can raytrace polygonal meshes.
If all you need to do is find the distance to the mesh for millions of rays. Then it might be a good idea to look up CUDA raytracing tutorial online. This will show you how to cast many millions of rays. In most tutorials, raytracing is used to render to the screen with the camera matrix. However, this is not necessary. Simply adjust the rays starting parameters to what you need them to be such as 3D vector and position. Then output the data back to the CPU. Be weary of the bandwidth between the GPU and CPU sending millions of intersection points between the CPU and GPU can make the program run exceptionally slow.

Papers that Originally Introduced the Concept of Inverse Perspective Projection

I am studying the rasterization algorithm and try to make a list of papers which were seminal in this area. For example "A Parallel Algorithm for Polygon Rasterization" would be one.
The one or group of papers I am looking for at the moment, are the papers that introduced the concept of interpolating vertex attributes (RGB, n, st, etc.) across the surface of a triangle using the inverse projection method.
Basically, my goal is to get back to the source of the technique.
Any other fundamental/seminal paper you could actually recommend in this area would be helpful as well. Thanks
To answer the question in part, the Wikipedia article on Gouraud shading mentions Gouraud's PhD thesis and apparently a follow-up paper as sources.
Gouraud, Henri (1971). Computer Display of Curved Surfaces, Doctoral
Thesis. University of Utah. Gouraud, Henri (1971).
"Continuous shading
of curved surfaces". IEEE Transactions on Computers C–20 (6): 623–629.
doi:10.1109/T-C.1971.223313.

How does a graphics engine figure out how to place pixels to make a 3d image?

I was wondering what procedure a simple 3d program uses to draw 2d pixels so that they appear 3d. I'm really interested in this for drawing purposes since if a program can figure out how to use a flat screen to produce images with depth then maybe I could use those techniques in my drawing.
Are there any basic 3d engine out there I can look at? Without any 2d to 3d abstractions?
Two notions may interest you:
The perspective projection, which is the mathematical transformation which takes 3D points (or vertices) and the characteristics of your camera (position, orientation, frustrum, ...) and gives you the 2D projection of the point on your chosen medium (screen).
Wikipedia - 3D Projection
StackOverflow - Transform GPS-Points to Screen-Points with Perspective Projection in Android (I made a detailed answer)
The Painter's algorithm (since you seem to ask for drawing-related techniques), a rendering method which sorts by depth all the elements of your scene after their projection, and draws them on your medium by decreasing depth, to ensure a realistic output ("far objects hidden behind closer ones" - imitating painters method). This algorithm has however some limits (far from efficient in its basic implementation, can't easily deal with elements intersecting or circularly overlapping each others), so most of the days a more efficient method is used, the Z-buffering, which deals with depth conflicts on a pixel-to-pixel basis.
Wikipedia - Painter's algorithm
Wikipedia - Z-buffering
By combining those notions, you can actually implement your own simple 3D engine (in the other StackOverflow thread I'm pointing, I gave a link to an article I made about creating such an engine easily).
If you want to look at more complex engines and notions, you can take a look at the GPU Gems 3 by Nvidia for instance, or look at articles about OpenGL.
Hope it helped, bye !

Computational geometry algorithm which can deal with conic arc segments

I've just finished reading a book named "Computational Geometry Algorithms and Applications". The algorithm introduced in this book is very helpfull for my future work.
But algorithm in this book only concerned about straight line segments. what i want to known is the same algorithm that can deal with both straight lines and conic arcs.
Such as find intersections of mixed line segments and conic arcs; offset polygon with conic arcs; find convex hull of concave polygon with conic arc edge...
3rd party libs, like CGAL can deal with problems like this, but i want to known the details of the algorithm. what's book or materials should i refer to?
In general, computational geometry with curved arcs is more complicated and less explored. But not unexplored, and often similar techniques suffice. One place to look is CGAL, as you know; and LEDA, especially here:
(Added): In response to the request for literature references, you could start with the paper below, and search backward in time via its references, and forward in time via Google Scholar (which reports it is cited by 79 papers):
Eric Berberich, Arno Eigenwillig, Michael Hemmer, Susan Hert, Kurt Mehlhorn, Elmar Schömer
"A Computational Basis for Conic Arcs and Boolean Operations on Conic Polygons."
Lecture Notes in Computer Science Volume 2461, 2002, pp 174-186.
(Springer link)

Open Source Graph Drawing program supporting Planar graph testing? [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 11 years ago.
In graph theory, a planar graph is a graph that can be embedded in the plane, i.e., it can be drawn on the plane in such a way that its edges intersect only at their endpoints.
Their are many algorithms which exist for planar graph testing (i.e. determining if a given graph is Planar). The best ones are in O(n) where n is the number of vertices.
Which open source programs exist which support the following features:
Can Draw Planar Graphs
Support an O(n) Planar graph testing.
Support variable node size.
Support fixed drawing boundary region
Are open source
I have a few pointers for graph visualization methods:
Prefuse - original version is in Java and the newer stuff is flash.
Graphviz
Networkx with matplotlib - all in python
Ubigraph - for animated 3D visualization
I've found this one useful for all kinds of 2D work..
http://www.yworks.com/en/products_yed_about.html
It's java based so you should be able to run it anywhere you have a suitable jvm.
Graphanalyzer
From the site...
...
Graphanalyzer is an environment for visualization of graphs.
Graphanalyzer provides abilities for creating, processing of graphs
and shows the results of visualization. Program supports oriented and
nonoriented graphs, weighted and non weighted graphs. Program includes
many algorithms for graph processing, from path finding to planar
checking. This program is an irreplaceable helper for solving tasks
occurring in the graph theory. Visualization of graph and algorithm.
...
I'd suggest use build your own using boost-graph libraries. A good information can be found on Donald knuth home page. There are some softwares which I have not used very much. Graphthing is one of those. I do not think it'll meet your requirement. If you are a research guy, then I personally recommend not to be inclined towards visualization of graphs.

Resources