Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create an even sphere with triangles in OpenGL?

Tags:

opengl

Is there a formula that generates a set of coordinates of triangles whose vertices are located on a sphere?

I am probably looking for something that does something similar to gluSphere. Yet, I need to color the different triangles in specfic colors so that it seems I can't use gluSphere.

Also: I do understand that gluSphere draws edges along lines with equal longitudes and lattitudes which entails the triangles being small at the poles compared to their size at the equator. Now, if such a formula would generate the triangles such that their difference in size is minimized, that would be great.

like image 245
René Nyffenegger Avatar asked Dec 29 '10 22:12

René Nyffenegger


People also ask

Can you make a sphere out of triangles?

An icosahedron and related symmetry polyhedra can be used to define a high geodesic polyhedron by dividing triangular faces into smaller triangles, and projecting all the new vertices onto a sphere.

How to create a sphere in OpenGL?

In order to draw the surface of a sphere in OpenGL, you must triangulate adjacent vertices to form polygons. It is possible to use a single triangle strip to render the whole sphere. However, if the shared vertices have different normals or texture coordinates, then a single triangle strip cannot be used.

How to texture a sphere in OpenGL?

There are 2 ways to texture a sphere. Either by applying a cubemap or by applying a 2D texture. For best result, use a cubemap. The problem with applying a 2D texture is that when you wrap a 2D texture onto a sphere, the top and bottom area of the sphere, the texture looks squeezed.


2 Answers

To calculate the normals and the uv map.

Fortunately there is an amazing trick for calculating the normals, on a sphere. If you think about it, the normals on a sphere are indeed nothing more than the direction from the centre of the sphere, to that point!! Furthermore, if you think it through, that means the normals literally equal the point! i.e., it's the same vector! - just don't forget to normalise the length, for the normal.

You can win bar bets on that one: "is there a shape where all the normals happen to be exactly ... equal to the vertices?" At first glance you'd think, that's impossible, no such coincidental shape could exist. But of course the answer is simply "a sphere with radius one!" Heh!

Regarding the UVs. It is relatively easy on a sphere, assuming you're projecting to 2D in the "obvious" manner, a "rectangle-style" map projection. In that case the u and v is basically just the longitude / latitude of any point, normalised to 0,1.

Hope it helps!

Here's the all-time-classic web page that beautifully explains how to build an icosphere .. http://blog.andreaskahler.com/2009/06/creating-icosphere-mesh-in-code.html

like image 170
Fattie Avatar answered Oct 12 '22 15:10

Fattie


Start with a unit icosahedron. Then apply muliple homogenous subdivisions of the triangles, normalizing the resulting vertices distance to the origin.

like image 41
datenwolf Avatar answered Oct 12 '22 14:10

datenwolf