The book you want is called within the graphics industry "Foley Van Dam", after the original authors, but the actual title is "Computer Graphics: Principles and Practice". https://www.amazon.com/Computer-Graphics-Principles-Practice...
You may also be interested in "ACM: Transactions on Graphics", the Association of Computing Machinery's publication of computer graphics research papers. I suggest going to a University technical/research library, where you should be able to access the collection of issues from the 80's, where the original scan line, ray tracing, CSG, and pretty much every single advanced graphics technique (minus the deep learning) used today is documented by the original innovators.
At that same University research library they might have the collected set of course text books (mimeographs and photocopies) used for the 3-day long courses taught at SIGGRAPH every year.
These items are invaluable, and I reference them multiple times a year.
Way back in the day I read either the 1st or 2nd edition of this book: https://www.amazon.com/Computer-Graphics-Principles-Practice...
It's a classic in the computer graphics field, like Knuth is for algorithms. I'd recommend it alongside the OP's new book.
EDIT: But for anyone who is reading this wanting to learn about practical computer graphics, CG:P&P is NOT the resource to use! Learning the low-level rasterization algorithms used in computer graphics is an important thing to learn at some point, just like learning assembly language provides valuable insights even if you never touch a line of assembler again. But if you actually want to write graphics code on modern hardware with GPUs, I'd highly recommend Real Time Rendering instead: https://www.amazon.com/Real-Time-Rendering-Fourth-Tomas-Aken...
It is quite hard to tell from your height map (primarily because you haven't got any lighting on it) but I'd say its near definite that in your examples they are using high resolution base height maps than you are.
Now unlike what some of the other posters suggest it is highly unlikely the landscape is being modelled in a 3D modelling package. It is also highly unlikely they are using B-splines to render the landscape.
The big problem with using a higher resolution height map is the memory requirements. To this end there are multiple different solutions that "optimise" the height map data that is stored in memory. Nearby landscape does not need as much details as the landscape far away.
A really good technique for rendering VAST amounts of highly detailed landscape geometry is geometry clipmaps. It's quite complicated though. Another scheme I have used to great success in the past is Geo-Mipmapping. It's very simple and very fast. It produces excellent results, too, if you apply trilinear filtering techniques to your Geo-mipmaps. It is also fairly trivial to write an asynchronous chunk loader for such a landscape to provide good streaming performance of huge landscapes.
Anyway I'll answer your other questions.
As suggested by hbdavehb they will have an editor that loads the landscape and they can then place items on the map (as well, most probably, as editing the landscape). The models will be created in 3DS Max or Maya and then loaded into the editor for placing.
They are rendered with some other form of renderer. Often a portal renderer or maybe a BSP renderer.
This technique is known as texture splatting.
Looks like a skybox to me. It could I guess be a dynamic rendering ONTO a skybox.
The list is huge. But I would suggest looking into various image mapping techniques such as bump mapping (Especially normal mapping), cube mapping, Parallax mapping, Displacement mapping. Then there would be the lighting techniques such as global illumination, the Phong illumination (not the same as Phong shading), bidirectional reflectance distribution functions and precomputed radiance transfer. That's only scratching the surface. I highly recommend having a good read around. Computer Graphics: Principles and Practice by Foley et al. is an excellent book on rendering. The GPU Gems series is very good too. For a history of 3D rendering techniques and, in my opinion, still a very useful book its worth looking at Michael Abrash's Black Book as well.
Computer graphics principles and practice (Foley et al) defines the 2 as follows:
Texture mapping can be accomplished in two steps. A simple approach
starts by mapping the four corners of the pixel onto the surface. For
a bicubic patch this mapping naturally defines a set of points in the
surface's (s,t) coordinate space. Next, the pixel's corner points in
the surface's (s,t) coordinate space are mapped into the texture's
(u,v) coordinate space The four (u,v) points in the texture map
define a quadrilateral that approximates the more complex shape into
which the pixel may actually map due to surface curvature. We compute
a value for the pixel by summing all texels that lie within the
quadrilateral, weighting each by the fraction of the texel that lies
within the quadrilateral. If a transformed point in (u,v) space falls
outside of the texture map, the texture map may e though of as
replicated, like the patterns of Section 2.1.3 Rather than always use
the identity mapping between (s,t) and (u,v), we can define a
correspondence between the four corners of the 0-to-1 (s,t) rectangle
and a quadrilateral in (u,v). When the surface is a polygon, it is
common to assign texture map coordinates directly to its vertices.
mate. Your question is not of simple answer. I would explain the maths to you if I remembered. But it's been some time since I don't study linear algebra.
First, the methods you would call to do that uses the math you are looking for, and it is probably optimized!
But, regarding your questions about the maths behind it, here is a link:
https://en.wikipedia.org/wiki/3D_projection
This "3d vector to 2D vector screen point" is called projection, and you are probably referring to perspective projection. It is explained in the link.
If you are interested in learning it, you should first study some linear algebra, and then start studying computer graphics. (One good book: http://www.amazon.com/gp/product/0321399528/ref=as_li_qf_sp_asin_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0321399528&linkCode=as2&tag=casueffe06-20)
This is a solid list, but its a shame that no computer graphics resources are even mentioned. Although the reason for the omission is mentioned in the FAQ, I'd argue that computer graphics basics (images, basic rasterization, color spaces, etc.) are as fundamental as networking or databases. A link to Computer Graphics Principles and Practice (https://www.amazon.com/Computer-Graphics-Principles-Practice...) would have been nice.
You may also be interested in "ACM: Transactions on Graphics", the Association of Computing Machinery's publication of computer graphics research papers. I suggest going to a University technical/research library, where you should be able to access the collection of issues from the 80's, where the original scan line, ray tracing, CSG, and pretty much every single advanced graphics technique (minus the deep learning) used today is documented by the original innovators.
At that same University research library they might have the collected set of course text books (mimeographs and photocopies) used for the 3-day long courses taught at SIGGRAPH every year.
These items are invaluable, and I reference them multiple times a year.
It's a classic in the computer graphics field, like Knuth is for algorithms. I'd recommend it alongside the OP's new book.
EDIT: But for anyone who is reading this wanting to learn about practical computer graphics, CG:P&P is NOT the resource to use! Learning the low-level rasterization algorithms used in computer graphics is an important thing to learn at some point, just like learning assembly language provides valuable insights even if you never touch a line of assembler again. But if you actually want to write graphics code on modern hardware with GPUs, I'd highly recommend Real Time Rendering instead: https://www.amazon.com/Real-Time-Rendering-Fourth-Tomas-Aken...
It is quite hard to tell from your height map (primarily because you haven't got any lighting on it) but I'd say its near definite that in your examples they are using high resolution base height maps than you are.
Now unlike what some of the other posters suggest it is highly unlikely the landscape is being modelled in a 3D modelling package. It is also highly unlikely they are using B-splines to render the landscape.
The big problem with using a higher resolution height map is the memory requirements. To this end there are multiple different solutions that "optimise" the height map data that is stored in memory. Nearby landscape does not need as much details as the landscape far away.
A really good technique for rendering VAST amounts of highly detailed landscape geometry is geometry clipmaps. It's quite complicated though. Another scheme I have used to great success in the past is Geo-Mipmapping. It's very simple and very fast. It produces excellent results, too, if you apply trilinear filtering techniques to your Geo-mipmaps. It is also fairly trivial to write an asynchronous chunk loader for such a landscape to provide good streaming performance of huge landscapes.
Anyway I'll answer your other questions.
As suggested by hbdavehb they will have an editor that loads the landscape and they can then place items on the map (as well, most probably, as editing the landscape). The models will be created in 3DS Max or Maya and then loaded into the editor for placing.
They are rendered with some other form of renderer. Often a portal renderer or maybe a BSP renderer.
This technique is known as texture splatting.
Looks like a skybox to me. It could I guess be a dynamic rendering ONTO a skybox.
The list is huge. But I would suggest looking into various image mapping techniques such as bump mapping (Especially normal mapping), cube mapping, Parallax mapping, Displacement mapping. Then there would be the lighting techniques such as global illumination, the Phong illumination (not the same as Phong shading), bidirectional reflectance distribution functions and precomputed radiance transfer. That's only scratching the surface. I highly recommend having a good read around. Computer Graphics: Principles and Practice by Foley et al. is an excellent book on rendering. The GPU Gems series is very good too. For a history of 3D rendering techniques and, in my opinion, still a very useful book its worth looking at Michael Abrash's Black Book as well.
Good luck!
Computer graphics principles and practice (Foley et al) defines the 2 as follows:
mate. Your question is not of simple answer. I would explain the maths to you if I remembered. But it's been some time since I don't study linear algebra.
First, the methods you would call to do that uses the math you are looking for, and it is probably optimized!
But, regarding your questions about the maths behind it, here is a link: https://en.wikipedia.org/wiki/3D_projection
This "3d vector to 2D vector screen point" is called projection, and you are probably referring to perspective projection. It is explained in the link.
If you are interested in learning it, you should first study some linear algebra, and then start studying computer graphics. (One good book: http://www.amazon.com/gp/product/0321399528/ref=as_li_qf_sp_asin_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0321399528&linkCode=as2&tag=casueffe06-20)
[1a, 1b, 1c] Computer Graphics, Principles and Practice Series [2] Physically Based Rendering [3] Real Time Rendering
---
[1a] https://www.amazon.com/Computer-Graphics-Principles-James-Fo... [1b] https://www.amazon.com/Computer-Graphics-Principles-Practice... [1c] https://www.amazon.com/Computer-Graphics-Principles-Practice... [2] https://www.amazon.com/Physically-Based-Rendering-Theory-Imp... [3] https://www.amazon.com/Real-Time-Rendering-Third-Tomas-Akeni...
I understand that most graphics resources out there focus on real-time 3D rendering for games or writing raytracers, which I agree are currently industry specific topics. Your average developer isn't going to write a vector graphics library as part of their day job, but the browser abstracts computer graphics in the same way it abstracts networking or compilers, so if the goal is to understand the underlying principles of software platforms you'll be working on every day I think computer graphics is a strange, biased, omission.
https://www.amazon.com/WebGL-Programming-Guide-Interactive-G...
Historically, C++ has definitely been THE language for doing graphics but if you are starting these these, you would have to have really compelling reasons to start with C++ and not JavaScript and WebGL. And that's coming from someone who actually likes C++ and used to write it professionally.
# Book of Shaders
https://www.amazon.com/Game-Programming-Patterns-Robert-Nyst...
HN's own @munificent wrote a book discussing the most important design patterns in game design. Good book applicable beyond games.
# Game engine architecture
https://www.amazon.com/Engine-Architecture-Second-Jason-Greg...
# Computer graphics: Principles and Practice
https://www.amazon.com/Computer-Graphics-Principles-Practice...
This is more of college textbook if you'd prefer that but the WebGL one is more accessible and less dry.
# Physically Based Rendering & Real-Time Rendering
These discuss some state of the art techniques in computer graphics. I'm not going to claim to have really read them but from what I've seen they are very solid.
https://www.amazon.com/Computer-Graphics-Principles-Practice...
https://www.amazon.com/Physically-Based-Rendering-Third-Impl...