Fancy thing with stream sources.

Started by
1 comment, last by HexDump 19 years, 7 months ago
Hello, I have been writing some code to show debug AABB for my octree, ok no problem, everything is fine. But now when I try to show the real static data, a lot of triangles of different flickering colors are showed, it is really weird. If do not show the AABB the static mesh is rendered ok. I noticed that when I rendered the static data when showing the AABB's it seemed to be using the AABB vertices instead of the static data vertices, this is why I named the post this way. Here is the code to show my AABB:

void CnAABB::Render()
{
	CnRenderer* pRenderer=CnGraphicApp::GetApp()->GetRenderer();
	pRenderer->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
	pRenderer->SetRenderState(D3DRS_FILLMODE,D3DFILL_SOLID);
	pRenderer->SetRenderState(D3DRS_LIGHTING,FALSE);
	
	TLineVertex Vertices[24];
	
	//AABB points U/D->Up/Down L/R->Left/RIght B/F-> Back/Front
	D3DXVECTOR3 ULF, URF, DLF, DRF,ULB, URB, DLB, DRB;
	
	ULF=D3DXVECTOR3(m_pMin->x,m_pMin->y,m_pMax->z);
	URF=D3DXVECTOR3(m_pMax->x,m_pMin->y,m_pMax->z);
	DLF=*m_pMin;
	DRF=D3DXVECTOR3(m_pMax->x,m_pMin->y,m_pMin->z);
	
	ULB=D3DXVECTOR3(m_pMin->x,m_pMax->y,m_pMax->z);
	URB=*m_pMax;
	DLB=D3DXVECTOR3(m_pMin->x,m_pMax->y,m_pMin->z);
	DRB=D3DXVECTOR3(m_pMax->x,m_pMax->y,m_pMin->z);
	
	
	
	pRenderer->GetDevice()->SetFVF(LINE_FVF);
	
	//Parte de arriba
	Vertices[0].vert=ULF;
	Vertices[0].dwColor=0xFFFFFFFF;
	Vertices[1].vert=URF;
	Vertices[1].dwColor=0xFFFFFFFF;
	Vertices[2].vert=URF;
	Vertices[2].dwColor=0xFFFFFFFF;
	Vertices[3].vert=URB;
	Vertices[3].dwColor=0xFFFFFFFF;
	Vertices[4].vert=URB;
	Vertices[4].dwColor=0xFFFFFFFF;
	Vertices[5].vert=ULB;
	Vertices[5].dwColor=0xFFFFFFFF;
	Vertices[6].vert=ULB;
	Vertices[6].dwColor=0xFFFFFFFF;
	Vertices[7].vert=ULF;
	Vertices[7].dwColor=0xFFFFFFFF;
		
	//Parte de Abajo
	Vertices[8].vert=DLF;
	Vertices[8].dwColor=0xFFFFFFFF;
	Vertices[9].vert=DRF;
	Vertices[9].dwColor=0xFFFFFFFF;
	Vertices[10].vert=DRF;
	Vertices[10].dwColor=0xFFFFFFFF;
	Vertices[11].vert=DRB;
	Vertices[11].dwColor=0xFFFFFFFF;
	Vertices[12].vert=DRB;
	Vertices[12].dwColor=0xFFFFFFFF;
	Vertices[13].vert=DLB;
	Vertices[13].dwColor=0xFFFFFFFF;
	Vertices[14].vert=DLB;
	Vertices[14].dwColor=0xFFFFFFFF;
	Vertices[15].vert=DLF;
	Vertices[15].dwColor=0xFFFFFFFF;
	
	//Segmentos para unir las 2 partes
	Vertices[16].vert=ULF;
	Vertices[16].dwColor=0xFFFFFFFF;
	Vertices[17].vert=DLF;
	Vertices[17].dwColor=0xFFFFFFFF;
	Vertices[18].vert=URF;
	Vertices[18].dwColor=0xFFFFFFFF;
	Vertices[19].vert=DRF;
	Vertices[19].dwColor=0xFFFFFFFF;
	Vertices[20].vert=ULB;
	Vertices[20].dwColor=0xFFFFFFFF;
	Vertices[21].vert=DLB;
	Vertices[21].dwColor=0xFFFFFFFF;
	Vertices[22].vert=URB;
	Vertices[22].dwColor=0xFFFFFFFF;
	Vertices[23].vert=DRB;
	Vertices[23].dwColor=0xFFFFFFFF;
	
	
	if(pRenderer->GetDevice()->DrawPrimitiveUP( D3DPT_LINELIST,12, Vertices, sizeof(TLineVertex))!=D3D_OK)
		CnLog::SysLog(eMedLevel,"rendering of AABB failed\r\n");
	
	
	
	pRenderer->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
	pRenderer->SetRenderState(D3DRS_FILLMODE,D3DFILL_SOLID);
}

I think it has anything to do with render states because if I only comment the DrawPrimitiveUp call the static mesh is showed ok. The static mesh use a DrawIndexedPrimitive to render. Thanks in advance, HexDump.
Advertisement
Are you calling SetStreamSource() before your static mesh data, after the AABB? Also, SetFVF() as well? If you set a vertex stream and then call DrawPrimitiveUP, that vertex stream will need to be set again before any subsequent DrawPrimitive call.
[sub]My spoon is too big.[/sub]
yes of course this is where I render the mesh ( I took out some params from the fuctions).

TPDEVICE pDev=CnGraphicApp::GetApp()->GetRenderer()->GetDevice();		//here I set the material, that will set renderstates//Set primitives to renderif(pDev->SetFVF(MESH_FVF)!=D3D_OK)        CnLog::SysLog(eMedLevel,"\t\tSetFVF returned an Error [Error]\r\n");				if(pDev->SetIndices()!=D3D_OK)	CnLog::SysLog(eMedLevel,"\t\tSetIndices returned an Error [Error]\r\n");		if(pDev->SetStreamSource( 0,vbPointer , 0, sizeof(TVertex))!=D3D_OK )	CnLog::SysLog(eMedLevel,"\t\tSeStreamSource returned an Error [Error]\r\n");									if(pDev->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,NumVertices,nPrimitiveCount)!=D3D_OK)	CnLog::SysLog(eMedLevel,"\t\tDrawIndexedPrimitive returned an Error [Error]\r\n");



Thanks in advance,
HexDump.

This topic is closed to new replies.

Advertisement