thug/Code/Gfx/NGC/NX/grass.h

152 lines
5.6 KiB
C
Raw Normal View History

2016-02-13 21:39:12 +00:00
//-----------------------------------------------------------------------------
// File: XBFur.h
//
// Copyright (c) 2000-2001 Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
//#include "xfvf.h"
#include <gfx/Ngc/p_nxgeom.h>
//#define XBFUR_MAXSLICE_LOG2 5
//#define XBFUR_MAXSLICE (1 << XBFUR_MAXSLICE_LOG2)
//
//extern float g_fOneInch;
//
//#define FVF_XYZDIFF (D3DFVF_XYZ|D3DFVF_DIFFUSE)
//
//typedef struct sFVFT_XYZDIFF
//{
// D3DVECTOR v;
// DWORD diff;
//} FVFT_XYZDIFF;
//
//
//// patch generation
//
//// a fuzz is a single hair follicle, blade of grass, etc.
//struct Fuzz
//{
// D3DVECTOR dp; // velocity
// D3DVECTOR ddp; // acceleration
// D3DXCOLOR colorBase;
// D3DXCOLOR colorTip;
//};
//
//// a fuzz instance is a single instance of a fuzz
//// located at x, z on the patch
//// we create only a limited number of unique fuzzes
//// and index the library with lidx.
//struct FuzzInst
//{
// float x, z; // fuzz location
// int lidx; // library index
//};
//
//// a fur patch is a volume that holds fuzzes.
//// xsize and zsize are chosen by the user
//// ysize is calculated using the height of the
//// tallest fuzz
//class CXBFur
//{
// friend class CXBFurMesh;
//public:
// DWORD m_dwSeed; // patch seed
//
// float m_fXSize; // patch size in world coords
// float m_fYSize;
// float m_fZSize;
//
// // fuzz library
// DWORD m_dwNumSegments; // # of segments in highest LOD
// Fuzz m_fuzzCenter; // fuzz constant
// Fuzz m_fuzzRandom; // random offset around center
// DWORD m_dwNumFuzzLib; // # of fuzz in the library
// Fuzz *m_pFuzzLib; // fuzz library
//
// // fuzz instances
// DWORD m_dwNumFuzz; // # of fuzz in this patch
// FuzzInst *m_pFuzz;
//
// // patch volume
// DWORD m_dwNumSlices; // # of layers in the volume
// DWORD m_dwSliceSize; // width*height
// DWORD m_dwSliceXSize; // width of volume texture slice
// DWORD m_dwSliceZSize; // height of volume texture slice
// LPDIRECT3DTEXTURE8 m_apSliceTexture[XBFUR_MAXSLICE * 2 - 1]; // slices of volume texture
// // ... followed by level-of-detail textures N/2, N/4, N/8, ... 1
//
// // LOD textures
// DWORD m_dwNumSlicesLOD; // number of slices in current level of detail
// float m_fLevelOfDetail; // current LOD value
// DWORD m_iLOD; // current integer LOD value
// float m_fLODFraction; // fraction towards next coarser level-of-detail
// DWORD m_dwLODMax; // maximum LOD index
// LPDIRECT3DTEXTURE8 *m_pSliceTextureLOD; // current level of detail pointer into m_apSliceTexture array
//
// // hair lighting texture
// D3DMATERIAL8 m_HairLightingMaterial;
// LPDIRECT3DTEXTURE8 m_pHairLightingTexture;
//
// // fin texture
// DWORD m_finWidth, m_finHeight; // size of fin texture
// float m_fFinXFraction, m_fFinZFraction; // portion of hair texture to put into fin
// LPDIRECT3DTEXTURE8 m_pFinTexture; // texture projected from the side
//
// CXBFur();
// ~CXBFur();
// void InitFuzz(DWORD nfuzz, DWORD nfuzzlib);
// void GenSlices(DWORD nslices, DWORD slicexsize, DWORD slicezsize);
// void GenFin(DWORD finWidth, DWORD finHeight, float fFinXFraction, float fFinZFraction);
// void GetLinesVertexBuffer(IDirect3DVertexBuffer8 **ppVB);
// void RenderLines();
// void Save(char *fname, int flags);
// void Load(char *fname);
// HRESULT SetHairLightingMaterial(D3DMATERIAL8 *pMaterial);
// void SetPatchSize(float x, float z)
// {
// m_fXSize = x;
// m_fZSize = z;
// InitFuzz(m_dwNumFuzz, m_dwNumFuzzLib); // re-init the fuzz. automatically sets ysize
// };
// void SetFVel(float cx, float cy, float cz, float rx, float ry, float rz)
// {
// m_fuzzCenter.dp.x = cx; m_fuzzCenter.dp.y = cy; m_fuzzCenter.dp.z = cz;
// m_fuzzRandom.dp.x = rx; m_fuzzRandom.dp.y = ry; m_fuzzRandom.dp.z = rz;
// };
// void SetFAcc(float cx, float cy, float cz, float rx, float ry, float rz)
// {
// m_fuzzCenter.ddp.x = cx; m_fuzzCenter.ddp.y = cy; m_fuzzCenter.ddp.z = cz;
// m_fuzzRandom.ddp.x = rx; m_fuzzRandom.ddp.y = ry; m_fuzzRandom.ddp.z = rz;
// };
//
// // fLevelOfDetail can range from 0 to log2(NumSlices)
// HRESULT SetLevelOfDetail(float fLevelOfDetail);
// HRESULT ComputeLevelOfDetailTextures();
// inline UINT LevelOfDetailCount(UINT iLOD)
// {
// return m_dwNumSlices >> iLOD;
// }
// inline UINT LevelOfDetailIndex(UINT iLOD)
// {
// UINT offset = 0;
// for (UINT i = 1; i <= iLOD; i++)
// offset += LevelOfDetailCount(i-1);
// return offset;
// }
// inline UINT TotalTextureCount()
// {
// UINT TextureCount = 0;
// for (UINT iLOD = 0; m_dwNumSlices >> iLOD; iLOD++)
// TextureCount += LevelOfDetailCount(iLOD);
// return TextureCount;
// }
//
// // Compress textures one at a time until all are done.
// // Returns S_OK when all the textures are in fmtNew format.
// // Returns S_FALSE if there are textures still to be done.
// HRESULT CompressNextTexture(D3DFORMAT fmtNew, UINT *pTextureIndex);
//};
//
//HRESULT FillHairLightingTexture(D3DMATERIAL8 *pMaterial, LPDIRECT3DTEXTURE8 pTexture);
bool AddGrass( Nx::CNgcGeom *p_geom, NxNgc::sMesh *p_mesh );