raSystem  1.0 bata
raEntitySDKMesh.cpp
Go to the documentation of this file.
1 #include "..\include\raMain.h"
2 
3 namespace System
4 {
5  raEntitySDKMaterial::raEntitySDKMaterial(raSmartPointer<raDirectX> dx, LPCSTR effectFileName, LPCSTR Technique,
6  SDKMESH_MATERIAL* mat) : raTexturedMaterial(dx.get(), effectFileName, Technique)
7  {
8  m_pSDKMaterial = mat;
9  }
11  {
14  if(m_pRV) m_pRV->AddRef();
15 
16  m_ptxDiffuseVariable = m_pEffect->GetVariableByName(m_effectVariableName)->AsShaderResource();
17 
18  return true;
19  }
21  {
24 
27 
29  m_ptxDiffuseVariable->SetResource(m_pRV);
30  }
31  //-------------------------------------------------------------------
33  LPCSTR modelFileName) :
34  raVisual(dx)
35  {
36  m_ModelFileName = modelFileName;
37  }
38 
40  {
42 
45  for(DWORD i = 0; i < m_numMaterials; i++)
46  {
48  EffectfileName.c_str(),
49  TexturedTechniqueName.c_str(),
50  m_Mesh.GetMaterial(i));
51  }
52  return true;
53  }
54 
56  {
57  m_Mesh.Destroy();
58  return true;
59  }
60 
61  bool raEntitySDKMesh::RenderMesh(LPCSTR techniqueName)
62  {
63  SDKMESH_MESH* pMesh = m_Mesh.GetMesh(0);
64 
65  if( pMesh->NumVertexBuffers > 1)
66  return false;
67 
68  UINT Strides[1];
69  UINT Offsets[1];
70  ID3D11Buffer* pVB[1];
71 
72  pVB[0] = m_Mesh.GetVB11(0, 0);
73  Strides[0] = m_Mesh.GetVertexStride(0, 0);
74  Offsets[0] = 0;
75 
76  m_dx->GetImmediateContext()->IASetVertexBuffers(0, 1, pVB, Strides, Offsets );
77  m_dx->GetImmediateContext()->IASetIndexBuffer(GetIndexBuffer(), GetIndexBufferFormat(), 0 );
78 
79  for( UINT subset = 0; subset < GetNumSubsets(); subset++) //Nicht m_numSubsets - das ist hier 0!
80  {
81  SDKMESH_SUBSET* pSubset = m_Mesh.GetSubset(0, subset);
82  UINT materialNo = pSubset->MaterialID;
83 
84  raMaterial* pMaterial = m_pMaterials[materialNo];
85  ID3DX11EffectTechnique* pTechnique =
86  pMaterial->GetEffectTechnique(techniqueName);
87 
88  if(pTechnique->IsValid())
89  //Beim Rendern in Cubemap: Nichts tun, falls Material ReflectiveMaterial ist und
90  //vergessen wurde, das Objekt auszublenden - oder
91  //vergessen wurde, dem Material eine CubemapTechnique zu geben
92  {
93  D3DX11_TECHNIQUE_DESC techDesc;
94  pTechnique->GetDesc( &techDesc );
95 
96  pMaterial->Setup();
97 
98  D3D11_PRIMITIVE_TOPOLOGY PrimType = m_Mesh.GetPrimitiveType11(
100  m_dx->GetImmediateContext()->IASetPrimitiveTopology(PrimType);
101 
102  UINT indexStart = (UINT)pSubset->IndexStart;
103  UINT indexCount = (UINT)pSubset->IndexCount;
104 
105  for( UINT p = 0; p < techDesc.Passes; ++p )
106  {
107  pTechnique->GetPassByIndex(p)->Apply(0, m_dx->GetImmediateContext());
108  m_dx->GetImmediateContext()->DrawIndexed(indexCount, indexStart, 0);
109  }
110  }
111  }
112  return true;
113  }
114 
116  const raVector3 *pRayDir, float *pDist)
117  {
118  UINT64 nIndices = m_Mesh.GetNumIndices(0);
119 
122 
123  BYTE* pIndices = m_Mesh.GetRawIndicesAt(0);
124 
125  bool bIntersects = false;
126  FLOAT mindist = FLT_MAX;
127  FLOAT u = 0, v = 0, dist = false; //u, v nicht verwendet
128 
129  for (UINT64 idx = 0; idx < nIndices; idx += 3)
130  {
131  D3DXVECTOR3 p[3];
132  if(GetIndexBufferFormat() == DXGI_FORMAT_R16_UINT)
133  {
134  UINT16* pIndices16 = (UINT16*)pIndices;
135  for(int i = 0; i < 3; i++)
136  p[i] = (pVertices + pIndices16[idx + i])->position;
137  }
138  else
139  {
140  UINT32* pIndices32 = (UINT32*)pIndices;
141  for(int i = 0; i < 3; i++)
142  p[i] = (pVertices + pIndices32[idx + i])->position;
143  }
144 
145  if(D3DXIntersectTri(&p[0], &p[1], &p[2],
146  (D3DXVECTOR3*)pRayPos, (D3DXVECTOR3*)pRayDir, &u, &v, &dist))
147  {
148  bIntersects = true;
149  if(dist < mindist)
150  {
151  mindist = dist;
152  }
153  }
154  }
155  *pDist = mindist;
156  return bIntersects;
157  }
158 
160  {
161  return m_ModelFileName;
162  }
163 };
raEntitySDKMesh(raSmartPointer< raDirectX > dx, LPCSTR modelFileName)
virtual void Destroy()
Definition: raSDKmesh.cpp:709
ID3D11ShaderResourceView * m_pRV
raColor m_AmbientColor
Definition: raMaterial.h:64
UINT64 GetNumIndices(UINT iMesh)
Definition: raSDKmesh.cpp:1017
BYTE * GetRawIndicesAt(UINT iIB)
Definition: raSDKmesh.cpp:949
virtual bool DestroyMesh()
virtual bool Create()
Definition: raMaterial.cpp:56
BOOL IsErrorResource(TYPE data)
Definition: raSDKmesh.h:29
static raString TexturedTechniqueName
Definition: raVisual.h:8
static D3D11_PRIMITIVE_TOPOLOGY GetPrimitiveType11(SDKMESH_PRIMITIVE_TYPE PrimType)
Definition: raSDKmesh.cpp:823
ID3D11DeviceContext * GetImmediateContext(void)
Definition: raDirectX.h:31
ID3D11Buffer * GetVB11(UINT iMesh, UINT iVB)
Definition: raSDKmesh.cpp:875
unsigned short UINT16
Definition: d3dx11dbg.h:35
UINT64 IndexCount
Definition: raSDKmesh.h:142
UINT GetVertexStride(UINT iMesh, UINT iVB)
Definition: raSDKmesh.cpp:979
interface ID3DX11EffectTechnique ID3DX11EffectTechnique
SDKMESH_SUBSET * GetSubset(UINT iMesh, UINT iSubset)
Definition: raSDKmesh.cpp:973
CDXUTSDKMesh m_Mesh
ID3DX11Effect * m_pEffect
Definition: raMaterial.h:57
virtual bool Intersects(const raVector3 *pRayPos, const raVector3 *pRayDir, float *pDist)
virtual void Setup()
Definition: raMaterial.cpp:160
SDKMESH_PRIMITIVE_TYPE
Definition: raSDKmesh.h:35
SDKMESH_MESH * GetMesh(UINT iMesh)
Definition: raSDKmesh.cpp:961
virtual void Setup()
SDKMESH_MATERIAL * GetMaterial(UINT iMaterial)
Definition: raSDKmesh.cpp:955
virtual UINT GetNumSubsets()
virtual bool CreateMesh()
virtual DXGI_FORMAT GetIndexBufferFormat()
ID3D11ShaderResourceView * pDiffuseRV11
Definition: raSDKmesh.h:193
UINT64 IndexStart
Definition: raSDKmesh.h:141
virtual bool Create()
virtual HRESULT Create(raDirectX *pDev11, LPCTSTR szFileName, bool bCreateAdjacencyIndices=false, SDKMESH_CALLBACKS11 *pLoaderCallbacks=NULL)
Definition: raSDKmesh.cpp:640
UINT GetNumMaterials()
Definition: raSDKmesh.cpp:909
virtual ID3D11Buffer * GetIndexBuffer()
raMaterial ** m_pMaterials
Definition: raVisual.h:97
ID3DX11EffectShaderResourceVariable * m_ptxDiffuseVariable
BYTE NumVertexBuffers
Definition: raSDKmesh.h:115
virtual bool RenderMesh(LPCSTR techniqueName="")
BYTE * GetRawVerticesAt(UINT iVB)
Definition: raSDKmesh.cpp:943
UINT PrimitiveType
Definition: raSDKmesh.h:140
SDKMESH_MATERIAL * m_pSDKMaterial
D3DXVECTOR4 Diffuse
Definition: raSDKmesh.h:168
raSmartPointer< raDirectX > m_dx
Definition: raVisual.h:99
ID3DX11EffectVectorVariable * m_pMaterialDiffuseColorVariable
Definition: raMaterial.h:59
static raString EffectfileName
Definition: raVisual.h:6
DWORD m_numMaterials
Definition: raVisual.h:96
ID3DX11EffectTechnique * GetEffectTechnique(LPCSTR techniqueName="")
Definition: raMaterial.h:31
raEntitySDKMaterial(raSmartPointer< raDirectX > dx, LPCSTR effectFileName, LPCSTR Technique, SDKMESH_MATERIAL *mat)
ID3DX11EffectVectorVariable * m_pMaterialAmbientVariable
Definition: raMaterial.h:60
T * get() const