межплатформенная 2d либа
andarky Дата: Понедельник, 25 Марта 2013, 11:59 | Сообщение # 1
старожил
Сейчас нет на сайте
под виндой есть куча всяких способов. А как сделать так чтоб все было в унити? Задача такая: надо чертить графики всякие. Ну что-то типа стандартного API для WinForms: начертить линию заданной толщины от x1,y1 - до x2,y2 и заданного цвета. начертить дугу / окружность залить замкнутую область цветом. Я что-то кроме SetPixel(x,y,c) ничего не нашел... Неужели там этого примитива НЕТ?? Да я в Blitz3d та текстуры генерил... а Unity - монстр - и нет такой элементарщины? может быть Assetы какие есть??
Моя страничка по дизайну GameDev//Design//3D Ютубчик
DrFen Дата: Понедельник, 25 Марта 2013, 13:58 | Сообщение # 2
был не раз
Сейчас нет на сайте
Например
andarky Дата: Понедельник, 25 Марта 2013, 15:16 | Сообщение # 3
старожил
Сейчас нет на сайте
DrFen , посмотрел: Цитата
Note: This is an editor class.
- я так понял только в редакторе а у меня на выходе будут Win.EXE WebPlayer SWF Mac и.. в планах AndroidOS и iOS
Моя страничка по дизайну GameDev//Design//3D Ютубчик
seaman Дата: Понедельник, 25 Марта 2013, 18:52 | Сообщение # 4
старожил
Сейчас нет на сайте
Цитата
и нет такой элементарщины?
Ну это потому, что никому не нужно. Есть Vectrosity , которым в принципе такое сделать можно.
DrFen Дата: Вторник, 26 Марта 2013, 08:36 | Сообщение # 5
был не раз
Сейчас нет на сайте
Цитата (andarky )
- я так понял только в редакторе
Ошибся в понимании, что надо. Тогда можно например так:
Код
using UnityEngine; using System.Collections; public class DrawBezier : MonoBehaviour { //Объекты по которым будем римовать кривую public GameObject point0; public GameObject point1; public GameObject point2; public GameObject point3; private Vector3 currentBezierPoint; private float currentStep = 0F; //Массив линий для прорисовки кривой private ArrayList lines = new ArrayList(); // Use this for initialization void Start () { currentBezierPoint = CalculateBezierPoint(currentStep, point0.transform.position, point1.transform.position , point2.transform.position , point3.transform.position); lines.Add(point0.transform.position); } // Update is called once per frame oid Update () { if (point0isBigger) { if ((currentBezierPoint.x > point3.transform.position.x || currentBezierPoint.y > point3.transform.position.y || currentBezierPoint.z > point3.transform.position.z)) { currentStep += 0.01F; currentBezierPoint = CalculateBezierPoint(currentStep, point0.transform.position, point1.transform.position , point2.transform.position , point3.transform.position); lines.Add(currentBezierPoint); } } else { if ((currentBezierPoint.x < point3.transform.position.x || currentBezierPoint.y < point3.transform.position.y || currentBezierPoint.z < point3.transform.position.z)) { currentStep += 0.01F; currentBezierPoint = CalculateBezierPoint(currentStep, point0.transform.position, point1.transform.position , point2.transform.position , point3.transform.position); lines.Add(currentBezierPoint); } } } void OnRenderObject() { Vector3 currentPoint = new Vector3(0,0,0); bool isFirstStep = true; //Рисуем кривые из списка кривых foreach (Vector3 line in lines) { if (isFirstStep) { currentPoint = line; isFirstStep = false; } else { GL.Begin(GL.LINES); GL.Color(Color.black); GL.Vertex(currentPoint); GL.Vertex(line); GL.End(); currentPoint = line; } } } // Формула кубической кривой безье B[x,y,z] = (1-t)^3*p0 + 3t(1-t)^2 *p1 +3t^2(1-t)*p2 + t^3*p3 // Введем функцию для расчета точки private Vector3 CalculateBezierPoint(float t, Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3) { //Для удобства разобьём по блокам //блок 0 (1-t)^3*p0 Vector3 step0 = Mathf.Pow(1-t, 3)*p0; //блок 1 3t(1-t)^2 *p1 Vector3 step1 = Mathf.Pow(1-t, 2) *3*t*p1; //блок 2 3t^2(1-t)*p2 Vector3 step2 = 3*Mathf.Pow(t,2)*(1-t)*p2; //блок 3 t^3*p3 Vector3 step3 = Mathf.Pow(t,3)*p3; return step0 + step1 + step2 + step3; } }
За оптимизацией кода не гнался. Форматирование при вставке на форум слетает.
Сообщение отредактировал DrFen - Вторник, 26 Марта 2013, 09:47
andarky Дата: Вторник, 26 Марта 2013, 09:54 | Сообщение # 6
старожил
Сейчас нет на сайте
seaman , интересно но ПЛАТНО... DrFen , спасибо за код
Моя страничка по дизайну GameDev//Design//3D Ютубчик