Half-Life Re-imagined competition results on their way...
Check out Skewing textures in Hammer, our newest tutorial!
Say hello to neophus775, our newest member!

logo

Site Stuff

Reference

Maps

Community

ShoutBOX

Poll

Feeling Blue

What's your favourite shade of blue?

Azure

9

Cobalt

19

Turquoise

5

Cyan

8

Royal

3

Teal

3

Onliners

5 mins

Jessie

5 mins

NineTnine

7 mins

Windawz

7 mins

Solokiller

19 mins

ninja defuse

23 mins

Striker

47 mins

Cd5ssmffan

Affiliates

A gaming and technology blog by TWHL admins Penguinboy and Ant. A music blog by TWHL users Ant and Hugh.

Painlessly Drawing TriAPI In Orthogonal Mode

By Tony 'omega' Sergi

Orthogonal Triangle Renderering inside The Half-Life SDK

I decided to whip up this tutorial to show you the simplicity of drawing triangles in orthogonal mode using TriAPI. This is really simple, and I'm even doing all the work for you! An example regarding how to draw a quad over the entire screen is included at the end of the article.

Step #1: Load up tri.cpp and add this shell at the very bottom:

/*
=================
HUD_DrawOrthoTriangles
Orthogonal Triangles -- (relative to resolution,
smackdab on the screen) add them here
=================
*/

void HUD_DrawOrthoTriangles( void )
{
}



Step #2: Open up HUD_Redraw.cpp
Prototype the function above redraw():


void HUD_DrawOrthoTriangles( void );
int CHud :: Redraw( float flTime, int intermission )
{



Step #3: Add the function inside redraw, so it's called:

HUD_DrawOrthoTriangles is called from the HUD draw functions, because at this point the engine is already in orthogonal mode. Hence, the Z coord is a "magic 0", because it's not rendering in world space in ortho, it's 2D.

               ...
               pList = pList->pNext;
          }
     }

     //omega;draw orthogonal triangles
     HUD_DrawOrthoTriangles();

     // are we in demo mode? do we need to
     // draw the logo in the top corner?

     if (m_iLogo)
     ...



Step #4: Make use of it!

Example:

#define ORTHOEXAMPLE
#ifdef ORTHOEXAMPLE

void OrthoExample()
{
     gEngfuncs.pTriAPI->RenderMode(kRenderTransAdd); //additive

     // use hotglow, or any other sprite for the texture
     gEngfuncs.pTriAPI->SpriteTexture( (struct model_s *)
          gEngfuncs.GetSpritePointer(SPR_Load("sprites/hotglow.spr")),
          0);

     gEngfuncs.pTriAPI->CullFace( TRI_NONE ); //no culling
     gEngfuncs.pTriAPI->Begin(TRI_QUADS); //start our quad

     //remember, always list vertices in counter-clockwise
     // order, unless you want the quad to be backwards =)
     // the third value of vertex3f will always be 0 in ortho mode,
     // don't change it unless you wan't funny things to happen.


     //top left
     gEngfuncs.pTriAPI->TexCoord2f(0.0f, 1.0f);
     gEngfuncs.pTriAPI->Vertex3f(0, 0, 0);

     //bottom left
     gEngfuncs.pTriAPI->TexCoord2f(0.0f, 0.0f);
     gEngfuncs.pTriAPI->Vertex3f(0, ScreenHeight, 0);

     //bottom right
     gEngfuncs.pTriAPI->TexCoord2f(1.0f, 0.0f);
     gEngfuncs.pTriAPI->Vertex3f(ScreenWidth, ScreenHeight, 0);

     //top right
     gEngfuncs.pTriAPI->TexCoord2f(1.0f, 1.0f);
     gEngfuncs.pTriAPI->Vertex3f(ScreenWidth, 0, 0);

     gEngfuncs.pTriAPI->End(); //end our list of vertexes
     gEngfuncs.pTriAPI->RenderMode(kRenderNormal); //return to normal
}
#endif
void HUD_DrawOrthoTriangles( void )
{
#ifdef ORTHOEXAMPLE
     OrthoExample();
#endif
}


That about does it for this "tutorial". You now have the framework to draw triangles onto the hud with ease using TriAPI. Have fun, and enjoy! If you have any questions, email me at omega@thewavelength.net.

-omega