Spazz
Spazz

Reputation: 403

Draw the outlines of a 3D model with OpenGL ES

I need to add this classic effect which consist in highlighting a 3D model by stroking the outlines, just like this for example (without the transparent gradiant, just a solid stroke) :

enter image description here

I found a way to do this here which seems pretty simple and easy to implement. The guy is playing with the stencil buffer to compute the model shape, then he's drawing the model using wireframes and the thickness of the lines is doing the job. This is my problem, the wireframes. I'm using OpenGL ES 2.0, which means I can't use glPolygonMode to change the render mode to GL_LINE.

And I'm stuck here, I can't find any simple alternative way to do it, the most relevant solution i found for the moment is to implement the wireframe rendering myself, which is clearly not the easiest solution. To draw my objects I'm using glDrawElements with GL_TRIANGLES as primitive, I tried to use GL_TRIANGLE_STRIP as primitive but the result is definetely not the right one.

Any idea/trick to bypass the lack of glPolygonMode with OpenGL ES? Thanks in advance.

Upvotes: 0

Views: 2370

Answers (1)

codetiger
codetiger

Reputation: 2779

Drawing Outline or border for a Model in OpenGL ES 2 is not straight forward as the example you have mentioned.

Method 1: The easiest way is to do it in multiple passes.

Step 1 (Shape Pass): Render only the object and draw it in black using the same camera settings. And draw all other pixels with different color.

Cube looks like this

Step 2 (Render Pass): This is the usual Render pass, where you actually draw the objects in real color. This every time you a fragment, you have to test the color at the same pixel on the ShapePass image to see if any of the nearby 8 pixels are different in color. If all nearby pixels are of same color, then the fragment does not represent a border, else add some color to draw the border.

Cube Rendered with Border

Method 2: There are other techniques that can give you similar effects in a single pass. You can draw the same object twice, first time slightly scaled up with a single color, and then with real color.

Upvotes: 2

Related Questions