void ElBillboardChain::render(ElCamera* camera, TimeValue t) { if (mNeedUpdateVertices) { _setupVertices(camera); mNeedUpdateVertices = false; } IDirect3DDevice9* d3dDevice = ElDeviceManager::getDevice(); if (SUCCEEDED(d3dDevice->BeginScene())) { D3DXMATRIX mat; getParentNodeTransform(mat); d3dDevice->SetTransform(D3DTS_WORLD, &mat); d3dDevice->SetFVF(VERTEX::FVF); d3dDevice->SetTexture(0, mTexture); d3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE); int numTriangles = mChainElementList.size(); numTriangles = max(0, (numTriangles - 1) * 2); d3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, numTriangles, mVertices.base(), sizeof(VERTEX)); d3dDevice->EndScene(); d3dDevice->SetTexture(0, NULL); d3dDevice->SetRenderState(D3DRS_LIGHTING, TRUE); } }
void CMarchingTet::_ExtractSurface(const int tm, CMarchingTetEdge *pSplitEdges, CVertexInfo *pVertInfo) { Vector4i tet; Vector3f p0, p1, p2, p3, vert[4]; int i, v0, v1, v2, v3, vbuff[4]; const int nsplit = GetSplitVertexCount(); ASSERT0(nsplit>0); #ifdef _DEBUG tet = m_tet; int debn=163; if (tet.x==debn || tet.y==debn|| tet.z==debn || tet.w==debn) int asgag=1; //if (nsplit!=2) return; #endif //for the split vertices; for (i=0; i<nsplit; i++){ if (i==0){ _getVerticesByExtractionSequence(0, pVertInfo, v0, v1, v2, v3); tet = Vector4i(v0, v1, v2, v3); } else{ v0=tet.x, v1=tet.y, v2=tet.z, v3=tet.w; const int vtmp = _getVerticeByExtractionSequence(i); //get the second slit vertex ChangeTetVertexSeq(vtmp, v0, v1, v2, v3); } _extractSurface4(tm, v0, v1, v2, v3, p0, p1, p2, p3, 0, pSplitEdges, pVertInfo); } if (nsplit==4) return; //for the mesh vertices; const int cc= GetNonSplitVertices(vbuff); Vector3i tri(vbuff[0], vbuff[1], vbuff[2]), *pBaseTri=NULL; switch(cc){ case 1: pBaseTri = _lsearchDynamicVertex(vbuff[0], pVertInfo); break; case 2: pBaseTri = _lsearchDynamicEdge(vbuff[0], vbuff[1], pVertInfo); break; case 3: pBaseTri = &tri; break; } ASSERT0(pBaseTri!=NULL); _setupVertices(tet, pBaseTri, vbuff, cc, pVertInfo, vert); for (i=0; i<cc; i++){ v0=tet.x, v1=tet.y, v2=tet.z, v3=tet.w; ChangeTetVertexSeq(vbuff[i], v0, v1, v2, v3); p0=_matchVertices(v0, tet, vert); p1=_matchVertices(v1, tet, vert); p2=_matchVertices(v2, tet, vert); p3=_matchVertices(v3, tet, vert); _extractSurface4(tm, v0, v1, v2, v3, p0, p1, p2, p3, 1, pSplitEdges, pVertInfo); } }