Ejemplo n.º 1
0
	void Renderer::on_surface_changed(int width, int height, bool is_tablet)
	{
		DLOG(INFO) << "Surface changed: " << width << "x" << height << ", tablet: " << std::boolalpha << is_tablet;
		invalidate();
		
		// Устанавливаем вьюпорт принудительно, так как gl-контекст между сменами поверхности мог быть разрушен
		gl::set_viewport(rectangle_t(0, 0, width, height), true);
		
		// Запоминаем размеры экрана. Если размеры поверхности не изменились, матрицы не изменяем
		if (!gl::set_screen_size(dimension_t(width, height))) return;
		
		// Строим исходную матрицу проекции, от которой будут отталкиваться координаты объектов
		matrix().reset();
/*
		// Аспект - отношение ширины вьюпорта к его высоте
		float aspect = (float)width / (float)height;
		// Перспектива: ближняя и дальняя плоскости отсечения всегда положительные, ось Z направлена из глубины в
		// сторону экрана, позиция камеры в нулевой точке мировых координат, смотрит в глубину экрана, расположена
		// в горизонтальной плоскости осей X и Z.
		matrix().perspective(45.0f, aspect, 0.0001f, 100.0f);
		// Камеру разворачиваем вокруг оси Z в обратную сторону, чтобы смотрела по направлению оси Z. Таким образом
		// добиваемся того, что ось Z направлена от экрана в глубину, а не наоборот.
		matrix().look_at(position_t(0.0f, 0.0f, 0.0f), position_t(0.0f, 0.0f, 1.0f), position_t(0.0f, 1.0f, 0.0f));
*/
		matrix().ortho(0.0f, static_cast<GLfloat>(width), static_cast<GLfloat>(height), 0.0f, -100.0f, 100.0f);
	}
Ejemplo n.º 2
0
void CamWnd::draw() {
	m_drawing = true;

	gtkutil::GLWidgetSentry sentry(m_gl_widget);
	if (GlobalMap().isValid() && ScreenUpdates_Enabled()) {
		Cam_Draw();

		m_XORRectangle.set(rectangle_t());
	}

	m_drawing = false;
}