Files
Leviathan/Library/External/build/SpeedTreeRT/SourceCode/SimpleBillboard.h
T
2026-06-01 12:46:52 +02:00

77 lines
3.1 KiB
C++

///////////////////////////////////////////////////////////////////////
// Name: SimpleBillboard.h
//
// *** INTERACTIVE DATA VISUALIZATION (IDV) PROPRIETARY INFORMATION ***
//
// Copyright (c) 2001-2004 IDV, Inc.
// All Rights Reserved.
//
// IDV, Inc.
// 1233 Washington St. Suite 610
// Columbia, SC 29201
// Voice: (803) 799-1699
// Fax: (803) 931-0320
// Web: http://www.idvinc.com
//
// This software is supplied under the terms of a license agreement or
// nondisclosure agreement with Interactive Data Visualization and may not
// be copied or disclosed except in accordance with the terms of that
// agreement.
#pragma once
#include "Debug.h"
#include "LibVector_Source/IdvVector.h"
#include "UpVector.h"
///////////////////////////////////////////////////////////////////////
// class CSimpleBillboard declaration
//
class CSimpleBillboard
{
public:
CSimpleBillboard( );
static void ComputeUnitBillboard(const float* pCameraDir);
const float* GetBillboardCoords(float fWidth, float fHeight)
{
if (!IsValid( ))
{
#ifdef UPVECTOR_POS_Y
float afScale[3] = { fWidth, fHeight, fWidth };
#else
float afScale[3] = { fWidth, fWidth, fHeight };
#endif
m_acTreeBillboard[0] = afScale[0] * m_acUnitBillboard[0][0];
m_acTreeBillboard[1] = afScale[1] * m_acUnitBillboard[0][1];
m_acTreeBillboard[2] = afScale[2] * m_acUnitBillboard[0][2];
m_acTreeBillboard[3] = afScale[0] * m_acUnitBillboard[1][0];
m_acTreeBillboard[4] = afScale[1] * m_acUnitBillboard[1][1];
m_acTreeBillboard[5] = afScale[2] * m_acUnitBillboard[1][2];
m_acTreeBillboard[6] = afScale[0] * m_acUnitBillboard[2][0];
m_acTreeBillboard[7] = afScale[1] * m_acUnitBillboard[2][1];
m_acTreeBillboard[8] = afScale[2] * m_acUnitBillboard[2][2];
m_acTreeBillboard[9] = afScale[0] * m_acUnitBillboard[3][0];
m_acTreeBillboard[10] = afScale[1] * m_acUnitBillboard[3][1];
m_acTreeBillboard[11] = afScale[2] * m_acUnitBillboard[3][2];
Validate( );
}
return m_acTreeBillboard;
}
void Invalidate(void) { m_bValid = false; }
bool IsValid(void) const { return m_bValid; }
void Validate(void) { m_bValid = true; }
private:
float m_acTreeBillboard[12]; // used as a buffer for holding the scaled billboard coordinates
//lint esym(1401, m_acTreeBillboard)
static CVec3 m_acUnitBillboard[4]; // unitized quad computed to face the camera - all various sized
// billboards are scaled from this one billboard
bool m_bValid; // used billboarding computations to eliminate redundant computations
};