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)

Georg Gukov 20.02.2012 11:33

3d Floor Plan
 
Привет всем!!! Мне нужно создать что типа во этогоhttp://www.apartama.ru/interiers/ кто может подсказать как это сделать. Пожалуйста помогите. Бьюсь уже месяц ни чего не получается

pax 20.02.2012 11:56

Ответ: 3d Floor Plan
 
В чем собственно проблемы?

Georg Gukov 20.02.2012 12:10

Ответ: 3d Floor Plan
 
Как организовать такую программу. Как они рисуют план, а потом переводят
в 3D. Какое содержание скрипта нужно для рисования плана

pax 20.02.2012 12:16

Ответ: 3d Floor Plan
 
Как я понимаю при "2D" просто орто камера с видом сверху. Для стен - генерация меша (модели стен).

Georg Gukov 20.02.2012 12:20

Ответ: 3d Floor Plan
 
Да, то есть при создании своего проекта я также планировал.
Но проблема заключается в том как их рисовать эти стены?

pax 20.02.2012 12:48

Ответ: 3d Floor Plan
 
Ну... просто генерировать Mesh по опорным точкам.

Georg Gukov 20.02.2012 13:34

Ответ: 3d Floor Plan
 
Вообще не могу понять. Пожалуйста если можно кто нибудь
расскажите по подробнее:SOS:

pax 20.02.2012 13:56

Ответ: 3d Floor Plan
 
Ну... Модель состоит из вершин и треугольников. Если математически посчитать координаты вершин и объединить вершины в треугольники, то можно создать программно модель. Собственно все. т.к. там не видел на стенах обоев. Если должны быть обои, то еще надо посчитать uv координаты.

Ссылку на пример создания меша я привел в посте выше.

Georg Gukov 20.02.2012 14:10

Ответ: 3d Floor Plan
 
Огромное человеческое спасибо тебе. Это я понял. Можно ещё вопрос
Как они рисуют линии по точкам и у них отображается размер в метрах как я понял. У меня проект строится на расчете объёма стен т.е. я хочу сделать
чтобы пользователь зашёл на страницу нарисовал стены и подсчитал объём

pax 20.02.2012 14:14

Ответ: 3d Floor Plan
 
ну линия - 4 вершины и два треугольника, т.к. у них начало и конец скрыты "точкой", то вероятнее всего, что пока выполняется рисование - линия это обычный квад или плейн.

Georg Gukov 20.02.2012 14:22

Ответ: 3d Floor Plan
 
Спасибо!!! Буду пробывать что то делать. Но думаю вопросы по этой теме у меня ещё возникнут.Ок

Georg Gukov 21.02.2012 08:59

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

pax 21.02.2012 09:14

Ответ: 3d Floor Plan
 
Ну например тут http://unity3d.com/support/documenta...erence/GL.html

Georg Gukov 22.02.2012 16:32

Ответ: 3d Floor Plan
 
С квадратом понятно как связать это с мышью

Georg Gukov 26.02.2012 23:19

Ответ: 3d Floor Plan
 
Привет!!! Подскажите в примере GL.LINES рисуется одна линия а другая исчезает. Как оставить предыдущую линию

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, время: 03:24.

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