Разбираемся с технологией 3D программирования

Автор Kadet, 23 июня 2021, 09:16

0 Пользователи и 1 гость просматривают эту тему.

Kadet

Цитата: mikekaganski от 30 июля 2021, 12:57Вы говорите не о баге, а о новом функционале.
Согласен. Было.
Цитата: mikekaganski от 30 июля 2021, 12:57Ваш запрос совсем не относится к камере
Тоже согласен.

Но, я далее продолжил развитие темы и сообщил о проблемах с вращениями. Хотя, конкретно об этом, конечно, нужно отдельно говорить, но... в той теме всё равно никто даже не прокоментировал сей мой посыл. Поэтому я и считаю, что не поняли, вернее недопоняли. Если бы хоть кто-то поддержал это направление, то может быть стоило бы вынести этот вопрос в отдельный запрос... А так - просто пропало желание.
И вообще, мне почему-то кажется, что вопрос 3D-моделирования в LO особо никого не интересует, ведь за более чем 10 лет (возможно и больше) существования этого потенциала, кроме как предложенной Региной манипуляций со "звёздочкой", с помощью дополнительных манипуляций в глубинах дефолтовских настроек в XML-файлах, я не нашёл вообще никаких описаний по этому вопросу.

mikekaganski

#91
Цитата: Kadet от 30 июля 2021, 18:09
Но, я далее продолжил развитие темы и сообщил о проблемах с вращениями. Хотя, конкретно об этом, конечно, нужно отдельно говорить, но... в той теме всё равно никто даже не прокоментировал сей мой посыл. Поэтому я и считаю, что не поняли, вернее недопоняли. Если бы хоть кто-то поддержал это направление, то может быть стоило бы вынести этот вопрос в отдельный запрос... А так - просто пропало желание.

Ох ёлки-палки. Это ж какие некорректные у Вас ожидания от написания багов!

Вы рассчитываете на какое-то гарантированное время реакции? Вы неправы. Когда Вы пишите багрепорт, Вы вносите вклад, сообщая о проблеме и предлагая улучшения. Вы можете ожидать уточняющих вопросов. Но на этом всё. Баг - это штука, которую Вы пишете не для Вас, а для разработчика. Когда у кого-то дойдут руки - это зависит от того, как расположатся звёзды. И если Вы ожидаете чего-то другого, Вас ждёт разочарование. Это нормально, когда баг висит год, два, десять, даже если он подтверждён. Это волонтёрский проект, и в нём каждый делает то, что нужно ему. При этом написание багов не теряет смысл, поскольку позволяет описать его, зафиксировать, так сказать; начать собирать статистику (сколько дупликатов и подписавшихся = насколько это важно для сообщества); позволяет, в конце концов, получить контекст использования, когда кто-то размышляет над как-то связанной проблемой. Да и представьте, что бага нет, и некий разработчик, который просматривает багтрекер, просто не найдёт его, а именно сегодня у него было настроение для чего-то этакого...

И кстати, единственной корректной реакцией на комментарий в баге типа "вот там вверху я написал о чём-то, а теперь давайте порассуждаем о чём-то совсем другом" будет "напишите отдельный баг".

Для примера: в 2014 я написал баг 76310. А на этой неделе его Айке исправил. За что ему огромное спасибо :)
С уважением,
Михаил Каганский

Kadet

Цитата: kompilainenn от 30 июля 2021, 12:19У меня ощущение, что вам нужен параметрический CAD, а вы мучаете бедный офисный пакет
Пытался. Не то, что требуется от проекта.
Любые CAD-ы весьма сложны и требуют специальных навыков пользования. К тому же им нужна детальная прорисовка каждой части проекта. Тут этого не требуется.

Задача: упростить, посчитать, предложить и сохранить.
Поэтому: LO->Base->Calc->Drow.

Тем более самому интересно выжать из LO максимум. Пока, то что получается вполне удовлетворяет и иной раз даже нравится.

Kadet

Цитата: mikekaganski от 30 июля 2021, 13:10vrp - это View Reference Point ...
vpn - это View Plane Normal...
До кучи ещё vup - это View-UP ...
Ну, приблизительно так я всё это и расшифровал. Только не так подробно. Описывал выше. Ну, может обозвал из не правильно.
Однако, спасибо за пояснения.

Kadet

Цитата: mikekaganski от 30 июля 2021, 18:17Вы рассчитываете на какое-то гарантированное время реакции?
Да ничего я ни от кого не требую и не ожидаю. Я же русским языком гутарю - понял, что сеей вопрос никого не интересует. Поэтому и не стал развивать это направление.
А заявку кинул не потому, что мне нужна была в этом вопросе помощь, а именно потому, что хотел сообщить народу о существующей проблеме.
А проблему я по любому преодолею и собственными силами. Пусть криво-косо, на "ломаном програмистском", но всё же... Мало ли их уже было. Привык уже, что где-то что-то не так работает как хочется.

Кстати, вот сейчас, Вы предлагаете отключать прорисовку. А она иной раз отключается, а иной раз нет. На почти одинаковых блоках макросов. В частности хочу отключить прорисовку первых стоек, потому что вначале вылезает растянутая на всю сцену первая стойка, огромных размеров, а потом уже всё нормализуется. Не хорошо получается. А oDoc.lockControllers не срабатывает, хоть кол на его голове теши. Придётся обходить. Буду рисовать нечто подобное вашим маленьким осям в середине, или пару невидимок сделаю, чтобы масштабирование не вылезало так убого.

mikekaganski

Цитата: Kadet от 30 июля 2021, 18:45
Я же русским языком гутарю - понял, что сеей вопрос никого не интересует. Поэтому и не стал развивать это направление.
А заявку кинул не потому, что мне нужна была в этом вопросе помощь, а именно потому, что хотел сообщить народу о существующей проблеме.

Так и сообщайте о том, что интересно Вам, а не кому-то ещё. Речь именно о том, что "понял, что сеей вопрос никого не интересует" - ущербная логика. Если Вы себя считаете "никем", тогда ОК.
С уважением,
Михаил Каганский

mikekaganski

Цитата: Kadet от 30 июля 2021, 18:45Вы предлагаете отключать прорисовку. А она иной раз отключается, а иной раз нет. На почти одинаковых блоках макросов. В частности хочу отключить прорисовку первых стоек, потому что вначале вылезает растянутая на всю сцену первая стойка, огромных размеров, а потом уже всё нормализуется. Не хорошо получается. А oDoc.lockControllers не срабатывает, хоть кол на его голове теши. Придётся обходить

lockControllers не отключает прорисовку, он блокирует взаимодействие. Отрисовка отключается видимостью сцены. Но я предполагаю, что это Вы сделаете после "доводки"?

xScene3D = DrawScene3D(oDoc, oDrawPage, "Каркас")
xScene3D.Visible = False
...
...
Camera3D(xScene3D)
Scena3DSize(oDoc, xScene3D)
xScene3D.Visible = True
oDoc.unlockControllers
С уважением,
Михаил Каганский

mikekaganski

Цитата: Kadet от 30 июля 2021, 00:50
"загадочные" цифры, без которых получается либо "Пикасо", либо "белый квадрат".
D3DCamera.vrp.PositionZ = 102885.714285714
D3DCamera.vpn.DirectionZ = 2885.714285714


Проверил. При D3DCamera.vpn.DirectionZ = 2885.714285714 работает так же, как и с D3DCamera.vpn.DirectionZ = 1.
С уважением,
Михаил Каганский

Kadet

Цитата: mikekaganski от 30 июля 2021, 22:29он блокирует взаимодействие
Сие не понял.
Цитата: mikekaganski от 30 июля 2021, 22:29Отрисовка отключается видимостью сцены. Но я предполагаю, что это Вы сделаете после "доводки"?
Да. Раньше подобную структуру, использовал для отключения видимости заполнения таблиц calc:
'Заморозка страницы
oDoc.lockControllers()
oDoc.addActionLock()

Думал именно это, Вы и имели ввиду под "отключить прорисовку".

Kadet

#99
Цитата: mikekaganski от 30 июля 2021, 22:40Проверил. При D3DCamera.vpn.DirectionZ = 2885.714285714 работает так же, как и с D3DCamera.vpn.DirectionZ = 1.
Судя по всему да. Но вот при нуле не работает. А эти цифры ставятся по-умолчанию (только на 1 порядок меньше), поэтому их и отобразил. При изменении параметра xScene3D.D3DSceneDistance автоматически и пропорционально меняются и эти цифры в параметрах камеры.
В общем, D3DCamera.vpn.DirectionZ почему-то не должна равняться нулю. При нуле картинка исчезает.

Kadet

Цитата: Kadet от 30 июля 2021, 23:28'Заморозка страницы
   oDoc.lockControllers()
   oDoc.addActionLock()
Кстати, об этой конструкции. Увидев у Вас lockControllers и подумав, что именно его Вы имелли ввиду под "выключить прорисовку", удивился. Потому что из опыта знаю, что такая конструкция отключает видимость заполнения таблиц calc, но не отключает прорисовку Draw-объектов, как-то кнопки, чекбоксы и т.п.

А Вы имели ввиду просто отключение визуализации. Ну, так бы сразу и сказали. Тоже не понял посыл.

Kadet

#101
А вот теперь, новые грабли.
Только не ругайте код, он был написан уже не сейчас и ещё не подвергся оптимизации. По данному вопросу важен один только макрос - PList3D, а всё остальное просто обеспечивает его работу. Это просто мой черновик, который я в хвост и гриву, с помарками и пр. А макрос считаю прост и без лишнего мусора.

(В файле Тест17 почему-то никак не хочет сохраняться моя картинка. Нажмите "Нарисовать" и поклацайте кнопку "^". В общем, положите модель ближе к плоскости горизонта. Там становится чётко видно то, о чём я веду речь).
Итак. Делаю полигоны, собирая в массивы по более 250 точек. В итоге получаю представленную картинку.
В этой картинке явно - нет заливки верхней части, хотя каждая плоскость прорисована длинными замкнутыми полигональными прямоугольниками. А в общей картинке заливка верхних частей исчезает.
Есть предположение, что это проходит потому, что всё это я верстаю как один единый полигон для всей модели.
Sequence.SequenceX(0).SequenceX = Array(0, 50, 50, 0, 0, _
50, 70, 70, 50, 50, _
70, 192, 192, 70, 70, _
...
262, 212, 192, 70, 50, 0)
xShape3D.D3DPolyPolygon3D = Sequence

Может каждую плоскость нужно делать отдельными частями, типа так:
Sequence.SequenceX(0).SequenceX = Array(0, 50, 50, 0, 0)
Sequence.SequenceX(1).SequenceX =  Array(50, 70, 70, 50, 50)
Sequence.SequenceX(2).SequenceX =  Array(70, 192, 192, 70, 70)
...
Sequence.SequenceX(49).SequenceX =  Array(262, 212, 192, 70, 50, 0)
xShape3D.D3DPolyPolygon3D = Sequence

Завтра попробую и протестирую.

И второй вопрос. Модель нужно сделать светло-серого цвета, типа "цинк". Никак не могу этого добиться. Манипуляции с набором параметров, как бы по логике, которые должны это регулировать, ни к чему не приводят.
xShape3D.FillColor = RGB(250, 250, 250)
xShape3D.FillColor2 = RGB(250, 250, 250)
'********************************************************
xShape3D.D3DDoubleSided = True
xShape3D.D3DMaterialColor = 47359 ' = RGB(71,53,154)
xShape3D.D3DMaterialEmission = 0
xShape3D.D3DMaterialSpecularIntensity = 15
xShape3D.D3DNormalsInvert = False
xShape3D.D3DNormalsKind = 0
xShape3D.D3DShadow3D = False
xShape3D.D3DTextureFilter = False
xShape3D.D3DTextureKind = 3
xShape3D.D3DTextureMode = 2
xShape3D.D3DTextureProjectionX = 0
xShape3D.D3DTextureProjectionY = 0

Лишь параметр xShape3D.FillColor, хоть как-то влияет на цвет, но всегда делает его тёмным. Ставишь голубой или почти белый (RGB(250,250,250) всё равно получаешь тёмно серый (RGB(71,53,154)). Ставишь розовый, получаешь тёмно красный. Воздействие на остальные эти параметры никакого эффекта не дают. По крайней мере я его не увидел. И т.д.
Картинка всегда получается тёмной.
Что делаю не так?

mikekaganski

Цитата: Kadet от 30 июля 2021, 23:35
В общем, D3DCamera.vpn.DirectionZ почему-то не должна равняться нулю. При нуле картинка исчезает.

Именно для того, чтобы понимать "почему", я и писал ответ #89. Например, там указано, что vpn определяет направление взгляда. А вектор нулевой длины указывает направление куда? Ведь не просто нужно задать DirectionZ, нужно ещё посмотреть, что DirectionX и DirectionY нули. По-видимому, всё-таки не совсем
Цитата: Kadet от 30 июля 2021, 18:34
Ну, приблизительно так я всё это и расшифровал. Только не так подробно. Описывал выше.
С уважением,
Михаил Каганский

mikekaganski

#103
Цитата: Kadet от 31 июля 2021, 00:49Модель нужно сделать светло-серого цвета, типа "цинк". Никак не могу этого добиться.
Потестировать прямо сейчас не могу, но подозрение на цвет и яркость источника света сцены.

EDIT: ну да, только не источника, а рассеянного света:
xScene3D.D3DSceneAmbientColor = &hFFFFFF
С уважением,
Михаил Каганский

Kadet

Цитата: mikekaganski от 31 июля 2021, 06:49EDIT: ну да, только не источника, а рассеянного света:
Код:
ЦитироватьxScene3D.D3DSceneAmbientColor = &hFFFFFF
ТОЧНО! Спасибо!

Цитата: mikekaganski от 31 июля 2021, 06:44Например, там указано, что vpn определяет направление взгляда. А вектор нулевой длины указывает направление куда?
Извините, но дя меня "направление" и "длина" немного разные понятия. Поэтому с первого раза и не понял.
Спасибо за разъяснения.