void GoodsModelManager::SetupTransform()
{
	render::Interface *pInterface = render::Interface::GetInstance();
	render::Interface::Layer2D   *pLayer2D   = pInterface->GetLayer2D();
	//保存原始的矩阵信息
	pInterface->GetDevice()->GetTransform(D3DTS_WORLD,&m_matWorld);
	pInterface->GetDevice()->GetTransform(D3DTS_VIEW,&m_matView);
	pInterface->GetDevice()->GetTransform(D3DTS_PROJECTION,&m_matProject);
	pInterface->GetDevice()->GetViewport(&m_OldViewPort);
	D3DXMATRIX matWorld;
	D3DXMatrixIdentity(&matWorld);
	pInterface->GetDevice()->SetTransform(D3DTS_WORLD,&matWorld);
	pInterface->GetDevice()->SetTransform(D3DTS_VIEW,m_Camera->GetViewMatrix());
	pInterface->GetDevice()->SetTransform(D3DTS_PROJECTION,m_Camera->GetProjectionMatrix());

	////清空指定的视区
	int iWidth = pInterface->GetWndWidth();
	int iHeight = pInterface->GetWndHeight();
	int ixStart = iWidth * 3 /4;
	int iyStart = 0;
	int iViewWidth = iWidth-ixStart;
	int iViewHeight = iHeight / 4;
	SetViewPort(ixStart,iyStart,iViewWidth,iViewHeight);//窗口右上1/4区域大小	
	D3DRECT d3dRect;
	d3dRect.x1 = ixStart;
	d3dRect.y1 = iyStart;
	d3dRect.x2 = iWidth;
	d3dRect.y2 = iHeight/4;
	pInterface->GetDevice()->Clear(1,&d3dRect,
		D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER|( (pInterface->GetInfo()->d3dpp.AutoDepthStencilFormat == D3DFMT_D16) ? 0 : D3DCLEAR_STENCIL ) ,\
		D3DCOLOR_ARGB(255,0,0,0), 1.0f, 0);
}
예제 #2
0
파일: main.cpp 프로젝트: olage/renderer
int main(int argc, char** argv)
{
  Screen screen(width, height);
 
  Model model;
  model.load("obj/african_head.obj");
  // model.load("obj/reconstructed_head.obj");
  
  std::cout << "Model loaded" << std::endl;
  std::cout << "nverts: " << model.nverts() << std::endl;
  std::cout << "nfaces: " << model.nfaces() << std::endl;

  Texture texture;
  texture.Load("obj/african_head_diffuse.tga");

  Texture normal_map;
  normal_map.Load("obj/african_head_nm.tga");


  Matrix44f projection = Matrix44f::Identity();
  Matrix44f viewport = SetViewPort(width / 8, height / 8, width * 3 / 4, height * 3 / 4);
  Matrix44f modelview = LookAt(kEye, kCenter, kUp);

  TGAImage image(width, height, TGAImage::RGB);

  Shader shader(model, texture, normal_map, viewport * projection * modelview, projection * modelview);
  
  for (size_t f = 0; f < model.num_faces(); ++f) {
    auto clip_coords = shader.Vertex(f);
    screen.Triangle(clip_coords, shader);
  }

  screen.WriteTgaFile("output.tga");
  return 0;
}
예제 #3
0
bool CRenderSystemGLES::ResetRenderSystem(int width, int height, bool fullScreen, float refreshRate)
{
  m_width = width;
  m_height = height;
  
  glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
  CalculateMaxTexturesize();

  CRect rect( 0, 0, width, height );
  SetViewPort( rect );

  glEnable(GL_SCISSOR_TEST); 

  g_matrices.MatrixMode(MM_PROJECTION);
  g_matrices.LoadIdentity();

  g_matrices.Ortho(0.0f, width-1, height-1, 0.0f, -1.0f, 1.0f);

  g_matrices.MatrixMode(MM_MODELVIEW);
  g_matrices.LoadIdentity();
  
  glBlendFunc(GL_SRC_ALPHA, GL_ONE);
  glEnable(GL_BLEND);          // Turn Blending On
  glDisable(GL_DEPTH_TEST);  
    
  return true;
}
예제 #4
0
bool CRenderSystemGLES::ResetRenderSystem(int width, int height)
{
  m_width = width;
  m_height = height;
  
  glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
  CalculateMaxTexturesize();

  CRect rect( 0, 0, width, height );
  SetViewPort( rect );

  glEnable(GL_SCISSOR_TEST); 

  glMatrixProject.Clear();
  glMatrixProject->LoadIdentity();
  glMatrixProject->Ortho(0.0f, width-1, height-1, 0.0f, -1.0f, 1.0f);
  glMatrixProject.Load();

  glMatrixModview.Clear();
  glMatrixModview->LoadIdentity();
  glMatrixModview.Load();

  glMatrixTexture.Clear();
  glMatrixTexture->LoadIdentity();
  glMatrixTexture.Load();

  glBlendFunc(GL_SRC_ALPHA, GL_ONE);
  glEnable(GL_BLEND);          // Turn Blending On
  glDisable(GL_DEPTH_TEST);  
    
  return true;
}
예제 #5
0
void GraphicsDevice::Initialize(void)
{
    CreateDeviceAndSwapChain();
    CreateRenderTarget();
    SetViewPort();
 
    m_pD3DDevice->OMSetRenderTargets(1, &m_pRenderTarget->GetRenderTargetView(), m_pRenderTarget->GetDepthStencilView() );
}
예제 #6
0
LUAMTA_FUNCTION(camera, SetViewPort)
{
	auto self = my->ToCameraPtr(1);

	self->SetViewPort(my->ToNumber(1), my->ToNumber(2), my->ToNumber(3), my->ToNumber(4));

	return 0;
}
// Called before the first frame
bool j1Render::Start()
{
	LOG("render start");
	// back background
	SDL_RenderGetViewport(renderer, &viewport);

	//NOTE: My camera cooling, very simple and works, buts ask ric about if this is cheating
	SetViewPort({ 0, 0, camera.w, camera.h });
	return true;
}
예제 #8
0
	// 生成共通処理
	void Camera::Create(D3DXVECTOR3 pos, D3DXVECTOR3 rota)
	{
		SetViewPort(0, 0, app->wnd->GetRectClient().right, app->wnd->GetRectClient().bottom);

		Camera::pos = pos;
		Camera::rota = rota;

		// 射影行列の初期化
		D3DXMatrixIdentity(&m_projection);

		// 射影行列を作成
		D3DXMatrixPerspectiveFovLH(&m_projection, D3DXToRadian(45.0f), aspect, 1.0f, 100000.0f);

		// 射影行列をパイプラインに設定
		render->GetD3d()->SetTransform(D3DTS_PROJECTION, &m_projection);

		View();
	}
예제 #9
0
bool UIDirect3D9View::InitialiseView(IDirect3DDevice9 *Device, const QRect &Rect)
{
    m_viewport = QRect(0, 0, 1, 1);

    m_D3DXMatrixMultiply               = (TORC_D3DXMATRIXMULTIPLY)UIDirect3D9Window::GetD3DX9ProcAddress("D3DXMatrixMultiply");
    m_D3DXMatrixPerspectiveOffCenterLH = (TORC_D3DXMATRIXPERSPECTIVEOFFCENTERLH)UIDirect3D9Window::GetD3DX9ProcAddress("D3DXMatrixPerspectiveOffCenterLH");
    m_D3DXMatrixOrthoOffCenterLH       = (TORC_D3DXMATRIXORTHOOFFCENTERLH)UIDirect3D9Window::GetD3DX9ProcAddress("D3DXMatrixOrthoOffCenterLH");
    m_D3DXMatrixTranslation            = (TORC_D3DXMATRIXTRANSLATION)UIDirect3D9Window::GetD3DX9ProcAddress("D3DXMatrixTranslation");
    m_D3DXMatrixReflect                = (TORC_D3DXMATRIXREFLECT)UIDirect3D9Window::GetD3DX9ProcAddress("D3DXMatrixReflect");
    m_D3DXMatrixRotationZ              = (TORC_D3DXMATRIXROTATIONZ)UIDirect3D9Window::GetD3DX9ProcAddress("D3DXMatrixRotationZ");
    m_D3DXMatrixScaling                = (TORC_D3DXMATRIXSCALING)UIDirect3D9Window::GetD3DX9ProcAddress("D3DXMatrixScaling");

    m_viewValid = m_D3DXMatrixMultiply && m_D3DXMatrixOrthoOffCenterLH && m_D3DXMatrixPerspectiveOffCenterLH &&
                  m_D3DXMatrixTranslation && m_D3DXMatrixReflect && m_D3DXMatrixRotationZ && m_D3DXMatrixScaling;

    SetViewPort(Device, Rect, Parallel);
    return m_viewValid;
}
예제 #10
0
bool KCore::GameInit()
{
	HRESULT hr;
	if (FAILED(CreateGIFactory()))
	{
		return 0;
	}
	if (FAILED(InitDevice()))
	{
		CleanupDevice();
		return 0;
	}
	if (FAILED(InitSwapChain()))
	{
		return 0;
	}
	if (FAILED(SetRenderTarget()))
	{
		return 0;
	}
	if (FAILED(SetViewPort()))
	{
		return 0;
	}
	KDxState::SetState(g_pd3dDevice);

	m_Timer.Init();
	I_Input.Init();

	// font 
	IDXGISurface1*  pSurface;
	hr = g_pSwapChain->GetBuffer(0,
		__uuidof(IDXGISurface1),
		(LPVOID*)&pSurface);
	m_Font.Set(pSurface);
	pSurface->Release();

	Init();
	return true;
}
예제 #11
0
bool CRenderSystemGL::ResetRenderSystem(int width, int height, bool fullScreen, float refreshRate)
{
  m_width = width;
  m_height = height;

  glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );

  CalculateMaxTexturesize();

  CRect rect( 0, 0, width, height );
  SetViewPort( rect );

  glEnable(GL_TEXTURE_2D);
  glEnable(GL_SCISSOR_TEST);

  glMatrixProject.Clear();
  glMatrixModview->LoadIdentity();
  glMatrixProject->Ortho(0.0f, width-1, height-1, 0.0f, -1.0f, 1.0f);
  glMatrixProject.Load();

  glMatrixModview.Clear();
  glMatrixModview->LoadIdentity();
  glMatrixModview.Load();

  glMatrixTexture.Clear();
  glMatrixTexture->LoadIdentity();
  glMatrixTexture.Load();

  if (glewIsSupported("GL_ARB_multitexture"))
  {
    //clear error flags
    ResetGLErrors();

    GLint maxtex;
    glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS_ARB, &maxtex);

    //some sanity checks
    GLenum error = glGetError();
    if (error != GL_NO_ERROR)
    {
      CLog::Log(LOGERROR, "ResetRenderSystem() GL_MAX_TEXTURE_IMAGE_UNITS_ARB returned error %i", (int)error);
      maxtex = 3;
    }
    else if (maxtex < 1 || maxtex > 32)
    {
      CLog::Log(LOGERROR, "ResetRenderSystem() GL_MAX_TEXTURE_IMAGE_UNITS_ARB returned invalid value %i", (int)maxtex);
      maxtex = 3;
    }

    //reset texture matrix for all textures
    for (GLint i = 0; i < maxtex; i++)
    {
      glActiveTextureARB(GL_TEXTURE0 + i);
      glMatrixTexture.Load();
    }
    glActiveTextureARB(GL_TEXTURE0);
  }

  glBlendFunc(GL_SRC_ALPHA, GL_ONE);
  glEnable(GL_BLEND);          // Turn Blending On
  glDisable(GL_DEPTH_TEST);

  return true;
}
예제 #12
0
/* virtual */
void
RoomContainer::VideoAreaChanged(uint16 width, uint16 height)
{
	GFX::rect rect(0, 0, width, height);
	SetViewPort(rect);
}