Jump to content

  • Log In with Google      Sign In   
  • Create Account

Circular HP bar (OpenGL)


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
7 replies to this topic

#1 AlexPowerUp   Members   -  Reputation: 109

Like
0Likes
Like

Posted 18 September 2013 - 06:56 AM

I was trying to make a circular HP bar using OpenGL with SDL, like this:
4uis3.jpg

It's Touhou 14 BTW.

For that the game uses a single image, which is this the attached file.

I suppose that the pink lines are the life bar itself and the blue thing is for marking in the lifebar how much damage you must do to trigger the spellcard. But, how can i do a circle using that image in a polygon shape?

Attached Thumbnails

  • lifebar.png


Sponsor:

#2 farsh   Members   -  Reputation: 123

Like
0Likes
Like

Posted 18 September 2013 - 07:04 AM

Hi!

 

The possible solution is to prerender the circle in some editor, add a gradient in alpha layer. Write a shader to render the circle on a quad and add a uniform for setting an alpha threshold value. 

 

Thanks!



#3 AlexPowerUp   Members   -  Reputation: 109

Like
0Likes
Like

Posted 18 September 2013 - 08:04 AM

Hi!

 

The possible solution is to prerender the circle in some editor, add a gradient in alpha layer. Write a shader to render the circle on a quad and add a uniform for setting an alpha threshold value. 

 

Thanks!

But the game only uses that image to create the circle. My question is what is doing the game to render that. But thanks anyway ^^

BTW, that game uses DirectX but i am trying to do it with OpenGL.


Edited by AlexPowerUp, 18 September 2013 - 08:05 AM.


#4 swiftcoder   Senior Moderators   -  Reputation: 10446

Like
0Likes
Like

Posted 18 September 2013 - 11:37 AM

If you look at the lack of anti-aliasing on the edges of the circle, it appears that they are drawing a hollow circle the hard way (i.e. specifying an inner and outer circle of vertices, and a series of quads along the radius), and then applying the texture across that circle.


Tristam MacDonald - Software Engineer @Amazon - [swiftcoding]


#5 Karsten_   Members   -  Reputation: 1655

Like
0Likes
Like

Posted 18 September 2013 - 12:20 PM

It seems like they might be stretching the texture around some hollow circles but I wonder how they make the health look like it is going down. There seems to be no gap in the image to stretch and yet the borders are solid throughout.

 

The only way I could see them doing it is 3 separate circles. A red inner one (using the right side of the texture). A White middle one (which is reshaped depending on health amount and using the left side of the texture) and then a red outer one.

 

Reshaping the middle white area would not be particularly easy though since there will be quite a few vertices.


Edited by Karsten_, 18 September 2013 - 12:27 PM.

Mutiny - Open-source C++ Unity re-implementation.
Defile of Eden 2 - FreeBSD and OpenBSD binaries of our latest game.


#6 Khatharr   Crossbones+   -  Reputation: 3083

Like
0Likes
Like

Posted 18 September 2013 - 04:49 PM

I think swift is right on this one. It looks like they just made a flat ring and they're applying the texture to it. You can adjust the displayed health level by just clipping how many verts you render. If you make the mesh out of 100 'cells', each having four verts and proceeding counter-clockwise, then you just render the first HP% * 4 verts of the mesh. The 'empty' section of the ring is probably just drawn underneath it.

 

However, the entire scenario is really moot, because there are no buses in Gensokyo.


void hurrrrrrrr() {__asm sub [ebp+4],5;}

There are ten kinds of people in this world: those who understand binary and those who don't.

#7 Kryzon   Prime Members   -  Reputation: 3314

Like
0Likes
Like

Posted 19 September 2013 - 12:51 PM

The Lord of the Rings: Return of the King game (EA, 2003) also has a circular meter which impressed me a lot, as it's such an usual shape for a meter.

 

16h6jxh.jpg

 

That is, until I realized the functionality named  "Stencil testing". You set up the stencil buffer, draw a polygon marking the region you want the life content to appear (or not appear, depends on the stencil function), draw the content that's going to be stencil-tested and as last step you draw the life bar's frame or edges on top.

 

• You can do it directly as a textured mesh that's vertex-animated as has been suggested above, and I agree that it's what the game you're referring to is using - based on the small textures employed that only have a "slice" of what the entire graphic should be.

 

• Using the aforementioned stencil test and dedicated sprites gives you more graphical quality: you can have your artist embelish the life bar and life content designs with patterns and ornaments. This is good for circular\round meters, life-bars, counters and in fact any shape of graphic you want. If you have square or rectangular shapes, you can also use a scissor test which I think it's a bit faster and simpler to set up.

I used stenciling with a circular meter for a game, as a composite of sprites and one of the sprites was stencil-tested so as to look cut-off:

 

dbldet.png

 

The above is just a mockup. It looked like this in the game:

 

2h8d7yg.jpg

 

http://en.wikibooks.org/wiki/OpenGL_Programming/Stencil_buffer#Sample

http://research.ncl.ac.uk/game/mastersdegree/graphicsforgames/scissorsandstencils/Tutorial%205%20-%20Scissors%20and%20Stencils.pdf#page=7


Edited by Kryzon, 19 September 2013 - 12:57 PM.


#8 AlexPowerUp   Members   -  Reputation: 109

Like
0Likes
Like

Posted 21 September 2013 - 08:14 AM

...

OMG thanks now i am doing it that way <3






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS