Example #1
0
/*------------------------------------------------------------------*/
void AzTrTreeFeat::updateMatrix(const AzDataForTrTree *data, 
                                const AzTrTreeEnsemble_ReadOnly *ens, 
                                AzBmat *b_tran) /* inout */
                                const
{
  if (data == NULL) return; 

  const char *eyec = "AzTrTreeFeat::updateMatrix"; 
  int f_num = featNum(); 
  if (ens->size() != treeNum()) {
    throw new AzException(eyec, "size of tree ensemble and #feat should be the same"); 
  }
  int old_f_num = b_tran->colNum(); 
  if (old_f_num > f_num) {
    throw new AzException(eyec, "#col is bigger than #feat"); 
  }
  int fx; 
  for (fx = 0; fx < old_f_num; ++fx) {
    if (f_inf.point(fx)->isRemoved) {
      b_tran->clear(fx); 
    }
  }

  if (old_f_num == f_num) {
    if (old_f_num == 0) {
      /* for the rare case that no feature was generated */
      b_tran->reform(data->dataNum(), f_num);  /* added 9/13/2011 */
    }
    return; 
  }

  _updateMatrix(data, ens, old_f_num, b_tran); 
}
void MyCEGUIGeometryBuffer::draw() const
{
	u32 qcnt = m_Quads.size();
	if (!qcnt)
		return;
	if (!m_ClipRect.isValid())
		return;

	if (!m_MatrixValid)
		_updateMatrix();

	core::vector3df ul(0.0f, 0.0f, 0.0f);
	core::vector3df lr(0.0f, 0.0f, 0.0f);
	core::rectf clipped_rect_draw;
	core::rectf clipped_rect_tc;

	for (u32 i = 0; i < qcnt; i++)
	{
		RenderQuad &quad = m_Quads[i];

		ul.X = quad.rect_draw.UpperLeftCorner.X;
		ul.Y = quad.rect_draw.UpperLeftCorner.Y;
		lr.X = quad.rect_draw.LowerRightCorner.X;
		lr.Y = quad.rect_draw.LowerRightCorner.Y;
		m_Matrix.transformVect(ul);
		m_Matrix.transformVect(lr);

		clipped_rect_draw.set(ul.X, ul.Y, lr.X, lr.Y);
		clipped_rect_draw.clipAgainst(m_ClipRect);
		if (!clipped_rect_draw.isValid())
			continue;

		f32 rd_w =  quad.rect_draw.getWidth();
		f32 rd_h =  quad.rect_draw.getHeight();

		f32 rtc_w =  quad.rect_tc.getWidth();
		f32 rtc_h =  quad.rect_tc.getHeight();

		f32 clip_ul_x = (clipped_rect_draw.UpperLeftCorner.X - ul.X) / rd_w;
		f32 clip_ul_y = (clipped_rect_draw.UpperLeftCorner.Y - ul.Y) / rd_h;
		f32 clip_lr_x = (clipped_rect_draw.LowerRightCorner.X - lr.X) / rd_w;
		f32 clip_lr_y = (clipped_rect_draw.LowerRightCorner.Y - lr.Y) / rd_h;

		clipped_rect_tc.set(
			quad.rect_tc.UpperLeftCorner.X + clip_ul_x * rtc_w,
			quad.rect_tc.UpperLeftCorner.Y + clip_ul_y * rtc_h,
			quad.rect_tc.LowerRightCorner.X + clip_lr_x * rtc_w,
			quad.rect_tc.LowerRightCorner.Y + clip_lr_y * rtc_h);

		m_Driver.registerGUIImageForRendering(
			quad.texture, s_NextZ, clipped_rect_draw, clipped_rect_tc,
			quad.colors[0], quad.colors[1], quad.colors[2], quad.colors[3],
			quad.useAlphaBlending);
	}

	s_NextZ -= 0.000001f;
}
Example #3
0
	//----------------------------------------------------------------------
	//
	//----------------------------------------------------------------------
    void Camera::convertWorldPosToScreenPos( LVector3* out, const LVector3& world_pos, const LVector2& view_size ) const
    {
		_updateMatrix();

		*out = LVector3::TransformCoord(world_pos, mViewProjMatrix);
        
        out->Y *= -1.0f;  // y は下が + なので上下反転

        out->X = ( out->X + 1.0f ) * 0.5f;    // 0.0~2.0  にしたあと、0.0~1.0 にする
        out->Y = ( out->Y + 1.0f ) * 0.5f;    // (左上を原点にしたあと、)

        out->X *= view_size.X;
        out->Y *= view_size.Y;
    }
Example #4
0
void CObject::Cull()
{
	if (!m_model)
		_loadModel();

	if (m_updateMatrix)
		_updateMatrix();

	byte outside[8];
	memset(outside, 0, sizeof(outside));
	int plane;
	for (int point = 0; point < 8; point++)
	{
		for (plane = 0; plane < 6; plane++)
		{
			if (g_planeFrustum[plane].a * m_bounds[point].x +
				g_planeFrustum[plane].b * m_bounds[point].y +
				g_planeFrustum[plane].c * m_bounds[point].z +
				g_planeFrustum[plane].d < 0)
			{
				outside[point] |= (1 << plane);
			}
		}
		if (outside[point] == 0)
		{
			m_visible = true;
			return;
		}
	}
	if ((outside[0] & outside[1] & outside[2] & outside[3] &
		outside[4] & outside[5] & outside[6] & outside[7]) != 0)
	{
		m_visible = false;
		return;
	}
	m_visible = true;
}