LINUX.ORG.RU

формат для 3Д моделирования


0

1

Подскажите простенький формат для хранения 3Д поверхностей заданных треугольными/четырехугольными площадками. Ситуация такая. Рисовалка и считалка самописные и разрабатываются, геометрию хотелось бы вводить существующим свободным инструментом под Линукс. Насчет рисовалки: разобрался mayavi и mathgl, понял что для самостоятельно рисования подходит такой формат: список всех уникальных координат и затем массив с индексами вершин площадок. Удалось нарисовать пока что-то в gmsh и он сбрасыает в формате msh сначала уникальные точки, затем элементы --- точки, линии, поверхности ... даже для простой сферы, STL --- вершины и зачем-то нормали (нормаль вроде должна по направлению обхода определяться) .... в итоге, пока не нашел подходящего формата. что salome сбрасывает не знаю, пока качается caelinux.

>нормаль вроде должна по направлению обхода определяться
Это верно только для «плоских» полигонов. Если хочется увидеть, например, сферу, то необходимо указывать различные нормали для различных точек полигона. Подробнее - в любой книжке по компьютерной графике.

trex6 ★★★★★
()

формат quake не подходит? он вроде простой был
или ещё smd

TERRANZ ★★★★
()
Ответ на: комментарий от trex6

Здесь нормаль одна. Я так понимаю она для плоского трехугольного полигона.

solid Created by Gmsh
facet normal -0.935113 0.250563 0.250563
  outer loop
    vertex -0.866025 0.5 0
    vertex -1 0 0
    vertex -0.866025 0 0.5
  endloop
endfacet
facet normal -0.250563 0.250563 0.935113
  outer loop
    vertex 0 0.5 0.866025
    vertex -0.5 0 0.866025
    vertex 0 0 1
  endloop
endfacet
...

math-beginer
() автор топика
Ответ на: комментарий от math-beginer

Да, все верно. Если же Вам понадобиться добиться эффекта «сглаживания», тогда нормаль для каждой вершины будет своя, а не одна нормаль на весь полигон/треугольник.

trex6 ★★★★★
()
Ответ на: комментарий от math-beginer

кстати, несложно убедиться что это нормали к площадкам, т.е. всетаки дублированные данные.

>>> from numpy import *
>>> a=array([-0.866025,0.5,0])
>>> b=array([-1,0,0])
>>> c=array([-0.866025,0,0.5])
>>> tmp=cross(c-b,a-b)
>>> n=tmp/linalg.norm(tmp)
>>> n
array([-0.93511277,  0.25056347,  0.25056347])


>>> a=array([0,0.5,0.866025])
>>> b=array([-0.5,0,0.866025])
>>> c=array([0,0,1])
>>> tmp=cross(c-b,a-b)
>>> n=tmp/linalg.norm(tmp)
>>> n
array([-0.25056347,  0.25056347,  0.93511277])

math-beginer
() автор топика
Ответ на: комментарий от trex6

А STL ассоциируется всеми программами только с треугольными рамками? Теоретически можно передать и четыре вершины.

math-beginer
() автор топика
Ответ на: комментарий от trex6

Все оказалось предельно просто, на wiki есть информация :-) http://en.wikipedia.org/wiki/STL_(file_format)

An STL file describes a raw unstructured triangulated surface by the unit normal and vertices (ordered by the right-hand rule) of the triangles using a three-dimensional Cartesian coordinate system.

...

The structure of the format suggests that other possibilities exist (e.g., facets with more than one 'loop', or loops with more than three vertices) but in practice, all facets are simple triangles.

Но вот справилом правой руки не понял. Я вижу что если вращать буравчик правый в направлении точек, то его поступательное движение будет вдоль нормали. А к чему правую руку пристраивать не понятно.

math-beginer
() автор топика
Ответ на: комментарий от Rupricht

Как раз над этим форматом и думаю в настоящее время :-) С одной стороны то что нужно мне есть: вершины уникальные + грани и трехугольные и четырехугольные. Из-за того что храняться только уникальные вершины этот формат оптимальнее STL (в моих задачах нужно некоторые расчеты делать в каждом узле, да и рисовалки результатов освоил с уникальными узлами [mathgl и mayavi]).

сейчас я тестирую программы на «сферических конях» и он подходит, т.к. для рисования сфер и эллипсов инструментов не нужно. Но в дальнейшем геометрию буду вводить каким-либо инструментом, и более менее получилось работать с gmsh и salome, а они сетку не экспортируют в obj.

math-beginer
() автор топика
Ответ на: комментарий от math-beginer

блендер поддерживает obj, но что-то мне кажеться что для ввода геометрии и триангуляции он не заточен

math-beginer
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.