Jump to content

  • Log In with Google      Sign In   
  • Create Account

DX9 Wired Texture Effect


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
3 replies to this topic

#1 monkeyboi   Members   -  Reputation: 188

Like
0Likes
Like

Posted 20 February 2013 - 11:54 AM

All I am trying to do is creating a quad in world coordinate and put a 64*64 texture on. I disable the lighting and enable the alpha.

Here is part of the codes, really have no idea what the problem is. 

float Rot = 0.0f;
struct QUAD 
{
	D3DXVECTOR4	 Pos;
	//D3DXVECTOR4	 Nor;
	D3DXVECTOR2  TexCoord;

	static const DWORD  FVF;
};
const DWORD QUAD::FVF = D3DFVF_XYZ | D3DFVF_TEX1;//RHW D3DFVF_NORMAL

IDirect3DVertexBuffer9*	g_pVB;
IDirect3DIndexBuffer9* g_pIB;
void LoadTexture(IDirect3DDevice9* pd3dDevice)
{
	hr = D3DXCreateTextureFromFile(pd3dDevice,L"LidTexTest.png",&WholeTex);
	WholeTex->GetSurfaceLevel(0,&WholeTexSur);

}
void CreateQuad(IDirect3DDevice9* pd3dDevice)
{
	hr = pd3dDevice->CreateVertexBuffer(
		4 * sizeof(QUAD),
		D3DUSAGE_WRITEONLY,
		QUAD::FVF,
		D3DPOOL_MANAGED, 
		&g_pVB,
		0);

	QUAD temp[4];
	temp[0].Pos = D3DXVECTOR4(-0.5,0.5,0,1);
	temp[1].Pos = D3DXVECTOR4( 0.5,0.5,0,1);
	temp[2].Pos = D3DXVECTOR4(-0.5,-0.5,0,1);
	temp[3].Pos = D3DXVECTOR4( 0.5,-0.5,0,1);

	temp[0].TexCoord = D3DXVECTOR2(0.0f,0.0f);
	temp[1].TexCoord = D3DXVECTOR2(1.0f,0.0f);
	temp[2].TexCoord = D3DXVECTOR2(0.0f,1.0f);
	temp[3].TexCoord = D3DXVECTOR2(1.0f,1.0f);
	
	VOID* lpVertices;
	g_pVB->Lock( 0, sizeof(temp), (void**)&lpVertices, 0 );
	memcpy( lpVertices, temp, sizeof(temp) );
	g_pVB->Unlock();

	int iIQuantity = 6;
	int Index[6];

	Index[0] = 0;
	Index[1] = 1;
	Index[2] = 2;
	Index[3] = 2;
	Index[4] = 1;
	Index[5] = 3;
	
	unsigned int uiBufferLength = (unsigned int)(iIQuantity*sizeof(int));
	pd3dDevice->CreateIndexBuffer(uiBufferLength,
		0,D3DFMT_INDEX32,D3DPOOL_MANAGED,&g_pIB,0);

	void* pbIndices;
	g_pIB->Lock(0,uiBufferLength,&pbIndices,0);

	memcpy( pbIndices, Index, iIQuantity*sizeof(int) );	

	g_pIB->Unlock();
}
HRESULT CALLBACK OnD3D9CreateDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc,
                                     void* pUserContext )
{
	SetupCamera(pd3dDevice);
	LoadTexture(pd3dDevice);
	CreateQuad(pd3dDevice);
    return S_OK;
}

void CALLBACK OnD3D9FrameRender( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext )
{
    HRESULT hr;

    // Clear the render target and the zbuffer 
    V( pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_ARGB( 0, 45, 50, 170 ), 1.0f, 0 ) );
	pd3dDevice->SetRenderState( D3DRS_LIGHTING, false );
	pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
	pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
	pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
	pd3dDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
	
    // Render the scene
    if( SUCCEEDED( pd3dDevice->BeginScene() ) )
    {
		Rot = Rot + 0.00;
		D3DXMATRIX matTemp;
		D3DXMATRIX m_matWorld;
		D3DXMatrixIdentity(&matTemp);
		D3DXMatrixIdentity(&m_matWorld);

		D3DXMatrixRotationY(&matTemp, Rot);
		D3DXMatrixMultiply(&m_matWorld,&m_matWorld,&matTemp);

		D3DXMatrixMultiply(&m_matWorld,&m_matWorld,&matTemp);

		pd3dDevice->SetTransform( D3DTS_WORLD, &m_matWorld);

		pd3dDevice->SetFVF(QUAD::FVF);
		pd3dDevice->SetTexture(0,WholeTex);
		pd3dDevice->SetStreamSource(0, g_pVB, 0, sizeof(QUAD));
		hr = pd3dDevice->SetIndices(g_pIB);
		hr = pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,4,0,2);
		pd3dDevice->SetTexture(0,NULL);

        V( pd3dDevice->EndScene() );
    }
}

 

Many thanks 



Sponsor:

#2 monkeyboi   Members   -  Reputation: 188

Like
0Likes
Like

Posted 20 February 2013 - 11:57 AM

oh the texture is fine, because I can render it with a quad on screen coordinate, just when I use world coordinate to describe the quad, the texture go crazy. 



#3 ankhd   Members   -  Reputation: 1366

Like
0Likes
Like

Posted 20 February 2013 - 07:45 PM

Hello. Try a scale the quad is small 0.5

#4 C0lumbo   Crossbones+   -  Reputation: 2501

Like
1Likes
Like

Posted 21 February 2013 - 02:22 AM

I think the problem is that you're using D3DFVF_XYZ, but you're sending 4 component vectors.






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS