525 lines
32 KiB
C
525 lines
32 KiB
C
/*
|
|
Tested with LINT
|
|
*/
|
|
#define MTH_LOW
|
|
|
|
#include "gli_st.h"
|
|
#include "GLI_Defn.h"
|
|
#include "mater_st.h"
|
|
#include "light_st.h"
|
|
#include "PvObj_st.h"
|
|
#include "material.h"
|
|
#include "GeoSprit.h"
|
|
#include "proj.h"
|
|
#include "linear.h"
|
|
#include "vpt3D.h"
|
|
#include "camera.h"
|
|
#include "DLLInter.h"
|
|
|
|
extern GLI_tdstInternalGlobalValuesFor3dEngine *GLI_BIG_GLOBALS;
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
/*extern void GLI_NJA_vSendSpriteToClip(GLI_tdstAligned2DVector *a4_st2DVertex , MTH_tdxReal xZ , GLI_tdstInternalGlobalValuesFor3dEngine *p_stGlobaleMT);*/
|
|
/*extern void GLI_NJA_vSendSpriteToClipWithUV(GLI_tdstAligned2DVector *a4_st2DVertex ,MTH_tdxReal *a8_stUVVertex,MTH_tdxReal xZ ,GLI_tdstInternalGlobalValuesFor3dEngine *p_stGlobaleMT);*/
|
|
extern void GLI_vDoMaterialSelection(GLI_tdstInternalGlobalValuesFor3dEngine *p_stGlobaleMT);
|
|
/**********************************************************************************************/
|
|
/* Name: GLI_xDraw2DSprite*/
|
|
/* Goal: */
|
|
/* Code: Philippe Vimont / 1.0*/
|
|
/**********************************************************************************************/
|
|
void GLI_vDraw2DSprite ( GLD_tdstViewportAttributes *p_stVpt ,MTH_tdxReal xXMin,MTH_tdxReal xXMax,MTH_tdxReal xYMin,MTH_tdxReal xYMax,ACP_tdxHandleOfMaterial hMaterial)
|
|
{
|
|
GLI_tdstAligned2DVector a4_st2DVertex [5];
|
|
GEO_tdstColor stLocalColor;
|
|
stLocalColor . xG = stLocalColor . xB = stLocalColor. xR = 0.0f;
|
|
GLI_xSetMaterialAmbientCoef(hMaterial , &stLocalColor);
|
|
stLocalColor . xG = stLocalColor . xB = stLocalColor. xR = 1.0f;
|
|
GLI_xSetMaterialDiffuseCoef(hMaterial , &stLocalColor);
|
|
stLocalColor . xG = stLocalColor . xB = stLocalColor. xR = 0.0f;
|
|
GLI_xSetMaterialSpecularCoef(hMaterial , 0 , &stLocalColor);
|
|
|
|
a4_st2DVertex [0] . xX = (float)(long)xXMin;
|
|
a4_st2DVertex [0] . xY = (float)(long)xYMin;
|
|
a4_st2DVertex [0] . xOoZ =1.0f;
|
|
a4_st2DVertex [1] . xX = (float)(long)xXMax;
|
|
a4_st2DVertex [1] . xY = (float)(long)xYMin;
|
|
a4_st2DVertex [1] . xOoZ =1.0f;
|
|
a4_st2DVertex [2] . xX = (float)(long)xXMax;
|
|
a4_st2DVertex [2] . xY = (float)(long)xYMax;
|
|
a4_st2DVertex [2] . xOoZ =1.0f;
|
|
a4_st2DVertex [3] . xX = (float)(long)xXMin;
|
|
a4_st2DVertex [3] . xY = (float)(long)xYMax;
|
|
a4_st2DVertex [3] . xOoZ =1.0f;
|
|
GLI_BIG_GLOBALS -> hCurrentMaterial = hMaterial;
|
|
GLI_BIG_GLOBALS -> hCurrentMaterial -> xMaterialType = 0xFFFFFFFF - GLI_C_lIsTestingBackface;
|
|
GLI_BIG_GLOBALS -> lCurrentDrawMask = 0xFFFFFFFF - GLI_C_lIsTestingBackface;
|
|
GLI_BIG_GLOBALS -> lHierachDrawMask = 0xFFFFFFFF - GLI_C_lIsTestingBackface;
|
|
GLI_vDoMaterialSelection(GLI_BIG_GLOBALS );
|
|
GLI_DRV_vSendSpriteToClip( a4_st2DVertex , 1.0f / GLI_C_xZClippingNear, GLI_BIG_GLOBALS);
|
|
}
|
|
|
|
/**********************************************************************************************/
|
|
/* Name: GLI_xDraw2DSpriteWithUV*/
|
|
/* Goal: */
|
|
/* Code: Philippe Vimont / 1.0*/
|
|
/**********************************************************************************************/
|
|
void
|
|
GLI_vDraw2DSpriteWithUV ( GLD_tdstViewportAttributes *p_stVpt ,
|
|
MTH_tdxReal xXMin,
|
|
MTH_tdxReal xXMax,
|
|
MTH_tdxReal xYMin,
|
|
MTH_tdxReal xYMax,
|
|
MTH_tdxReal xUMin,
|
|
MTH_tdxReal xUMax,
|
|
MTH_tdxReal xVMin,
|
|
MTH_tdxReal xVMax,
|
|
ACP_tdxHandleOfMaterial hMaterial)
|
|
{
|
|
GLI_tdstAligned2DVector a4_st2DVertex [5];
|
|
MTH_tdxReal a4_stUVVertex [10];
|
|
GEO_tdstColor stLocalColor;
|
|
stLocalColor . xG = stLocalColor . xB = stLocalColor. xR = 0.0f;
|
|
GLI_xSetMaterialAmbientCoef(hMaterial , &stLocalColor);
|
|
stLocalColor . xG = stLocalColor . xB = stLocalColor. xR = 1.0f;
|
|
GLI_xSetMaterialDiffuseCoef(hMaterial , &stLocalColor);
|
|
stLocalColor . xG = stLocalColor . xB = stLocalColor. xR = 0.0f;
|
|
GLI_xSetMaterialSpecularCoef(hMaterial , 0 , &stLocalColor);
|
|
|
|
a4_st2DVertex [0] . xX = (float)(long)xXMin;
|
|
a4_st2DVertex [0] . xY = (float)(long)xYMin;
|
|
a4_st2DVertex [0] . xOoZ =1.0f;
|
|
a4_st2DVertex [1] . xX = (float)(long)xXMax;
|
|
a4_st2DVertex [1] . xY = (float)(long)xYMin;
|
|
a4_st2DVertex [1] . xOoZ =1.0f;
|
|
a4_st2DVertex [2] . xX = (float)(long)xXMax;
|
|
a4_st2DVertex [2] . xY = (float)(long)xYMax;
|
|
a4_st2DVertex [2] . xOoZ =1.0f;
|
|
a4_st2DVertex [3] . xX = (float)(long)xXMin;
|
|
a4_st2DVertex [3] . xY = (float)(long)xYMax;
|
|
a4_st2DVertex [3] . xOoZ =1.0f;
|
|
a4_stUVVertex [0] = xUMin;
|
|
a4_stUVVertex [0+1] = xVMin;
|
|
a4_stUVVertex [2] = xUMax;
|
|
a4_stUVVertex [2+1] = xVMin;
|
|
a4_stUVVertex [4] = xUMax;
|
|
a4_stUVVertex [4+1] = xVMax;
|
|
a4_stUVVertex [6] = xUMin;
|
|
a4_stUVVertex [6+1] = xVMax;
|
|
|
|
GLI_BIG_GLOBALS -> hCurrentMaterial = hMaterial;
|
|
GLI_BIG_GLOBALS -> hCurrentMaterial -> xMaterialType = 0xFFFFFFFF - GLI_C_lIsTestingBackface;
|
|
GLI_BIG_GLOBALS -> lCurrentDrawMask = 0xFFFFFFFF - GLI_C_lIsTestingBackface;
|
|
GLI_BIG_GLOBALS -> lHierachDrawMask = 0xFFFFFFFF - GLI_C_lIsTestingBackface;
|
|
GLI_vDoMaterialSelection(GLI_BIG_GLOBALS );
|
|
GLI_DRV_vSendSpriteToClipWithUV ( a4_st2DVertex ,a4_stUVVertex ,1.0f / GLI_C_xZClippingNear,GLI_BIG_GLOBALS);
|
|
}
|
|
|
|
/* STM- get rid of this in final version if we really don't need the old rot. code*/
|
|
#define USE_NEW_SPRITE
|
|
#ifdef USE_NEW_SPRITE
|
|
#pragma message(__FILE__ ": Using new sprite code")
|
|
/**********************************************************************************************/
|
|
/* Name: GLI_xDrawIndexedSprite*/
|
|
/* Goal: */
|
|
/* Code: Steve McCalla / 2.0*/
|
|
/* This function assumes that scale is always diagonal*/
|
|
/**********************************************************************************************/
|
|
|
|
void
|
|
GLI_vDrawIndexedSprite ( GLD_tdstViewportAttributes *p_stVpt ,
|
|
GEO_tdstGeometricObject *p_stObj ,
|
|
GEO_tdstIndexedSprite *p_stISpr ,
|
|
GLI_tdstInternalGlobalValuesFor3dEngine *p_stGlobaleMT)
|
|
{
|
|
GLI_tdstAligned3DVector stScaledPt[3];
|
|
GLI_tdstAligned2DVector a4_st2DVertex [4];
|
|
GLI_tdstAligned2DVector a2_st2DVertexLocal[3];
|
|
GLI_tdScreenVertx a4_ScrVertex[4];
|
|
GLI_tdScreenVertx *pVtx1, *pVtx2, *pVtx3, *pVtx4;
|
|
ACP_tdxIndex xSpriteNumber;
|
|
|
|
MTH_tdxReal xTempZ;
|
|
xSpriteNumber = 0;
|
|
|
|
if ((p_stISpr -> hSprite == NULL)
|
|
|| ((p_stGlobaleMT -> GLI_ScreenPoint + p_stISpr -> xCenterPoint) -> xOoZ < 0.0f)
|
|
|| (p_stISpr -> hSprite -> d_xSpriteDrawMode[xSpriteNumber] & GEO_C_lSpriteDrawDisable))
|
|
return;
|
|
|
|
assert (p_stISpr -> hSprite -> xNbSprites == 1);
|
|
assert (!(p_stISpr -> hSprite -> d_xSpriteDrawMode[xSpriteNumber] & GEO_C_lSpriteDrawMode2DRotativ));
|
|
assert (p_stISpr -> stSize.xX == 1.0);
|
|
assert (p_stISpr -> stSize.xY == 1.0);
|
|
|
|
pVtx1 = a4_ScrVertex;
|
|
pVtx2 = a4_ScrVertex+1;
|
|
pVtx3 = a4_ScrVertex+2;
|
|
pVtx4 = a4_ScrVertex+3;
|
|
|
|
stScaledPt[0].xX = p_stISpr -> hSprite -> d_xSizeOfSprite[xSpriteNumber].xX;
|
|
stScaledPt[0].xY = 0.0;
|
|
stScaledPt[1].xX = 0.0;
|
|
stScaledPt[1].xY = -p_stISpr -> hSprite -> d_xSizeOfSprite[xSpriteNumber].xY;
|
|
stScaledPt[2].xX = 0.0;
|
|
stScaledPt[2].xY = 0.0;
|
|
|
|
if (!POS_fn_ulIsNotScaledMatrix ( &p_stGlobaleMT -> gs_st_CurrentMatrixMultiplyedWithCameraMatrix))
|
|
{
|
|
MTH_tdxReal xScaleX;
|
|
MTH_tdxReal xScaleY;
|
|
xScaleX = POS_fn_xGetXScale(&(p_stGlobaleMT->gs_st_CurrentMatrixMultiplyedWithCameraMatrix));
|
|
xScaleY = POS_fn_xGetYScale(&(p_stGlobaleMT->gs_st_CurrentMatrixMultiplyedWithCameraMatrix));
|
|
|
|
stScaledPt[0].xX = xScaleX * p_stISpr -> hSprite -> d_xSizeOfSprite[xSpriteNumber].xX;
|
|
stScaledPt[1].xY = xScaleY * (-p_stISpr -> hSprite -> d_xSizeOfSprite[xSpriteNumber].xY);
|
|
}
|
|
|
|
xTempZ = p_stGlobaleMT->GLI_TurnedScaledDisplecedPoint[p_stISpr->xCenterPoint].xZ;
|
|
|
|
stScaledPt[0].xZ = xTempZ;
|
|
stScaledPt[1].xZ = xTempZ;
|
|
stScaledPt[2].xZ = xTempZ;
|
|
|
|
if (p_stISpr -> hSprite -> d_xSpriteDrawMode[xSpriteNumber] & GEO_C_lSpriteDrawMode2DScaled) {
|
|
|
|
GLI_xSerialProjectionNoTrans ( (( GLI_tdstSpecificAttributesFor3D *)p_stVpt->p_vSpecificToXD)->p_stCam,
|
|
3, stScaledPt, a2_st2DVertexLocal);
|
|
SetX(pVtx1, p_stGlobaleMT->GLI_ScreenPoint [p_stISpr->xCenterPoint].xX - a2_st2DVertexLocal[0].xX - a2_st2DVertexLocal[1].xX + a2_st2DVertexLocal[2].xX);
|
|
SetY(pVtx1, p_stGlobaleMT->GLI_ScreenPoint [p_stISpr->xCenterPoint].xY - a2_st2DVertexLocal[0].xY - a2_st2DVertexLocal[1].xY + a2_st2DVertexLocal[2].xY);
|
|
SetX(pVtx2, p_stGlobaleMT->GLI_ScreenPoint [p_stISpr->xCenterPoint].xX + a2_st2DVertexLocal[0].xX - a2_st2DVertexLocal[1].xX + a2_st2DVertexLocal[2].xX);
|
|
SetY(pVtx2, p_stGlobaleMT->GLI_ScreenPoint [p_stISpr->xCenterPoint].xY + a2_st2DVertexLocal[0].xY - a2_st2DVertexLocal[1].xY + a2_st2DVertexLocal[2].xY);
|
|
SetX(pVtx3, p_stGlobaleMT->GLI_ScreenPoint [p_stISpr->xCenterPoint].xX + a2_st2DVertexLocal[0].xX + a2_st2DVertexLocal[1].xX + a2_st2DVertexLocal[2].xX);
|
|
SetY(pVtx3, p_stGlobaleMT->GLI_ScreenPoint [p_stISpr->xCenterPoint].xY + a2_st2DVertexLocal[0].xY + a2_st2DVertexLocal[1].xY + a2_st2DVertexLocal[2].xY);
|
|
SetX(pVtx4, p_stGlobaleMT->GLI_ScreenPoint [p_stISpr->xCenterPoint].xX - a2_st2DVertexLocal[0].xX + a2_st2DVertexLocal[1].xX + a2_st2DVertexLocal[2].xX);
|
|
SetY(pVtx4, p_stGlobaleMT->GLI_ScreenPoint [p_stISpr->xCenterPoint].xY - a2_st2DVertexLocal[0].xY + a2_st2DVertexLocal[1].xY + a2_st2DVertexLocal[2].xY);
|
|
|
|
a4_st2DVertex [0] . xX = p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xX - a2_st2DVertexLocal[0] . xX - a2_st2DVertexLocal[1] . xX + a2_st2DVertexLocal[2] . xX ;
|
|
a4_st2DVertex [0] . xY = p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xY - a2_st2DVertexLocal[0] . xY - a2_st2DVertexLocal[1] . xY + a2_st2DVertexLocal[2] . xY ;
|
|
a4_st2DVertex [1] . xX = p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xX + a2_st2DVertexLocal[0] . xX - a2_st2DVertexLocal[1] . xX + a2_st2DVertexLocal[2] . xX ;
|
|
a4_st2DVertex [1] . xY = p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xY + a2_st2DVertexLocal[0] . xY - a2_st2DVertexLocal[1] . xY + a2_st2DVertexLocal[2] . xY ;
|
|
a4_st2DVertex [2] . xX = p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xX + a2_st2DVertexLocal[0] . xX + a2_st2DVertexLocal[1] . xX + a2_st2DVertexLocal[2] . xX ;
|
|
a4_st2DVertex [2] . xY = p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xY + a2_st2DVertexLocal[0] . xY + a2_st2DVertexLocal[1] . xY + a2_st2DVertexLocal[2] . xY ;
|
|
a4_st2DVertex [3] . xX = p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xX - a2_st2DVertexLocal[0] . xX + a2_st2DVertexLocal[1] . xX + a2_st2DVertexLocal[2] . xX ;
|
|
a4_st2DVertex [3] . xY = p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xY - a2_st2DVertexLocal[0] . xY + a2_st2DVertexLocal[1] . xY + a2_st2DVertexLocal[2] . xY ;
|
|
}
|
|
else {
|
|
SetX(pVtx1, (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr->xCenterPoint].xX + stScaledPt[0].xX + stScaledPt[1].xX));
|
|
SetY(pVtx1, (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr->xCenterPoint].xY + stScaledPt[0].xY + stScaledPt[1].xY));
|
|
SetX(pVtx2, (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr->xCenterPoint].xX - stScaledPt[0].xX + stScaledPt[1].xX));
|
|
SetY(pVtx2, (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr->xCenterPoint].xY - stScaledPt[0].xY + stScaledPt[1].xY));
|
|
SetX(pVtx3, (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr->xCenterPoint].xX - stScaledPt[0].xX - stScaledPt[1].xX));
|
|
SetY(pVtx3, (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr->xCenterPoint].xY - stScaledPt[0].xY - stScaledPt[1].xY));
|
|
SetX(pVtx4, (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr->xCenterPoint].xX + stScaledPt[0].xX - stScaledPt[1].xX));
|
|
SetY(pVtx4, (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr->xCenterPoint].xY + stScaledPt[0].xY - stScaledPt[1].xY));
|
|
|
|
a4_st2DVertex [0] . xX = (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xX + stScaledPt[0] . xX + stScaledPt[1] . xX);
|
|
a4_st2DVertex [0] . xY = (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xY + stScaledPt[0] . xY + stScaledPt[1] . xY);
|
|
a4_st2DVertex [1] . xX = (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xX - stScaledPt[0] . xX + stScaledPt[1] . xX);
|
|
a4_st2DVertex [1] . xY = (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xY - stScaledPt[0] . xY + stScaledPt[1] . xY);
|
|
a4_st2DVertex [2] . xX = (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xX - stScaledPt[0] . xX - stScaledPt[1] . xX);
|
|
a4_st2DVertex [2] . xY = (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xY - stScaledPt[0] . xY - stScaledPt[1] . xY);
|
|
a4_st2DVertex [3] . xX = (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xX + stScaledPt[0] . xX - stScaledPt[1] . xX);
|
|
a4_st2DVertex [3] . xY = (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xY + stScaledPt[0] . xY - stScaledPt[1] . xY);
|
|
|
|
}
|
|
|
|
p_stGlobaleMT -> hCurrentMaterial = GMT_fn_hGetVisualMaterial(p_stISpr -> hSprite -> d_hMaterial[xSpriteNumber]);
|
|
{
|
|
unsigned long xSaveDrawMsk;
|
|
xSaveDrawMsk = p_stGlobaleMT -> lHierachDrawMask ;
|
|
p_stGlobaleMT -> lHierachDrawMask &= ~GLI_C_lIsTestingBackface;
|
|
GLI_vDoMaterialSelection(p_stGlobaleMT);
|
|
|
|
p_stGlobaleMT->ulSpecularColorForSprite = ((unsigned long *) p_stGlobaleMT->GLI_aDEF_stColorsRLIS)[p_stISpr -> xCenterPoint];
|
|
GLI_DRV_vSendSpriteToClip(a4_st2DVertex , p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint].xOoZ, p_stGlobaleMT);
|
|
p_stGlobaleMT -> lHierachDrawMask = xSaveDrawMsk;
|
|
}
|
|
}
|
|
|
|
#else /* using old sprite code*/
|
|
#pragma message(__FILE__ ": Using old sprite code")
|
|
/**********************************************************************************************/
|
|
/* Name: GLI_xDrawIndexedSprite*/
|
|
/* Goal: */
|
|
/* Code: Philippe Vimont / 1.0*/
|
|
/**********************************************************************************************/
|
|
/*typedef struct GEO_tdstIndexedSprite_
|
|
{ ACP_tdxIndex xCenterPoint;
|
|
ACP_tdxHandleOfSprite hSprite;
|
|
MTH2D_tdstVector stSize;
|
|
} GEO_tdstIndexedSprite;*/
|
|
|
|
void
|
|
GLI_vDrawIndexedSprite ( GLD_tdstViewportAttributes *p_stVpt ,
|
|
GEO_tdstGeometricObject *p_stObj ,
|
|
GEO_tdstIndexedSprite *p_stISpr ,
|
|
GLI_tdstInternalGlobalValuesFor3dEngine *p_stGlobaleMT)
|
|
{
|
|
GLI_tdstAligned3DVector stRotatedAxis[5];
|
|
GLI_tdstAligned2DVector a4_st2DVertex [5];
|
|
GLI_tdstAligned2DVector a2_st2DVertexLocal[3];
|
|
MTH_tdxReal xCos,xSin,xLen;
|
|
ACP_tdxIndex xSpriteNumber;
|
|
MTH3D_tdstVector stYVector;
|
|
POS_tdstCompletePosition stTempMatrix1,stTempMatrix2;
|
|
xSpriteNumber = 0;
|
|
|
|
if (p_stISpr -> hSprite == NULL) return;
|
|
|
|
/* POS_fn_vSetIdentityMatrix(&stTempMatrix1);*/
|
|
/* POS_fn_vSetType(&stTempMatrix1,POS_C_xCompletePosition); // Optimization*/
|
|
/* POS_fn_vSetIdentityMatrix(&stTempMatrix2); // AR971214 not usefull*/
|
|
|
|
if ((p_stGlobaleMT -> GLI_ScreenPoint + p_stISpr -> xCenterPoint) -> xOoZ < 0.0f) return;
|
|
|
|
GLI_xSerialLinearOp ( 1, p_stObj->d_stListOfPointsNormals + p_stISpr -> xCenterPoint, stRotatedAxis , &p_stGlobaleMT -> gs_st_CurrentMatrixMultiplyedWithCameraMatrix);
|
|
|
|
POS_fn_vGetTranslationVector ( p_stGlobaleMT -> gs_st_CurrentMatrix ,(MTH3D_tdstVector *) &stRotatedAxis[1]);
|
|
|
|
MTH3D_M_vSubVector ( (MTH3D_tdstVector *)&stRotatedAxis[0], (MTH3D_tdstVector *)&stRotatedAxis[0], (MTH3D_tdstVector *)&stRotatedAxis[1]);
|
|
|
|
|
|
if (p_stISpr -> hSprite -> xNbSprites > 1)
|
|
{
|
|
xLen = MTH3D_M_xDotProductVector( (MTH3D_tdstVector *)stRotatedAxis , (MTH3D_tdstVector *)(p_stGlobaleMT->GLI_TurnedScaledDisplecedPoint + p_stISpr -> xCenterPoint) );
|
|
xLen = xLen / MTH3D_M_xNormVector ( p_stGlobaleMT->GLI_TurnedScaledDisplecedPoint + p_stISpr -> xCenterPoint);
|
|
for (xSpriteNumber = 0;
|
|
xSpriteNumber < p_stISpr -> hSprite -> xNbSprites - 1;
|
|
xSpriteNumber ++)
|
|
{
|
|
if ( p_stISpr -> hSprite -> d_xThresholds [ xSpriteNumber + 1 ] > xLen ) break;
|
|
}
|
|
} else {
|
|
xSpriteNumber = 0;
|
|
}
|
|
|
|
if (p_stISpr -> hSprite -> d_xSpriteDrawMode[xSpriteNumber] & GEO_C_lSpriteDrawDisable) return;
|
|
|
|
|
|
if (p_stISpr -> hSprite -> d_xSpriteDrawMode[xSpriteNumber] & GEO_C_lSpriteDrawMode2DRotativ)
|
|
{
|
|
xLen = MTH_M_xSqr( stRotatedAxis[0] . xX ) + MTH_M_xSqr( stRotatedAxis[0] . xY ) ;
|
|
if (xLen > 0.1f)
|
|
{
|
|
xSin = stRotatedAxis[0] . xX ;
|
|
if (xSin != xLen)
|
|
xCos = xLen - MTH_M_xSqr( xSin );
|
|
else
|
|
xCos = 0.0f;
|
|
xLen = MTH_M_xInvSqrt( xLen );
|
|
xCos = MTH_M_xSqrt( xCos ) * xLen;
|
|
xSin *= xLen;
|
|
if (stRotatedAxis[0] . xY < 0.0)
|
|
xCos = -xCos ;
|
|
} else{
|
|
xSin = 0.0;
|
|
xCos = 1.0;
|
|
}
|
|
} else
|
|
{
|
|
xSin = 0.0;
|
|
xCos = 1.0;
|
|
}
|
|
|
|
if (p_stISpr -> hSprite -> d_xSpriteDrawMode[xSpriteNumber] & GEO_C_lSpriteDrawMode2DScaled)
|
|
{
|
|
|
|
stRotatedAxis[0] . xX = p_stISpr -> stSize . xX * xCos * p_stISpr -> hSprite -> d_xSizeOfSprite[xSpriteNumber].xX;
|
|
stRotatedAxis[0] . xY = -p_stISpr -> stSize . xX * xSin * p_stISpr -> hSprite -> d_xSizeOfSprite[xSpriteNumber].xX;
|
|
stRotatedAxis[1] . xX = -p_stISpr -> stSize . xY * xSin * p_stISpr -> hSprite -> d_xSizeOfSprite[xSpriteNumber].xY;
|
|
stRotatedAxis[1] . xY = -p_stISpr -> stSize . xY * xCos * p_stISpr -> hSprite -> d_xSizeOfSprite[xSpriteNumber].xY;
|
|
stRotatedAxis[2] . xX = (-p_stISpr -> hSprite -> d_xDisplacementOfSprite [xSpriteNumber].xX * xCos - p_stISpr -> hSprite -> d_xDisplacementOfSprite [xSpriteNumber].xY * xSin) ;
|
|
stRotatedAxis[2] . xY = ( p_stISpr -> hSprite -> d_xDisplacementOfSprite [xSpriteNumber].xX * xSin - p_stISpr -> hSprite -> d_xDisplacementOfSprite [xSpriteNumber].xY * xCos) ;
|
|
if (!POS_fn_ulIsNotScaledMatrix ( &p_stGlobaleMT -> gs_st_CurrentMatrixMultiplyedWithCameraMatrix))
|
|
{
|
|
stRotatedAxis[0] . xZ = stRotatedAxis[1] . xZ = stRotatedAxis[2] . xZ = 0.f;
|
|
stTempMatrix2 = p_stGlobaleMT -> gs_st_CurrentMatrixMultiplyedWithCameraMatrix;
|
|
POS_fn_vInvertIsoMatrix ( &stTempMatrix1 , &p_stGlobaleMT -> gs_st_CurrentMatrixMultiplyedWithCameraMatrix) ;
|
|
POS_fn_vResetScaleMatrix ( &stTempMatrix1 ) ;
|
|
stYVector . xX = stYVector . xY = stYVector . xZ = 0.f;
|
|
POS_fn_vSetTranslationVector ( &stTempMatrix1 ,&stYVector);
|
|
POS_fn_vSetTranslationVector ( &stTempMatrix2 ,&stYVector);
|
|
POS_fn_vMulMatrixVertex ( (MTH3D_tdstVector *) &stRotatedAxis[0] , &stTempMatrix1 , (MTH3D_tdstVector *) &stRotatedAxis[0] ) ;
|
|
POS_fn_vMulMatrixVertex ( (MTH3D_tdstVector *) &stRotatedAxis[0] , &stTempMatrix2 , (MTH3D_tdstVector *) &stRotatedAxis[0] ) ;
|
|
POS_fn_vMulMatrixVertex ( (MTH3D_tdstVector *) &stRotatedAxis[1] , &stTempMatrix1 , (MTH3D_tdstVector *) &stRotatedAxis[1] ) ;
|
|
POS_fn_vMulMatrixVertex ( (MTH3D_tdstVector *) &stRotatedAxis[1] , &stTempMatrix2 , (MTH3D_tdstVector *) &stRotatedAxis[1] ) ;
|
|
POS_fn_vMulMatrixVertex ( (MTH3D_tdstVector *) &stRotatedAxis[2] , &stTempMatrix1 , (MTH3D_tdstVector *) &stRotatedAxis[2] ) ;
|
|
POS_fn_vMulMatrixVertex ( (MTH3D_tdstVector *) &stRotatedAxis[2] , &stTempMatrix2 , (MTH3D_tdstVector *) &stRotatedAxis[2] ) ;
|
|
}
|
|
|
|
/*stRotatedAxis[0] . xX = p_stISpr -> stSize . xX ;*/
|
|
/*stRotatedAxis[0] . xY = p_stISpr -> stSize . xY ;*/
|
|
stRotatedAxis[0] . xZ =p_stGlobaleMT->GLI_TurnedScaledDisplecedPoint[p_stISpr -> xCenterPoint].xZ;
|
|
stRotatedAxis[1] . xZ =p_stGlobaleMT->GLI_TurnedScaledDisplecedPoint[p_stISpr -> xCenterPoint].xZ;
|
|
stRotatedAxis[2] . xZ =p_stGlobaleMT->GLI_TurnedScaledDisplecedPoint[p_stISpr -> xCenterPoint].xZ;
|
|
GLI_xSerialProjection ( (( GLI_tdstSpecificAttributesFor3D *)p_stVpt->p_vSpecificToXD)->p_stCam,
|
|
3,
|
|
stRotatedAxis,
|
|
a2_st2DVertexLocal ) ;
|
|
a2_st2DVertexLocal [0] . xX -= (( GLI_tdstSpecificAttributesFor3D *)p_stVpt->p_vSpecificToXD) -> p_stCam -> stTrans . xX ;
|
|
a2_st2DVertexLocal [0] . xY -= (( GLI_tdstSpecificAttributesFor3D *)p_stVpt->p_vSpecificToXD) -> p_stCam -> stTrans . xY ;
|
|
a2_st2DVertexLocal [1] . xX -= (( GLI_tdstSpecificAttributesFor3D *)p_stVpt->p_vSpecificToXD) -> p_stCam -> stTrans . xX ;
|
|
a2_st2DVertexLocal [1] . xY -= (( GLI_tdstSpecificAttributesFor3D *)p_stVpt->p_vSpecificToXD) -> p_stCam -> stTrans . xY ;
|
|
a2_st2DVertexLocal [2] . xX -= (( GLI_tdstSpecificAttributesFor3D *)p_stVpt->p_vSpecificToXD) -> p_stCam -> stTrans . xX ;
|
|
a2_st2DVertexLocal [2] . xY -= (( GLI_tdstSpecificAttributesFor3D *)p_stVpt->p_vSpecificToXD) -> p_stCam -> stTrans . xY ;
|
|
a4_st2DVertex [0] . xX = p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xX - a2_st2DVertexLocal[0] . xX - a2_st2DVertexLocal[1] . xX + a2_st2DVertexLocal[2] . xX ;
|
|
a4_st2DVertex [0] . xY = p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xY - a2_st2DVertexLocal[0] . xY - a2_st2DVertexLocal[1] . xY + a2_st2DVertexLocal[2] . xY ;
|
|
a4_st2DVertex [1] . xX = p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xX + a2_st2DVertexLocal[0] . xX - a2_st2DVertexLocal[1] . xX + a2_st2DVertexLocal[2] . xX ;
|
|
a4_st2DVertex [1] . xY = p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xY + a2_st2DVertexLocal[0] . xY - a2_st2DVertexLocal[1] . xY + a2_st2DVertexLocal[2] . xY ;
|
|
a4_st2DVertex [2] . xX = p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xX + a2_st2DVertexLocal[0] . xX + a2_st2DVertexLocal[1] . xX + a2_st2DVertexLocal[2] . xX ;
|
|
a4_st2DVertex [2] . xY = p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xY + a2_st2DVertexLocal[0] . xY + a2_st2DVertexLocal[1] . xY + a2_st2DVertexLocal[2] . xY ;
|
|
a4_st2DVertex [3] . xX = p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xX - a2_st2DVertexLocal[0] . xX + a2_st2DVertexLocal[1] . xX + a2_st2DVertexLocal[2] . xX ;
|
|
a4_st2DVertex [3] . xY = p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xY - a2_st2DVertexLocal[0] . xY + a2_st2DVertexLocal[1] . xY + a2_st2DVertexLocal[2] . xY ;
|
|
}
|
|
else
|
|
{
|
|
stRotatedAxis[0] . xX = p_stISpr -> stSize . xX * xCos * p_stISpr -> hSprite -> d_xSizeOfSprite[xSpriteNumber].xX;
|
|
stRotatedAxis[0] . xY = -p_stISpr -> stSize . xX * xSin * p_stISpr -> hSprite -> d_xSizeOfSprite[xSpriteNumber].xX;
|
|
stRotatedAxis[1] . xX = -p_stISpr -> stSize . xY * xSin * p_stISpr -> hSprite -> d_xSizeOfSprite[xSpriteNumber].xY;
|
|
stRotatedAxis[1] . xY = -p_stISpr -> stSize . xY * xCos * p_stISpr -> hSprite -> d_xSizeOfSprite[xSpriteNumber].xY;
|
|
stRotatedAxis[2] . xX = ( p_stISpr -> hSprite -> d_xDisplacementOfSprite [xSpriteNumber].xX * xCos + p_stISpr -> hSprite -> d_xDisplacementOfSprite [xSpriteNumber].xY * xSin) ;
|
|
stRotatedAxis[2] . xY = (-p_stISpr -> hSprite -> d_xDisplacementOfSprite [xSpriteNumber].xX * xSin + p_stISpr -> hSprite -> d_xDisplacementOfSprite [xSpriteNumber].xY * xCos) ;
|
|
if (!POS_fn_ulIsNotScaledMatrix ( &p_stGlobaleMT -> gs_st_CurrentMatrixMultiplyedWithCameraMatrix))
|
|
{
|
|
stRotatedAxis[0] . xZ = stRotatedAxis[1] . xZ = stRotatedAxis[2] . xZ = 0.f;
|
|
stTempMatrix2 = p_stGlobaleMT -> gs_st_CurrentMatrixMultiplyedWithCameraMatrix;
|
|
POS_fn_vInvertIsoMatrix ( &stTempMatrix1 , &p_stGlobaleMT -> gs_st_CurrentMatrixMultiplyedWithCameraMatrix) ;
|
|
POS_fn_vResetScaleMatrix ( &stTempMatrix1 ) ;
|
|
stYVector . xX = stYVector . xY = stYVector . xZ = 0.f;
|
|
POS_fn_vSetTranslationVector ( &stTempMatrix1 ,&stYVector);
|
|
POS_fn_vSetTranslationVector ( &stTempMatrix2 ,&stYVector);
|
|
POS_fn_vMulMatrixVertex ( (MTH3D_tdstVector *) &stRotatedAxis[0] , &stTempMatrix1 , (MTH3D_tdstVector *) &stRotatedAxis[0] ) ;
|
|
POS_fn_vMulMatrixVertex ( (MTH3D_tdstVector *) &stRotatedAxis[0] , &stTempMatrix2 , (MTH3D_tdstVector *) &stRotatedAxis[0] ) ;
|
|
POS_fn_vMulMatrixVertex ( (MTH3D_tdstVector *) &stRotatedAxis[1] , &stTempMatrix1 , (MTH3D_tdstVector *) &stRotatedAxis[1] ) ;
|
|
POS_fn_vMulMatrixVertex ( (MTH3D_tdstVector *) &stRotatedAxis[1] , &stTempMatrix2 , (MTH3D_tdstVector *) &stRotatedAxis[1] ) ;
|
|
POS_fn_vMulMatrixVertex ( (MTH3D_tdstVector *) &stRotatedAxis[2] , &stTempMatrix1 , (MTH3D_tdstVector *) &stRotatedAxis[2] ) ;
|
|
POS_fn_vMulMatrixVertex ( (MTH3D_tdstVector *) &stRotatedAxis[2] , &stTempMatrix2 , (MTH3D_tdstVector *) &stRotatedAxis[2] ) ;
|
|
}
|
|
|
|
a4_st2DVertex [0] . xX = (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xX + stRotatedAxis[0] . xX + stRotatedAxis[1] . xX + stRotatedAxis[2] . xX );
|
|
a4_st2DVertex [0] . xY = (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xY + stRotatedAxis[0] . xY + stRotatedAxis[1] . xY + stRotatedAxis[2] . xY );
|
|
a4_st2DVertex [1] . xX = (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xX - stRotatedAxis[0] . xX + stRotatedAxis[1] . xX + stRotatedAxis[2] . xX );
|
|
a4_st2DVertex [1] . xY = (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xY - stRotatedAxis[0] . xY + stRotatedAxis[1] . xY + stRotatedAxis[2] . xY );
|
|
a4_st2DVertex [2] . xX = (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xX - stRotatedAxis[0] . xX - stRotatedAxis[1] . xX + stRotatedAxis[2] . xX );
|
|
a4_st2DVertex [2] . xY = (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xY - stRotatedAxis[0] . xY - stRotatedAxis[1] . xY + stRotatedAxis[2] . xY );
|
|
a4_st2DVertex [3] . xX = (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xX + stRotatedAxis[0] . xX - stRotatedAxis[1] . xX + stRotatedAxis[2] . xX );
|
|
a4_st2DVertex [3] . xY = (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xY + stRotatedAxis[0] . xY - stRotatedAxis[1] . xY + stRotatedAxis[2] . xY );
|
|
}
|
|
|
|
p_stGlobaleMT -> hCurrentMaterial = GMT_fn_hGetVisualMaterial(p_stISpr -> hSprite -> d_hMaterial[xSpriteNumber]);
|
|
{
|
|
unsigned long xSaveDrawMsk;
|
|
xSaveDrawMsk = p_stGlobaleMT -> lHierachDrawMask ;
|
|
p_stGlobaleMT -> lHierachDrawMask &= ~GLI_C_lIsTestingBackface;
|
|
GLI_vDoMaterialSelection(p_stGlobaleMT);
|
|
|
|
GLI_DRV_vSendSpriteToClip( a4_st2DVertex , p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint].xOoZ, p_stGlobaleMT);
|
|
p_stGlobaleMT -> lHierachDrawMask = xSaveDrawMsk;
|
|
}
|
|
}
|
|
|
|
#endif /* USE_NEW_SPRITE*/
|
|
|
|
/**********************************************************************************************/
|
|
/* Name: GLI_vPickIndexedSprite*/
|
|
/* Goal: return's !0 if p_stScreenCoord is in the sprite.*/
|
|
/* Code: Philippe Vimont / 1.0*/
|
|
/**********************************************************************************************/
|
|
#define GLI_M_bIsOnTheLeft(a,b) ( (a4_st2DVertex[b].xY - a4_st2DVertex[a].xY) * (p_stScreenCoord->xX - a4_st2DVertex[a].xX) > (a4_st2DVertex[b].xX - a4_st2DVertex[a].xX) * (p_stScreenCoord->xY - a4_st2DVertex[a].xY) )
|
|
|
|
long GLI_vPickIndexedSprite
|
|
(
|
|
GLD_tdstViewportAttributes *p_stVpt ,
|
|
GEO_tdstGeometricObject *p_stObj ,
|
|
GEO_tdstIndexedSprite *p_stISpr ,
|
|
MTH2D_tdstVector *p_stScreenCoord,
|
|
GLI_tdstInternalGlobalValuesFor3dEngine *p_stGlobaleMT
|
|
)
|
|
{
|
|
#ifdef _DEBUG
|
|
ACP_tdxHandleOfMaterial hVisualMat;
|
|
GLI_tdstAligned3DVector stScaledPt[3];
|
|
GLI_tdstAligned2DVector a4_st2DVertex [4];
|
|
GLI_tdstAligned2DVector a2_st2DVertexLocal[3];
|
|
ACP_tdxIndex xSpriteNumber;
|
|
|
|
|
|
MTH_tdxReal xTempZ; /* make this a MTH_XXX something or another*/
|
|
xSpriteNumber = 0;
|
|
|
|
if ((p_stISpr -> hSprite == NULL) || ((p_stGlobaleMT -> GLI_ScreenPoint + p_stISpr -> xCenterPoint) -> xOoZ < 0.0f) || (p_stISpr -> hSprite -> d_xSpriteDrawMode[xSpriteNumber] & GEO_C_lSpriteDrawDisable))
|
|
return 0;
|
|
|
|
assert (p_stISpr -> hSprite -> xNbSprites == 1);
|
|
assert (!(p_stISpr -> hSprite -> d_xSpriteDrawMode[xSpriteNumber] & GEO_C_lSpriteDrawMode2DRotativ));
|
|
assert (p_stISpr -> stSize.xX == 1.0);
|
|
assert (p_stISpr -> stSize.xY == 1.0);
|
|
|
|
stScaledPt[0].xX = p_stISpr -> hSprite -> d_xSizeOfSprite[xSpriteNumber].xX;
|
|
stScaledPt[0].xY = 0.0;
|
|
stScaledPt[1].xX = 0.0;
|
|
stScaledPt[1].xY = -p_stISpr -> hSprite -> d_xSizeOfSprite[xSpriteNumber].xY;
|
|
stScaledPt[2].xX = 0.0;
|
|
stScaledPt[2].xY = 0.0;
|
|
|
|
if (!POS_fn_ulIsNotScaledMatrix ( &p_stGlobaleMT -> gs_st_CurrentMatrixMultiplyedWithCameraMatrix))
|
|
{
|
|
MTH_tdxReal xScaleX;
|
|
MTH_tdxReal xScaleY;
|
|
xScaleX = POS_fn_xGetXScale(&(p_stGlobaleMT->gs_st_CurrentMatrixMultiplyedWithCameraMatrix));
|
|
xScaleY = POS_fn_xGetYScale(&(p_stGlobaleMT->gs_st_CurrentMatrixMultiplyedWithCameraMatrix));
|
|
|
|
stScaledPt[0].xX = xScaleX * p_stISpr -> hSprite -> d_xSizeOfSprite[xSpriteNumber].xX;
|
|
stScaledPt[1].xY = xScaleY * (-p_stISpr -> hSprite -> d_xSizeOfSprite[xSpriteNumber].xY);
|
|
}
|
|
|
|
xTempZ = p_stGlobaleMT->GLI_TurnedScaledDisplecedPoint[p_stISpr->xCenterPoint].xZ;
|
|
|
|
stScaledPt[0].xZ = xTempZ;
|
|
stScaledPt[1].xZ = xTempZ;
|
|
stScaledPt[2].xZ = xTempZ;
|
|
|
|
if (p_stISpr -> hSprite -> d_xSpriteDrawMode[xSpriteNumber] & GEO_C_lSpriteDrawMode2DScaled) {
|
|
|
|
GLI_xSerialProjectionNoTrans ( (( GLI_tdstSpecificAttributesFor3D *)p_stVpt->p_vSpecificToXD)->p_stCam,
|
|
3, stScaledPt, a2_st2DVertexLocal);
|
|
a4_st2DVertex [0] . xX = p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xX - a2_st2DVertexLocal[0] . xX - a2_st2DVertexLocal[1] . xX + a2_st2DVertexLocal[2] . xX ;
|
|
a4_st2DVertex [0] . xY = p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xY - a2_st2DVertexLocal[0] . xY - a2_st2DVertexLocal[1] . xY + a2_st2DVertexLocal[2] . xY ;
|
|
a4_st2DVertex [1] . xX = p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xX + a2_st2DVertexLocal[0] . xX - a2_st2DVertexLocal[1] . xX + a2_st2DVertexLocal[2] . xX ;
|
|
a4_st2DVertex [1] . xY = p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xY + a2_st2DVertexLocal[0] . xY - a2_st2DVertexLocal[1] . xY + a2_st2DVertexLocal[2] . xY ;
|
|
a4_st2DVertex [2] . xX = p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xX + a2_st2DVertexLocal[0] . xX + a2_st2DVertexLocal[1] . xX + a2_st2DVertexLocal[2] . xX ;
|
|
a4_st2DVertex [2] . xY = p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xY + a2_st2DVertexLocal[0] . xY + a2_st2DVertexLocal[1] . xY + a2_st2DVertexLocal[2] . xY ;
|
|
a4_st2DVertex [3] . xX = p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xX - a2_st2DVertexLocal[0] . xX + a2_st2DVertexLocal[1] . xX + a2_st2DVertexLocal[2] . xX ;
|
|
a4_st2DVertex [3] . xY = p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xY - a2_st2DVertexLocal[0] . xY + a2_st2DVertexLocal[1] . xY + a2_st2DVertexLocal[2] . xY ;
|
|
}
|
|
else {
|
|
a4_st2DVertex [0] . xX = (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xX + stScaledPt[0] . xX + stScaledPt[1] . xX);
|
|
a4_st2DVertex [0] . xY = (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xY + stScaledPt[0] . xY + stScaledPt[1] . xY);
|
|
a4_st2DVertex [1] . xX = (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xX - stScaledPt[0] . xX + stScaledPt[1] . xX);
|
|
a4_st2DVertex [1] . xY = (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xY - stScaledPt[0] . xY + stScaledPt[1] . xY);
|
|
a4_st2DVertex [2] . xX = (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xX - stScaledPt[0] . xX - stScaledPt[1] . xX);
|
|
a4_st2DVertex [2] . xY = (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xY - stScaledPt[0] . xY - stScaledPt[1] . xY);
|
|
a4_st2DVertex [3] . xX = (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xX + stScaledPt[0] . xX - stScaledPt[1] . xX);
|
|
a4_st2DVertex [3] . xY = (float)(p_stGlobaleMT->GLI_ScreenPoint [p_stISpr -> xCenterPoint] . xY + stScaledPt[0] . xY - stScaledPt[1] . xY);
|
|
}
|
|
|
|
hVisualMat=GMT_fn_hGetVisualMaterial(p_stISpr -> hSprite -> d_hMaterial[xSpriteNumber]);
|
|
if (GLI_M_bIsOnTheLeft(0,1))
|
|
if (GLI_M_bIsOnTheLeft(1,2))
|
|
if (GLI_M_bIsOnTheLeft(2,3))
|
|
if (GLI_M_bIsOnTheLeft(3,0))
|
|
return ( 1 );
|
|
|
|
#endif
|
|
return(0);
|
|
}
|
|
|
|
#ifdef __cplusplus
|
|
} /*extern "C"*/
|
|
#endif
|