Рендер графика функции в текстуру

Лучший способ помочь другим, поделиться своими находками.

Рендер графика функции в текстуру

Сообщение IDoNotExist 10 июл 2012, 10:03

Реомендуется использовать как дополнение к Editor скриптам для визуализации какого - либо графика функции.

Веб - демо.

Использование:
1) Пишем свою функцию, она должна принимать один float аргумент (x) и возвращать float тип (y);
пример:
Синтаксис:
Используется csharp
float foo(float x){
     return Math.Sin(x)*Matf.Cos(x);
}
 

2) Объявляем график:
Синтаксис:
Используется csharp
int width = 400; //ширина текстуры с графиком
int height = 300; //высота текстуры с графиком

Graph2D graph = new Graph2D(width,height);
 

3) Рисуем график в текстуру:
Синтаксис:
Используется csharp
Vector2 offset = Vector2.zero;
Vector2 scale = Vector2.one;
Vector2 gridStep = 10f;
int pixelDetail = 2;

Texture2D tex = graph.Draw(foo,offset,scale,Color.green,gridStep,pixelDetail);
 


Аргументы:
offset - смещение начала координат графика относительно начала координат текстуры.
scale - масштабирование графика, не рекомендуются значения <= 0.
gridStep - шаг сетки по x и по y, дробные значения округляются до 0.5.
pixelDetail - детализация графика, сколько пикселей в длину будут отрезки из которых состоит график.


Если нужно нарисовать несколько графиков делаем следующим образом:
Синтаксис:
Используется csharp
Vector2 offset = Vector2.zero;
Vector2 scale = Vector2.one;
Vector2 gridStep = 10f;
int pixelDetail = 2;

GraphFunction[] gf = new GraphFunction[]{Mathf.Sin, Mathf.Cos}; //создаем массив указателей на функции
Color[] colors = new Color[]{Color.red, Color.green }; //создаем массив цветов для функций

Texture2D tex = graph.Draw(gf,offset,scale,colors,gridStep,pixelDetail);
 

GraphFunction - это делегат который объявлен в скрипте Graph2D

UPD:
Чуть не забыл самое важное, можно ж еще настраивать цвет сетки, координатных осей, размер и цвет шрифта.
Синтаксис:
Используется csharp
Graph2D graph = new Graph2D(width,height);

//устанавливать перед отрисовкой графика
graph.backgroundColor = Color.gray; //цвет фона
graph.gridColor = Color.blue; //цвет сетки
graph.colorX = Color.red;                        //цвет оси Х
graph.colorY = Color.green;                        //цвет оси Y
graph.fontColor = Color.black;                   //цвет шрифта  
graph.fontScale = Vector2.one;                   //размер шрифта  


Texture2D tex = graph.Draw(foo,offset,scale,Color.green,gridStep,pixelDetail);
 
У вас нет доступа для просмотра вложений в этом сообщении.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: Рендер графика функции в текстуру

Сообщение aleskeus 26 дек 2014, 23:09

Я правильно понимаю, что проследовав инструкции, я получил текстуру tex? чтобы ее увидеть, мне надо добавить ее как компонент на какой-то объект? как ее увидеть в инспекторе?
aleskeus
UNец
 
Сообщения: 21
Зарегистрирован: 15 мар 2014, 19:05

Re: Рендер графика функции в текстуру

Сообщение IDoNotExist 27 дек 2014, 01:32

Написать к примеру CustomEditor скрипт http://docs.unity3d.com/ru/current/Manual/editor-CustomEditors.html
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: Рендер графика функции в текстуру

Сообщение BenjaminMoore 27 дек 2014, 12:12

Обновление от меня:
1) Изменена логика работы с текстурой, что позволило рисовать графики реалтайм (выигрышь 45мс при разрешении текстуры 800х600 против моих 4мс)
2) Перемещение графика с нормальной привязкой к курсору
3) Добавил немного динамики (смещение по X)

И ребят, как вам хочется поотрывать руки при виде SetPixel в циклах на тысячи итераций, это же ужас. Ничего личного, но это кромешный ад для производительности на пустом месте.
У вас нет доступа для просмотра вложений в этом сообщении.
My hands are hard. My mind is core.
ring0x0000 c0x0063 | write code in rust right now
Аватара пользователя
BenjaminMoore
UNITрон
 
Сообщения: 338
Зарегистрирован: 03 янв 2013, 18:07
Skype: benjminmoore

Re: Рендер графика функции в текстуру

Сообщение aleskeus 27 дек 2014, 15:39

спасибо
aleskeus
UNец
 
Сообщения: 21
Зарегистрирован: 15 мар 2014, 19:05

Re: Рендер графика функции в текстуру

Сообщение IDoNotExist 27 дек 2014, 16:17

BenjaminMoore писал(а):И ребят, как вам хочется поотрывать руки при виде SetPixel в циклах на тысячи итераций, это же ужас. Ничего личного, но это кромешный ад для производительности на пустом месте.

Есть такое )), я просто эту ерунду делал для курсовой работы, чтобы один раз показать и забыть, так что с производительностью особо не заморачивался.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: Рендер графика функции в текстуру

Сообщение gnoblin 29 дек 2014, 03:46

(3A4OT)
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт


Вернуться в Исходники (Копилка)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2