Дайте, пожалуйста, совет по графике

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by virt, 28 Mar 2011.

  1. virt

    virt New Member

    Joined:
    13 Mar 2011
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Привет. У меня 3х-мерная сцена, состаящая из параллелепипеда,пирамиды и усеченной пирамиды.Сцену нужно описать полигональной сеткой.Никаких графических библиотек типа openGl использовать нельзя. Так вот как лучше мне их задать?
    -каждый объект отдельно(создать класс для каждого объекта)?
    -как 1 список многоугольников ?

    Описание сцены нужно хранить в файле,можно там еще хранить и какие-то описания объекта,например цвет
     
  2. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    ну вообще в 3D графике чаще всего используют треугольники для описания какого либо объекта. так как из них можно сделать любой сложный объект.

    По этому лучше всего какраз и будет создать класс который принимает структуру типа
    кол-во треугольников + и потом пошли описания этих трегольников
    x1, y1, z1 первый угол
    x2, y2, z2 второй угол
    x3, y3, z3 третий угол

    Ну или по другому чуть делать - набор плоскостей использовать. Разбивать каждый объект на плоскости(по факту многоугольник) и хранить его координаты.
    К примеру могу предложить такой формат хранения:
    Строка 1| кол-во объектов допустим число "M"
    Строка 2| Кол-во плоскостей первого объекта, допустим число "N"
    Строка 3| Кол-во точек в плоскости допустим число "С"
    Далее идет "C" строк описания вида
    x1, y1, z1, с1 - координаты (x1,y1,z1), а с1 - цвет точки.
    Затем подобное описание "N" раз для следующих плоскостей.
    Затем подобное описание "M" раз для следующих объектов.
    В файле может это всё быть как
    Code:
    2 // 2 объекта
    2 // 2 плоскости первого объекта
    3 // 3 точки первой плоскости первого объекта
    x y z c // координаты первой точки первой плоскости первого объекта и цвет
    x y z c // второй точки
    x y z c // второй третей точки
    2 // 2 точки второй плоскости первого объекта
    x y z c // координаты первой точки второй плоскости первого объекта и цвет
    x y z c // второй точки
    1 // одна плоскость второго объекта
    2 // 2 точки второго объект первой плоскости
    x y z c // координаты первой точки первой плоскости второго объекта и цвет
    x y z c // второй точки
    
    таким образом быстро можно всё распарсить, получить описание всей сцены, каждого объекта на ней и каждой плоскости каждого объекта и каждой точки плоскости.

    Цвет точки можно потом использовать для связи с соседними точками плоскости.
    т.е. плавный переход от одной точки до другой. Как раз имя координаты точек и накальный и конечный цвет, то по формуле прямой, можно вычислить какая точка какой цвет будет иметь.