Jump to content

  • Log In with Google      Sign In   
  • Create Account


monkeyboi

Member Since 08 May 2010
Offline Last Active Mar 11 2013 11:21 AM
-----

Topics I've Started

DX9 Wired Texture Effect

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 


Multi inheritance and pure virtual

27 January 2013 - 10:43 AM

Hi I have some question about multi inheritance see the code snippet below


class Window{
public:
	virtual void drawBorder() = 0;
	virtual void prompt() =0;
};

class BorderedWindow:public virtual Window{
public:
	void drawBorder(){}
};

class WindowWithMenu : public virtual Window{
public:
	void prompt(){}
};

class CustomWindow : public BorderedWindow, public WindowWithMenu{
public:
	void draw(){drawBorder(); prompt();}
};

 

My questions are

  1. why does derived class not have to implement all pure virtual functions declared in base class? Because it is virtual inheritance?
  2. Is :public virtual Window different from :virtual public Window?

Any faster way to calculate prime number?

06 December 2012 - 11:25 AM

I am wondering if there is any fast way to calculate all the prime numbers within a given number N. Like give N = 10 it will produce 1,2,3,5,7
My version is divide only odd numbers by those already calculated prime numbers.
int n = 1000;
int half = n/2;
//At most n/2 prime numbers but when n is realy big this speculation is far from the accually size which is a waste(any way to solve it?)
int* temp = new int[half];
int count = 0;
if (n>3)
{
  count = 3;
  temp[0]=1;
  temp[1]=2;
  temp[2]=3;
  for (int x=5;x<=n;x=x+2)
  {
   int y;
   for(y =1; y<count;y++){
    if (x%temp[y] == 0)
    {
     //x is not a prime number
	 y = count+1;
	 break;
    }
   }
   if (y == count)
   {
   //x is a prime number
    temp[count] = x;
    count++;
   }
  }
}else{
  count = n;
  for (int x=0;x<n;x++)
  {
   temp[x] = x+1;
  }
}
// create another array which has the exact size as needed then delete the temp
int* p = new int[count];
for (int z = 0; z<count; z++)
{
  p[z] = temp[z];
}
delete [] temp;

Any problem with this one or any faster way?

What Does This Mean "$modelViewProj"

04 December 2012 - 10:24 AM

Basically I am trying to compile cg shader file with DX. A char* pointer is used to store the name of a variable in cg. But, here is the question, I don't know why I have to type "$modelViewProj" instead of "modelViewProj". Otherwise the function constanttable->SetValue() will not success. In the cg file that variable's name is just modelViewProj as

void vertextransform(float4 position : POSITION,
float3 Normal : NORMAL,
float2 texCoord : TEXCOORD0,
out float4 oPosition : POSITION,
out float2 otexCoord : TEXCOORD0,
uniform float4x4 modelViewProj)
{
// Transform position from object space to clip space
oPosition = mul(modelViewProj, position);
Normal= float3(0,0,-1);
otexCoord = texCoord;
}

Thanks in advance

Jerry

Exceptions In C++

20 October 2012 - 08:28 AM

Hi guys, my question is if I throw a derived class, can I catch it by using a base class reference parameter? In the link here, it says the a class derived from base exception can be catched by a catch clause with base exception reference. What if other user defined classes?

Many thanks

Jerry

PARTNERS