Было время был я влюблен и было мало денег. Хотелось сделать какой-то необычный подарок девушки на день святого валентина и этим подарком стала вот такая программа работу которой вы видите на первом видео. Скоро 14 февраля и может кого-то из вас эта статья вдохновит сделать свою 3D красоту для любимой девушки.
Ну или можете просто взять исходники этой и чуть чуть переделать. Да что уж там, если вашу любимую зовут Юля то вам вообще повезло. Код это был написан лет 8 назад и там просто глаза могут вытечь от ужаса. Я тогда был прям совсем начинающим джуном поэтому морально подготовьтесь прежде чем смотреть исходники.
Собственно говоря сначала у меня была программа которая просто запускала на видеокарте через вычислительный шейдер ураган из звезд:
Сделана она была с помощью SharpDX и шейдеры написаны на HLSL.
Потом я решил переделать ее в программу которая собирает звезды в 3D сердце с именем. Рисовал все с помощью кривых Безье. Использовал более удобный MonoGame
Если вам нужно сменить имя то редактировать вам надо вот этот участок кода:
/// <summary> /// Метод для рисования буквы "Ю". /// </summary> private void Ju() { //0 - 50 000 Lane l; //Индекс в массиве вертексов с которого начнем l.arStart = 0; //Индекс в массиве вертексов на котором закончим. l.arEnd = 12000; //Начало линии l.start = new Vector2(-80, -25); //Центр линии l.middl = new Vector2(-65, -15); //Конец линии l.end = new Vector2(-50, 25); //Нарисовать линию из вершин (вертексов Vector3) LaneBezier(l); l.arStart = 12000; l.arEnd = 36000; l.start = new Vector2(-50, -25); l.middl = new Vector2(-50, 15); l.end = new Vector2(0, 25); LaneBezier(l); l.arStart = 36000; l.arEnd = 48000; l.start = new Vector2(-50, -25); l.middl = new Vector2(30, -5); l.end = new Vector2(0, 25); LaneBezier(l); l.arStart = 48000; l.arEnd = 50000; l.start = new Vector2(-70, -5); l.middl = new Vector2(-50, -10); l.end = new Vector2(-30, 10); LaneBezier(l); } /// <summary> /// Метод для рисования буквы "л". /// </summary> void Li() { //50 00 75 000 Lane l; l.arStart = 50000; l.arEnd = 65000; l.start = new Vector2(0, -10); l.middl = new Vector2(15, -30); l.end = new Vector2(40, 15); LaneBezier(l); l.arStart = 65000; l.arEnd = 75000; l.start = new Vector2(40, 15); l.middl = new Vector2(40, -30); l.end = new Vector2(50, -10); LaneBezier(l); } /// <summary> /// Метод для рисования буквы "я". /// </summary> void Ya() { // 75 000 99999 Lane l; l.arStart = 75000; l.arEnd = 80000; l.start = new Vector2(50, -10); l.middl = new Vector2(65, -30); l.end = new Vector2(80, 0); LaneBezier(l); l.arStart = 80000; l.arEnd = 85000; l.start = new Vector2(80, 0); l.middl = new Vector2(70, 20); l.end = new Vector2(60, 0); LaneBezier(l); l.arStart = 85000; l.arEnd = 90000; l.start = new Vector2(60, 0); l.middl = new Vector2(75, -20); l.end = new Vector2(85, 0); LaneBezier(l); l.arStart = 90000; l.arEnd = 95000; l.start = new Vector2(80, 0); l.middl = new Vector2(70, -30); l.end = new Vector2(90, -15); LaneBezier(l); } /// <summary> /// Метод для рисования сердца /// </summary> void Heart() { Lane l; l.arStart = 95000; l.arEnd = 115000; l.start = new Vector2(0, 60); l.middl = new Vector2(280, 180); l.end = new Vector2(0, -150); LaneBezier(l); l.arStart = 115000; l.arEnd = 135000; l.start = new Vector2(0, 60); l.middl = new Vector2(-280, 180); l.end = new Vector2(0, -150); LaneBezier(l); }
Добра и любви вам. У меня с той девушкой не сложилось. Надеюсь, вам такая валентинка принесет счастье.