forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   3d Floor Plan (http://forum.boolean.name/showthread.php?t=16361)

pax 27.02.2012 00:12

Ответ: 3d Floor Plan
 
1. Запоминать координаты всех линий и рисовать все сразу.
2. Для каждой линии создавать отдельный объект, ее рисующий.
3. Использовать например LineRenderer
4. и т.д.

Georg Gukov 29.02.2012 13:31

Ответ: 3d Floor Plan
 
Как отредактировать этот скрипт так чтобы он рисовал не линию а прямоугольник
using UnityEngine;
using System.Collections.Generic;
public class example : MonoBehaviour {

struct line
{
public Vector3 start;
public Vector3 end;
}
public Material mat;
private Vector3 mousePos;
private bool startDraw;
private List<line> lines;
private line currentLine;
void Start() {
lines = new List<line>();
startDraw = false;
}
void Update() {
mousePos = Input.mousePosition;
if (Input.GetKeyDown(KeyCode.Space) && !startDraw)
{
currentLine.start = new Vector3(mousePos.x / Screen.width, mousePos.y / Screen.height, 0);
startDraw = true;
}else if (Input.GetKeyDown(KeyCode.Space) && startDraw)
{
currentLine.end = new Vector3(mousePos.x / Screen.width, mousePos.y / Screen.height, 0);
lines.Add(currentLine);
startDraw = false;
}

}
void OnPostRender() {
if (!mat) {
Debug.LogError("Please Assign a material on the inspector");
return;
}
GL.PushMatrix();
mat.SetPass(0);
GL.LoadOrtho();

foreach(line l in lines)
{
GL.Begin(GL.LINES);
GL.Color(Color.red);
GL.Vertex(l.start);
GL.Vertex(l.end);
GL.End();
}

if(startDraw)
{
GL.Begin(GL.LINES);
GL.Color(Color.yellow);
GL.Vertex(currentLine.start);
GL.Vertex(new Vector3(mousePos.x / Screen.width, mousePos.y / Screen.height, 0));
GL.End();
}
GL.PopMatrix();
}
}

pax 29.02.2012 13:50

Ответ: 3d Floor Plan
 
Рисовать не линиями а треугольниками.
http://unity3d.com/support/documenta...TRIANGLES.html

Georg Gukov 12.03.2012 19:27

Ответ: 3d Floor Plan
 
Привет всем!!! Подскажите пожалуйста как изменить скрипт для рисования мышью
Код:

private var origPoints : Vector2[];

function Start () {
    linePoints = new Vector2[numberOfPoints];
    origPoints = new Vector2[numberOfPoints];
   
    // Plot points on a circle
    var radians : float = 360.0/(numberOfPoints-1)*Mathf.Deg2Rad;
    var p = 0.0;
    for (i = 0; i < numberOfPoints; i++) {
        linePoints[i] = Vector2(.5 + .25*Mathf.Cos(p), .5 + .25*Mathf.Sin(p));
        origPoints[i] = linePoints[i];
        p += radians;
    }
}

function Update () {
    for (i = 0; i < linePoints.Length; i++) {
        if (i%2 == 0) {var m = .4; var t = 1.0;}
        else {m = .5; t = .5;}
        linePoints[i] = (origPoints[i]-Vector2(.5, .5))*(Mathf.Sin(Time.time*t)+Mathf.PI*m)+Vector2(.5, .5);
    }
}

var numberOfPoints = 31;
var lineColor = Color.white;
var lineWidth = 3;
var drawLines = true;
private var lineMaterial : Material;
private var linePoints : Vector2[];
private var cam : Camera;

function Awake () {
    lineMaterial = new Material( "Shader \"Lines/Colored Blended\" {" +
        "SubShader { Pass {" +
        "  BindChannels { Bind \"Color\",color }" +
        "  Blend SrcAlpha OneMinusSrcAlpha" +
        "  ZWrite Off Cull Off Fog { Mode Off }" +
        "} } }");
    lineMaterial.hideFlags = HideFlags.HideAndDontSave;
    lineMaterial.shader.hideFlags = HideFlags.HideAndDontSave;
    cam = camera;
}

function OnPostRender () {
    if (!drawLines || !linePoints || linePoints.Length < 2) {return;}
   
    var nearClip = cam.nearClipPlane + .00001; // Add a bit, else there's flickering when the camera moves
    var end = linePoints.Length - 1;
    var thisWidth = 1.0/Screen.width * lineWidth * .5;
       
    lineMaterial.SetPass(0);
    GL.Color(lineColor);
   
    if (lineWidth == 1) {
        GL.Begin(GL.LINES);
        for (i = 0; i < end; i++) {
            GL.Vertex(cam.ViewportToWorldPoint(Vector3(linePoints[i].x, linePoints[i].y, nearClip)));
            GL.Vertex(cam.ViewportToWorldPoint(Vector3(linePoints[i+1].x, linePoints[i+1].y, nearClip)));
        }
    }
    else {
        GL.Begin(GL.QUADS);
        for (i = 0; i < end; i++) {
            var perpendicular = (Vector3(linePoints[i+1].y, linePoints[i].x, nearClip) -
                                Vector3(linePoints[i].y, linePoints[i+1].x, nearClip)).normalized * thisWidth;
            var v1 = Vector3(linePoints[i].x, linePoints[i].y, nearClip);
            var v2 = Vector3(linePoints[i+1].x, linePoints[i+1].y, nearClip);
            GL.Vertex(cam.ViewportToWorldPoint(v1 - perpendicular));
            GL.Vertex(cam.ViewportToWorldPoint(v1 + perpendicular));
            GL.Vertex(cam.ViewportToWorldPoint(v2 + perpendicular));
            GL.Vertex(cam.ViewportToWorldPoint(v2 - perpendicular));
        }
    }
    GL.End();
}

function OnApplicationQuit () {
    DestroyImmediate(lineMaterial);
}

@script RequireComponent(Camera)



Часовой пояс GMT +4, время: 07:13.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot