コード例 #1
0
ファイル: ElBillboardChain.cpp プロジェクト: chenbk85/3dlearn
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);
	}
}
コード例 #2
0
ファイル: marchingtet.cpp プロジェクト: nanzhang790/View3dn
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);
	}
}