Jump to content

  • Log In with Google      Sign In   
  • Create Account

Awesome job so far everyone! Please give us your feedback on how our article efforts are going. We still need more finished articles for our May contest theme: Remake the Classics

#Actualkgs

Posted 12 August 2012 - 07:01 AM

I followed Frank Luna's book :Introducting to 3D game programing :A shader approach
And write a program.
The problem is that when the picking ray go through multi object,it may hit a object far from the camera first,but not the near one!
this is my code:
static bool clickOnce = true;
static bool clickAgain = true;
D3DXVECTOR3 originW(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 dirW(0.0f, 0.0f, 0.0f);
if( gDInput->mouseButtonDown(0) )
{
  if(clickAgain == clickOnce)
  {
   clickAgain = clickOnce;
   clickOnce = false;
   getWorldPickingRay(originW, dirW);
  }
}
else
{
	clickOnce = true;
}


for(int x = 0; x < 32; x++)
{
  for(int y = 0; y < 32; y++)
  {
   for(int z = 0; z < 32; z++)
   {
	//x,y,z means objects position and there are all box
	if(mMapClass->GetPosID(x, y, z))//check texture ID
	{
	 D3DXMATRIX T;
	 D3DXMatrixTranslation(&T, x, y, z);
	 D3DXMATRIX toWorld = T;
	 AABB box;
	 mChunkBox.xform(toWorld, box);

	 if(D3DXBoxBoundProbe(&box.minPt, &box.maxPt, &originW, &dirW) )
	 {
	  //destroy the box
	 }
	 //and then draw object in position (x, y, z)
	}
   }
  }
}
void getWorldPickingRay(D3DXVECTOR3& originW, D3DXVECTOR3& dirW)
{
POINT s;
GetCursorPos(&s);
ScreenToClient(mhMainWnd, &s);
float w = (float)md3dPP.BackBufferWidth;
float h = (float)md3dPP.BackBufferHeight;
D3DXMATRIX proj = gCamera->proj();
float x = (2.0f*s.x/w - 1.0f) / proj(0,0);
float y = (-2.0f*s.y/h + 1.0f) / proj(1,1);
D3DXVECTOR3 origin(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 dir(x, y, 1.0f);
D3DXMATRIX invView;
D3DXMatrixInverse(&invView, 0, &gCamera->view());
D3DXVec3TransformCoord(&originW, &origin, &invView);
D3DXVec3TransformNormal(&dirW, &dir, &invView);
D3DXVec3Normalize(&dirW, &dirW);
}
Is there any problems in my code?

And sorry for my poor english

#8kgs

Posted 12 August 2012 - 06:55 AM

I followed Frank Luna's book :Introducting to 3D game programing :A shader approach
And write a program.
The problem is that when the picking ray go through multi object,it may hit a object far from the camera,but not the near one!
this is my code:
static bool clickOnce = true;
static bool clickAgain = true;
D3DXVECTOR3 originW(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 dirW(0.0f, 0.0f, 0.0f);
if( gDInput->mouseButtonDown(0) )
{
  if(clickAgain == clickOnce)
  {
   clickAgain = clickOnce;
   clickOnce = false;
   getWorldPickingRay(originW, dirW);
  }
}
else
{
	clickOnce = true;
}


for(int x = 0; x < 32; x++)
{
  for(int y = 0; y < 32; y++)
  {
   for(int z = 0; z < 32; z++)
   {
	//x,y,z means objects position and there are all box
	if(mMapClass->GetPosID(x, y, z))//check texture ID
	{
	 D3DXMATRIX T;
	 D3DXMatrixTranslation(&T, x, y, z);
	 D3DXMATRIX toWorld = T;
	 AABB box;
	 mChunkBox.xform(toWorld, box);

	 if(D3DXBoxBoundProbe(&box.minPt, &box.maxPt, &originW, &dirW) )
	 {
	  //destroy the box
	 }
	 //and then draw object in position (x, y, z)
	}
   }
  }
}
void getWorldPickingRay(D3DXVECTOR3& originW, D3DXVECTOR3& dirW)
{
POINT s;
GetCursorPos(&s);
ScreenToClient(mhMainWnd, &s);
float w = (float)md3dPP.BackBufferWidth;
float h = (float)md3dPP.BackBufferHeight;
D3DXMATRIX proj = gCamera->proj();
float x = (2.0f*s.x/w - 1.0f) / proj(0,0);
float y = (-2.0f*s.y/h + 1.0f) / proj(1,1);
D3DXVECTOR3 origin(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 dir(x, y, 1.0f);
D3DXMATRIX invView;
D3DXMatrixInverse(&invView, 0, &gCamera->view());
D3DXVec3TransformCoord(&originW, &origin, &invView);
D3DXVec3TransformNormal(&dirW, &dir, &invView);
D3DXVec3Normalize(&dirW, &dirW);
}
Is there any problems in my code?

And sorry for my poor english

#7kgs

Posted 12 August 2012 - 06:54 AM

I followed Frank Luna's book :Introducting to 3D game programing :A shader approach
And write a program.
The problem is that when the picking ray go through multi object,it may hit a object far from the camera,but not the near one!
this is my code:
static bool clickOnce = true;
static bool clickAgain = true;
D3DXVECTOR3 originW(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 dirW(0.0f, 0.0f, 0.0f);
if( gDInput->mouseButtonDown(0) )
{
  if(clickAgain == clickOnce)
  {
   clickAgain = clickOnce;
   clickOnce = false;
   getWorldPickingRay(originW, dirW);
  }
}
else
{
	clickOnce = true;
}


for(int x = 0; x < 32; x++)
{
  for(int y = 0; y < 32; y++)
  {
   for(int z = 0; z < 32; z++)
   {
	//x,y,z means objects position and there are all box
	if(mMapClass->GetPosID(x, y, z))//check if there is a box
	{
	 D3DXMATRIX T;
	 D3DXMatrixTranslation(&T, x, y, z);
	 D3DXMATRIX toWorld = T;
	 AABB box;
	 mChunkBox.xform(toWorld, box);

	 if(D3DXBoxBoundProbe(&box.minPt, &box.maxPt, &originW, &dirW) && )
	 {
	  //destroy the box
	 }
	 //and then draw object in position (x, y, z)
	}
   }
  }
}
void getWorldPickingRay(D3DXVECTOR3& originW, D3DXVECTOR3& dirW)
{
POINT s;
GetCursorPos(&s);
ScreenToClient(mhMainWnd, &s);
float w = (float)md3dPP.BackBufferWidth;
float h = (float)md3dPP.BackBufferHeight;
D3DXMATRIX proj = gCamera->proj();
float x = (2.0f*s.x/w - 1.0f) / proj(0,0);
float y = (-2.0f*s.y/h + 1.0f) / proj(1,1);
D3DXVECTOR3 origin(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 dir(x, y, 1.0f);
D3DXMATRIX invView;
D3DXMatrixInverse(&invView, 0, &gCamera->view());
D3DXVec3TransformCoord(&originW, &origin, &invView);
D3DXVec3TransformNormal(&dirW, &dir, &invView);
D3DXVec3Normalize(&dirW, &dirW);
}
Is there any problems in my code?

And sorry for my poor english

#6kgs

Posted 12 August 2012 - 06:52 AM

I followed Frank Luna's book :Introducting to 3D game programing :A shader approach
And write a program.
The problem is that when the picking ray go through multi object,it may hit a object far from the camera,but not the near one!
this is my code:
static bool clickOnce = true;
static bool clickAgain = true;
D3DXVECTOR3 originW(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 dirW(0.0f, 0.0f, 0.0f);
if( gDInput->mouseButtonDown(0) )
{
  if(clickAgain == clickOnce)
  {
   clickAgain = clickOnce;
   clickOnce = false;
   getWorldPickingRay(originW, dirW);
  }
}
else
{
	clickOnce = true;
}


for(int x = 0; x < 32; x++)
{
  for(int y = 0; y < 32; y++)
  {
   for(int z = 0; z < 32; z++)
   {
	//x,y,z means objects position and there are all box
	if(mMapClass->GetPosID(x, y, z))//check if there is a box
	{
	 D3DXMATRIX T;
	 D3DXMatrixTranslation(&T, x, y, z);
	 D3DXMATRIX toWorld = T;
	 AABB box;
	 mChunkBox.xform(toWorld, box);

	 if(D3DXBoxBoundProbe(&box.minPt, &box.maxPt, &originW, &dirW) && )
	 {
	  //destroy the box
	 }
	 //and then draw object in position (x, y, z)
	}
   }
  }
}
Is there any problems in my code?

And sorry for my poor english

#5kgs

Posted 12 August 2012 - 06:51 AM

I followed Frank Luna's book :Introducting to 3D game programing :A shader approach
And write a program.
The problem is that when the picking ray go through multi object,it may hit a object far from the camera,but not the near one!
this is my code:
static bool clickOnce = true;
static bool clickAgain = true;
D3DXVECTOR3 originW(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 dirW(0.0f, 0.0f, 0.0f);
if( gDInput->mouseButtonDown(0) )
{
  IsMouseR = true;
  if(clickAgain == clickOnce)
  {
   clickAgain = clickOnce;
   clickOnce = false;
   getWorldPickingRay(originW, dirW);
  }
}
else
{
	clickOnce = true;
}


for(int x = 0; x < 32; x++)
{
  for(int y = 0; y < 32; y++)
  {
   for(int z = 0; z < 32; z++)
   {
	//x,y,z means objects position and there are all box
	if(mMapClass->GetPosID(x, y, z))//check if there is a box
	{
	 D3DXMATRIX T;
	 D3DXMatrixTranslation(&T, x, y, z);
	 D3DXMATRIX toWorld = T;
	 AABB box;
	 mChunkBox.xform(toWorld, box);

	 if(D3DXBoxBoundProbe(&box.minPt, &box.maxPt, &originW, &dirW) && )
	 {
	  //destroy the box
	 }
	 //and then draw object in position (x, y, z)
	}
   }
  }
}
Is there any problems in my code?

And sorry for my poor english

#4kgs

Posted 12 August 2012 - 06:51 AM

I followed Frank Luna's book :Introducting to 3D game programing :A shader approach
And write a program.
The problem is that when the picking ray go through multi object,it may hit a object far from the camera,but not the near one!
this is my code:
static bool clickOnce = true;
static bool clickAgain = true;
D3DXVECTOR3 originW(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 dirW(0.0f, 0.0f, 0.0f);
if( gDInput->mouseButtonDown(0) )
{
  IsMouseR = true;
  if(clickAgain == clickOnce)
  {
   clickAgain = clickOnce;
   clickOnce = false;
   getWorldPickingRay(originW, dirW);
  }
  else
  {
	clickOnce = true;
  }
}
for(int x = 0; x < 32; x++)
{
  for(int y = 0; y < 32; y++)
  {
   for(int z = 0; z < 32; z++)
   {
	//x,y,z means objects position and there are all box
	if(mMapClass->GetPosID(x, y, z))//check if there is a box
	{
	 D3DXMATRIX T;
	 D3DXMatrixTranslation(&T, x, y, z);
	 D3DXMATRIX toWorld = T;
	 AABB box;
	 mChunkBox.xform(toWorld, box);

	 if(D3DXBoxBoundProbe(&box.minPt, &box.maxPt, &originW, &dirW) && )
	 {
	  //destroy the box
	 }
	 //and then draw object in position (x, y, z)
	}
   }
  }
}
Is there any problems in my code?

And sorry for my poor english

PARTNERS