Esempio n. 1
0
CameraDX::CameraDX(float aspect, float fov, float zf, float zn, float zoomedIn, float zoomedOut) : Camera(zoomedIn, zoomedOut)
{
	Aspect(aspect);
	FOV(fov);
	ZFar(zf);
	ZNear(zn);
}
Esempio n. 2
0
//=====================================================================================
void YSLaboratoryView::paintGL()
{
    // painting (called for each view update)

    Scene()->SetPerspective(Aspect(), (double)width() / (double)height(), 1, 100.0);
    Scene()->LookAt(CameraPosition(), CameraPosition() + CameraFront(), CameraUp());
    Scene()->Draw();
}
Esempio n. 3
0
void CWindowsMetaFileControl::AlignBounds(CRect& crBounds)
{
	CRect crClient;
	GetClientRect(crClient);

	if (Aspect() == ASPECT_STRETCH)
	{
		crBounds = crClient;
	}
	else
	{
		int nImageWidth = crBounds.Width();
		int nImageHeight = crBounds.Height();

		int nTargetWidth = crClient.Width();
		int nTargetHeight = crClient.Height();

		int nNumerator = nTargetWidth;
		int nDenominator = nImageWidth;

		if (((long)nTargetWidth*(long)nImageHeight) > ((long)nTargetHeight*(long)nImageWidth))
		{
			nNumerator = nTargetHeight;
			nDenominator = nImageHeight;
		}

		nImageWidth = MulDiv(nImageWidth, nNumerator, nDenominator);
		nImageHeight = MulDiv(nImageHeight, nNumerator, nDenominator);

		crBounds.SetRect(0, 0, nImageWidth, nImageHeight);

		int nXOffset = 0;

		if (HorizontalAlignment() != HORIZONTAL_ALIGN_LEFT)
		{
			nXOffset = nTargetWidth-nImageWidth;

			if (HorizontalAlignment() == HORIZONTAL_ALIGN_CENTER)
			{
				nXOffset /= 2;
			}
		}

		int nYOffset = 0;

		if (VerticalAlignment() != VERTICAL_ALIGN_TOP)
		{
			int nYOffset = nTargetHeight-nImageHeight;

			if (VerticalAlignment() == VERTICAL_ALIGN_MIDDLE)
			{
				nYOffset /= 2;
			}
		}

		crBounds.OffsetRect(nXOffset+crClient.left, nYOffset+crClient.top);
	}
}
Esempio n. 4
0
void CameraDX::updateProj()
{
	MatF4 perspective;
	ZeroMemory(&perspective, sizeof(MatF4));

	perspective.m[0][0] = 1/(Aspect()*(tan(FOV()/2)));
	perspective.m[1][1] = 1/(tan(FOV()/2));
	perspective.m[2][2] = ZFar()/(ZFar() - ZNear());
	perspective.m[2][3] = 1.0f;
	perspective.m[3][2] = (-ZNear() * ZFar())/(ZFar() - ZNear());

	projection = perspective;
}
Esempio n. 5
0
	void Reshape(void)
	{
		gl.Viewport(Width(), Height());

		auto camera = glm::perspective(
			53.0f,
			GLfloat(Aspect()),
			1.0f, 100.0f
		) * glm::lookAt(
			glm::vec3(21.0f, 7.0f, 0.0f),
			glm::vec3( 0.0f, 0.0f, 0.0f),
			glm::vec3( 0.0f, 1.0f, 0.0f)
		);
		oglplus::Uniform<oglplus::Mat4f>(prog, "CameraMatrix").Set(camera);
	}
void GXBaseContext::Setup2D(void)
{
	//Setup 2D
	glDisable(GL_DEPTH_TEST);
	glDisable(GL_LIGHTING);
	glEnable(GL_BLEND);
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
	glMatrixMode(GL_PROJECTION);	
	glLoadIdentity();

	float aspect = Aspect();
	//glOrtho(-0.5f * aspect, 0.5f * aspect, 0.5f, -0.5f, -1.0, 1.0);
	glOrtho(-0.5f, 0.5f, 0.5f, -0.5f, -1.0, 1.0);

	glMatrixMode(GL_MODELVIEW);
}
Esempio n. 7
0
bool CDocCommands::CropSetAspect(int iValue)
{
	CImageObject* pObject = m_DocWindow.GetSelectedObject();
	if (!pObject)
		return false;

	// Constrain the DestRect to the Aspect ratio and set it as the new CropRect
	CSize Aspect(LOWORD(iValue), HIWORD(iValue));
	CRect DestRect = pObject->GetDestRect();
	int dx = DestRect.Width();
	int dy = DestRect.Height();
	ScaleToFit(&dx, &dy, Aspect.cx, Aspect.cy, true/*bUseSmallerFactor*/);
	DestRect.left -= ((dx - DestRect.Width()) / 2);
	DestRect.top  -= ((dy - DestRect.Height()) / 2);
	DestRect.right  = DestRect.left + dx;
	DestRect.bottom = DestRect.top  + dy;

	pObject->SetCropRect(DestRect);
	return true;
}
	RESULTCODE DemAspectProcessorImpl::Execute()
	{
		const char* inSourceName = GetInputDataSource();
		const char* inRasterName = GetInputRaster();
		const char* inRasterPath = GetInputRasterPath();
		const char* outSourceName = GetOutputDataSource();
		const char* outRasterName = GetOutputRaster();
		const char* outRasterPath = GetOutputRasterPath();

		Workspace* pWorkspace = NULL;
		RasterWorkspace* pinRasterWorkspace = NULL;
		RasterWorkspace* poutRasterWorkspace = NULL;

		GError* pError = augeGetErrorInstance();
		GLogger* pLogger = augeGetLoggerInstance();
		ConnectionManager* pConnManager = augeGetConnectionManagerInstance();

		pWorkspace = pConnManager->GetWorkspace(m_user, inSourceName);
		if(pWorkspace==NULL)
		{
			return AG_FAILURE;
		}
		pinRasterWorkspace = dynamic_cast<RasterWorkspace*>(pWorkspace);

		pWorkspace = pConnManager->GetWorkspace(m_user, outSourceName);
		if(pWorkspace==NULL)
		{
			return AG_FAILURE;
		}
		poutRasterWorkspace = dynamic_cast<RasterWorkspace*>(pWorkspace);

		Raster* pinRaster = NULL;
		RasterFolder* pinFolder = NULL;

		Raster* poutRaster = NULL;
		RasterFolder* poutFolder = NULL;

		pinFolder = pinRasterWorkspace->GetFolder(inRasterPath);
		if(pinFolder==NULL)
		{
			return AG_FAILURE;
		}
		pinRaster = pinFolder->GetRasterDataset()->GetRaster(inRasterName);
		if(pinRaster==NULL)
		{
			const char* msg = "无法打开输入栅格数据";
			pError->SetError(msg);
			pinFolder->Release();
			return AG_FAILURE;
		}

		g_uint band_count = pinRaster->GetBandCount();
		if(band_count!=1)
		{
			const char* msg = "Dem坡向计算仅支持单波段Dem数据";
			pError->SetError(msg);
			pinFolder->Release();
			return AG_FAILURE;
		}
		
		poutRaster = Aspect(pinRaster);

		if(poutRaster!=NULL)
		{
			poutRaster->SetName(outRasterName);
		}
		poutFolder = poutRasterWorkspace->GetFolder(outRasterPath);
		if(poutFolder==NULL)
		{
			pinFolder->Release();
			poutRaster->Release();
			return AG_FAILURE;
		}
		RESULTCODE rc = poutFolder->GetRasterDataset()->AddRaster(outRasterName, poutRaster);
		poutRaster->Release();
		pinFolder->Release();
		poutFolder->Release();

		return rc;
	}
Esempio n. 9
0
i32 main(i32 ArgCount, char ** Args)
{
  char * path_exe = SDL_GetBasePath();
  for(u32 i = 0, size = sizeof(RESRC); i < size; i += MAX_STR)
  {
    char path_res[MAX_STR];
    SDL_memcpy(path_res, &RESRC.c[i], MAX_STR);
    SDL_snprintf(&RESRC.c[i], MAX_STR, "%s%s", path_exe, path_res);
  }
  
  SDL_Window  * sdl_window;
  SDL_GLContext sdl_glcontext;
  
  gfWindow(&sdl_window, &sdl_glcontext, 0, 0, "App", 1280, 720, 4);

  const char * bobs[] =
  {
    RESRC.monkey_bob,
    RESRC.sphere_bob,
    RESRC.teapot_bob,
  };

  bob_t meshes = gfBobCreate(countof(bobs), bobs);

  const char * bmps[] =
  {
    RESRC.texture_1,
    RESRC.texture_2,
    RESRC.texture_3,
  };

  gpu_texture_t textures = gfTextureCreateFromBmp(512, 512, 4, countof(bmps), bmps);
  
  const char * cubemap_px[] = { RESRC.cubemap_px };
  const char * cubemap_nx[] = { RESRC.cubemap_nx };
  const char * cubemap_py[] = { RESRC.cubemap_py };
  const char * cubemap_ny[] = { RESRC.cubemap_ny };
  const char * cubemap_pz[] = { RESRC.cubemap_pz };
  const char * cubemap_nz[] = { RESRC.cubemap_nz };
  
  gpu_texture_t cubemaps = gfCubemapCreateFromBmp(512, 512, 4, countof(cubemap_px),
    cubemap_px, cubemap_nx, cubemap_py, cubemap_ny, cubemap_pz, cubemap_nz
  );
  
  u32 vs_mesh = gfProgramCreateFromFile(GL_VERTEX_SHADER, RESRC.vs_mesh);
  u32 fs_mesh = gfProgramCreateFromFile(GL_FRAGMENT_SHADER, RESRC.fs_mesh);
  u32 pp_mesh = gfProgramPipelineCreate(vs_mesh, fs_mesh);
  
  u32 vs_quad = gfProgramCreateFromFile(GL_VERTEX_SHADER, RESRC.vs_quad);
  u32 fs_quad = gfProgramCreateFromFile(GL_FRAGMENT_SHADER, RESRC.fs_quad);
  u32 pp_quad = gfProgramPipelineCreate(vs_quad, fs_quad);
  
  u32 vs_cubemap = gfProgramCreateFromFile(GL_VERTEX_SHADER, RESRC.vs_cubemap);
  u32 fs_cubemap = gfProgramCreateFromFile(GL_FRAGMENT_SHADER, RESRC.fs_cubemap);
  u32 pp_cubemap = gfProgramPipelineCreate(vs_cubemap, fs_cubemap);
  
  gpu_cmd_t cmd[3] = {0};
  
  cmd[0].first = meshes.first.as_u32[0];
  cmd[1].first = meshes.first.as_u32[1];
  cmd[2].first = meshes.first.as_u32[2];
  
  cmd[0].count = meshes.count.as_u32[0];
  cmd[1].count = meshes.count.as_u32[1];
  cmd[2].count = meshes.count.as_u32[2];
  
  cmd[0].instance_first = 0;
  cmd[1].instance_first = 30;
  cmd[2].instance_first = 60;
  
  cmd[0].instance_count = 30;
  cmd[1].instance_count = 30;
  cmd[2].instance_count = 30;
  
  gpu_storage_t ins_first = gfStorageCreate(.format = x_u32, .count = countof(cmd));
  gpu_storage_t ins_pos = gfStorageCreate(.format = xyz_f32, .count = 90);
  
  for(u32 i = 0; i < ins_first.count; ++i)
  {
    ins_first.as_u32[i] = cmd[i].instance_first;
  }
  
  for(u32 i = 0, row = 10, space = 3; i < 90; ++i)
  {
    ins_pos.as_vec3[i].x = i * space - (i / row) * row * space;
    ins_pos.as_vec3[i].y = 0;
    ins_pos.as_vec3[i].z = (i / row) * space;
  }

  gpu_texture_t fbo_depth = gfTextureCreate(.w = 1280, 720, .format = depth_b32);
  gpu_texture_t fbo_color = gfTextureCreate(.w = 1280, 720, .format = srgba_b8);
  
  u32 fbo_colors[] =
  {
    [0] = fbo_color.id,
  };
  
  u32 fbo = gfFboCreate(fbo_depth.id, 0, countof(fbo_colors), fbo_colors, 0);
  
  gpu_sampler_t s_textures = gfSamplerCreate(4);
  gpu_sampler_t s_fbo = gfSamplerCreate(.min = GL_NEAREST, GL_NEAREST);
  
  u32 state_textures[16] =
  {
    [0] = meshes.mesh_id.id,
    [1] = meshes.attr_first.id,
    [2] = meshes.attr_id.id,
    [3] = meshes.pos.id,
    [4] = meshes.uv.id,
    [5] = meshes.normal.id,
    [6] = ins_first.id,
    [7] = ins_pos.id,
    [8] = textures.id,
    [9] = cubemaps.id,
   [10] = fbo_color.id,
  };
  
  u32 state_samplers[16] =
  {
    [8] = s_textures.id,
    [9] = s_textures.id,
   [10] = s_fbo.id,
  };
  
  glBindTextures(0, 16, state_textures);
  glBindSamplers(0, 16, state_samplers);
  
  vec3 cam_pos = {23.518875f, 5.673130f, 26.649000f};
  vec4 cam_rot = {-0.351835f, 0.231701f, 0.090335f, 0.902411f};
  vec4 cam_prj = {0.f};
  mat3 cam_mat = {0.f};

  Perspective(
    &cam_prj.x,
    Aspect(sdl_window),
    85.f * QFPC_TO_RAD,
    0.01f, 1000.f
  );
  
  SDL_SetRelativeMouseMode(1);
  u32 t_prev = SDL_GetTicks();

  glEnable(GL_DEPTH_TEST);
  glEnable(GL_CULL_FACE);
  glEnable(GL_BLEND);

  while(1)
  {
    u32 t_curr = SDL_GetTicks();
    f64 dt = ((t_curr - t_prev) * 60.0) / 1000.0;
    
    SDL_PumpEvents();
    i32 mouse_x_rel = 0;
    i32 mouse_y_rel = 0;
    SDL_GetRelativeMouseState(&mouse_x_rel, &mouse_y_rel);
    const u8 * key = SDL_GetKeyboardState(NULL);
    
    quatFirstPersonCamera(
      &cam_pos.x,
      &cam_rot.x,
      &cam_mat.sd_x,
      0.10f,
      0.05f * (f32)dt,
      mouse_x_rel,
      mouse_y_rel,
      key[SDL_SCANCODE_W],
      key[SDL_SCANCODE_A],
      key[SDL_SCANCODE_S],
      key[SDL_SCANCODE_D],
      key[SDL_SCANCODE_E],
      key[SDL_SCANCODE_Q]
    );
    
    static int show_pass = 0;
    if(key[SDL_SCANCODE_1]) show_pass = 0;
    if(key[SDL_SCANCODE_2]) show_pass = 1;
    if(key[SDL_SCANCODE_3]) show_pass = 2;
    if(key[SDL_SCANCODE_4]) show_pass = 3;
    if(key[SDL_SCANCODE_5]) show_pass = 4;
    
    glProgramUniform3fv(vs_mesh, 0, 1, &cam_pos.x);
    glProgramUniform4fv(vs_mesh, 1, 1, &cam_rot.x);
    glProgramUniform4fv(vs_mesh, 2, 1, &cam_prj.x);
    glProgramUniform3fv(fs_mesh, 0, 1, &cam_pos.x);
    glProgramUniform1iv(fs_mesh, 1, 1, &show_pass);
    glProgramUniform4fv(vs_cubemap, 0, 1, &cam_rot.x);
    glProgramUniform4fv(vs_cubemap, 1, 1, &cam_prj.x);
    
    for(u32 i = 0; i < 90; ++i)
      ins_pos.as_vec3[i].y = (f32)sin((t_curr * 0.0015f) + (i * 0.5f)) * 0.3f;
    
    gfFboBind(fbo);
      gfClear();
      gfDraw(pp_mesh, countof(cmd), cmd);
    gfFboBind(0);
    
    gfClear();
    
    if(!show_pass)
    {
      glDisable(GL_DEPTH_TEST);
        gfFire(pp_cubemap, 36);
      glEnable(GL_DEPTH_TEST);
    }
    
    gfFire(pp_quad, 6);

    SDL_Event event;
    while(SDL_PollEvent(&event))
    {
      if(event.type == SDL_QUIT)
        goto exit;
    }
    
    SDL_GL_SwapWindow(sdl_window);
    glFinish();
    
    t_prev = t_curr;
  }

  exit: return 0;
}