You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
4.9 KiB
119 lines
4.9 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//===========================================================================// |
|
#if !defined( BEAMSEGDRAW_H ) |
|
#define BEAMSEGDRAW_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#define NOISE_DIVISIONS 128 |
|
|
|
|
|
#include "mathlib/vector.h" |
|
#include "materialsystem/imesh.h" |
|
|
|
//----------------------------------------------------------------------------- |
|
// Forward declarations |
|
//----------------------------------------------------------------------------- |
|
struct BeamTrail_t; |
|
class IMaterial; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// CBeamSegDraw is a simple interface to beam rendering. |
|
//----------------------------------------------------------------------------- |
|
struct BeamSeg_t |
|
{ |
|
Vector m_vPos; |
|
Vector m_vColor; |
|
float m_flTexCoord; // Y texture coordinate |
|
float m_flWidth; |
|
float m_flAlpha; |
|
}; |
|
|
|
class CBeamSegDraw |
|
{ |
|
public: |
|
CBeamSegDraw() : m_pRenderContext( NULL ) {} |
|
// Pass null for pMaterial if you have already set the material you want. |
|
void Start( IMatRenderContext *pRenderContext, int nSegs, IMaterial *pMaterial=0, CMeshBuilder *pMeshBuilder = NULL, int nMeshVertCount = 0 ); |
|
virtual void NextSeg( BeamSeg_t *pSeg ); |
|
void End(); |
|
|
|
protected: |
|
void SpecifySeg( const Vector &vecCameraPos, const Vector &vNextPos ); |
|
void ComputeNormal( const Vector &vecCameraPos, const Vector &vStartPos, const Vector &vNextPos, Vector *pNormal ); |
|
|
|
CMeshBuilder *m_pMeshBuilder; |
|
int m_nMeshVertCount; |
|
|
|
CMeshBuilder m_Mesh; |
|
BeamSeg_t m_Seg; |
|
|
|
int m_nTotalSegs; |
|
int m_nSegsDrawn; |
|
|
|
Vector m_vNormalLast; |
|
IMatRenderContext *m_pRenderContext; |
|
}; |
|
|
|
class CBeamSegDrawArbitrary : public CBeamSegDraw |
|
{ |
|
public: |
|
void SetNormal( const Vector &normal ); |
|
void NextSeg( BeamSeg_t *pSeg ); |
|
|
|
protected: |
|
void SpecifySeg( const Vector &vNextPos ); |
|
|
|
BeamSeg_t m_PrevSeg; |
|
}; |
|
|
|
#if 0 |
|
int ScreenTransform( const Vector& point, Vector& screen ); |
|
|
|
void DrawSegs( int noise_divisions, float *prgNoise, const model_t* spritemodel, |
|
float frame, int rendermode, const Vector& source, const Vector& delta, |
|
float startWidth, float endWidth, float scale, float freq, float speed, int segments, |
|
int flags, float* color, float fadeLength, float flHDRColorScale = 1.0f ); |
|
void DrawTeslaSegs( int noise_divisions, float *prgNoise, const model_t* spritemodel, |
|
float frame, int rendermode, const Vector& source, const Vector& delta, |
|
float startWidth, float endWidth, float scale, float freq, float speed, int segments, |
|
int flags, float* color, float fadeLength, float flHDRColorScale = 1.0f ); |
|
void DrawSplineSegs( int noise_divisions, float *prgNoise, |
|
const model_t* beammodel, const model_t* halomodel, float flHaloScale, |
|
float frame, int rendermode, int numAttachments, Vector* attachment, |
|
float startWidth, float endWidth, float scale, float freq, float speed, int segments, |
|
int flags, float* color, float fadeLength, float flHDRColorScale = 1.0f ); |
|
void DrawHalo(IMaterial* pMaterial, const Vector& source, float scale, float const* color, float flHDRColorScale = 1.0f ); |
|
void BeamDrawHalo( const model_t* spritemodel, float frame, int rendermode, const Vector& source, |
|
float scale, float* color, float flHDRColorScale = 1.0f ); |
|
void DrawDisk( int noise_divisions, float *prgNoise, const model_t* spritemodel, |
|
float frame, int rendermode, const Vector& source, const Vector& delta, |
|
float width, float scale, float freq, float speed, |
|
int segments, float* color, float flHDRColorScale = 1.0f ); |
|
void DrawCylinder( int noise_divisions, float *prgNoise, const model_t* spritemodel, |
|
float frame, int rendermode, const Vector& source, |
|
const Vector& delta, float width, float scale, float freq, |
|
float speed, int segments, float* color, float flHDRColorScale = 1.0f ); |
|
void DrawRing( int noise_divisions, float *prgNoise, void (*pfnNoise)( float *noise, int divs, float scale ), |
|
const model_t* spritemodel, float frame, int rendermode, |
|
const Vector& source, const Vector& delta, float width, float amplitude, |
|
float freq, float speed, int segments, float* color, float flHDRColorScale = 1.0f ); |
|
void DrawBeamFollow( const model_t* spritemodel, BeamTrail_t* pHead, int frame, int rendermode, Vector& delta, |
|
Vector& screen, Vector& screenLast, float die, const Vector& source, |
|
int flags, float width, float amplitude, float freq, float* color, float flHDRColorScale = 1.0f ); |
|
|
|
void DrawBeamQuadratic( const Vector &start, const Vector &control, const Vector &end, float width, const Vector &color, float scrollOffset, float flHDRColorScale = 1.0f ); |
|
#endif |
|
|
|
//----------------------------------------------------------------------------- |
|
// Assumes the material has already been bound |
|
//----------------------------------------------------------------------------- |
|
void DrawSprite( const Vector &vecOrigin, float flWidth, float flHeight, color32 color ); |
|
|
|
#endif // BEAMDRAW_H
|
|
|