Самый простой вариант сглаживания – через контекстное меню. Пункт Shade Smooth (гладкое затенение). Тут же находится Shade Flat (плоское затенение), который возвращает к прежнему состоянию.
В режиме редактирования объекта есть другой сглаживания – Smooth Vertices (сгладить вершины). При использовании этого инструмента объект или его часть не становятся сглаженными, но вершины и грани изменяются так, чтобы переход между ними был более покатым. Можно использовать другой вариант – Smooth Laplacian. Эффект получается более аккуратным.
2. В Blender при выполнении базовых трансформаций чаще пользуются горячими клавишами.
Нажатия (не зажатие, а просто нажать и отпустить) клавиш G, R, S выполняют операции:
G – grab/move – перемещение
R – rotate – вращение
S – scale – изменение размера
После вызова операции, трансформация происходит при движении мыши. Чтобы подтвердить изменение, надо кликнуть левой кнопкой мыши, для отмены – правой. В данном случае, также как с визуальными манипуляторами, можно зажимать Ctrl и Ctrl+Shift.
Если требуется трансформация только по одной оси, то сразу после нажатия буквы G, R или S, надо нажать X, Y или Z, которые ограничат изменения только пределами одной оси. При этом на сцене появится цветная линия-ось, проходящая через центр объекта.
Ограничение трансформации одной осью
Вращение (R) куба по оси Z
При масштабировании следует учитывать, чем ближе был курсор мыши к центру объекта перед нажатием S, тем сильнее объект будет изменяться при движении мыши. Другая особенность – перевод курсора в противоположную сторону переворачивает объект.
Если два раза подряд нажать клавишу R, то объект можно будет вращать как трекбол.
Для нелюбящих указывать язык в задании предлагается решение на C# 7.3
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
int[] data = ReadIntSeq(8, "Enter values").ToArray();
Console.Write(string.Format("Minimal number that ends by 9 is {0}", data.MinBy(x => x % 10 == 9)));
}
public static IEnumerable<int> ReadIntSeq(int n, string promt = null)
{
if (promt != null)
Console.WriteLine(promt);
for (int i = 0; i < n; i++)
{
yield return int.Parse(Console.ReadLine());
}
}
}
public static class Extensions
{
public static T MinBy<T>(this IEnumerable<T> source, Func<T, bool> predicate) where T: IComparable
{
return source.Where(predicate).Min();
}
}