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.
Related
In the Oren–Nayar reflectance model, each facet is assumed to be Lambertian in reflectance. wiki
My understanding :
Law of reflection tells us that angle of incidence is equal to angle of reflection. So on a perfectly smooth surface, we get specular reflection. On a rough surface, an incident beam is scattered in a number of directions (each ray obeying law of reflection). To model this, a microfacet model is used which defines grooves (facets) on the surface. Now what does a lambertian facet mean? Are we assuming grooves on the already present grooves?
Lambertian BRDF is a theoretical model describing perfect diffuse reflection.
Microfacet BRDFs on the other hand are based on geometrical optics theory, where a surface is covered with microfacets and described by means of statistical distributions.
Oren-Nayar BRDF is an improvement over the theoretical Lambertian model, applying distribution of purely diffuse microfacets. So to answer your question - Lambertian microfacet is an entity itself not subject to microfacet theory, it's not a "groove with grooves". It's a purely theoretical concept used to apply microfacet theory to matte surfaces. There are many different BRDF models, only some of them follow geometrical optics like the microfacet models do, it is useful to keep in mind that microfacet is not a universal theory.
For further reading, I recommend the overview of BRDF models by Montes and Ureña, their classification was very enlightening to me at least.
I am currently trying to construct the area covered by a device over an operating period.
The first step in this process appears to be constructing a polygon of the covered area.
Since the pattern is not a standard shape, convex hulls overstate the covered area by jumping to the largest coverage area possible.
I have found a paper that appears to cover the concept of non-convex hull generation, but no discussions on how to implement this within a high level language.
http://www.geosensor.net/papers/duckham08.PR.pdf
Has anyone seen a straight forward algorithm for constructing a non-convex hull or concave hull or perhaps any python code to achieve the same result?
I have tried convex hulls mainly qhull, with a limited edge size with limited success.
Also I have noticed some licensed libraries that will not be able to be distributed, so unfortunately thats off the table.
Any better ideas or cookbooks?
You might try looking into Alpha Shapes. The CGAL library can compute them.
Edit: I see that the paper you linked references alpha shapes, and also has an algorithm listing. Is that not high level enough for you? Since you listed python as a tag, I'm sure there are Delaunay triangulation libraries in Python, which I think is the hardest part of implementing the algorithm; you just need to make sure you can modify the resulting triangulation output. The boundary query functions can probably be implemented with associative arrays.
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 !
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)
I am looking for some sample code (any language) of quadrilateral mesh generation. However, is seems quite a difficult task!
I am not picky, I'd like to mesh at least polygons with holes, nothing fancy! So, we're talking about 2D planar shapes here.
Any hint?
PS. Of course, if it could even handle curved surfaces, I'd be even happier!
Quadrilateral meshing is by no means easy, especially if the elements should be more or less well-formed. There are no algorithms that can deal with any arbitrary shape without deteriorating element shapes. For a whole lot of problem classes, there are algorithms in applied mathematics and computational science books and papers.