Войти
ПрограммированиеФорумГрафика

Визуализация программирования.

Страницы: 1 2 3 4 Следующая »
#0
(Правка: 6:14) 5:02, 12 янв. 2019

Я кропаю тул для Окулуса, с помощью которого люди от сохи (т.е без малейших знаний программирования) смогут создавать шейдера формирующие фрактальные миры. Поскольку такой шейдер довольно прост и состоит из небольшого количества функций (обычно 10-15), то все вроде несложно. Вместо функций я делаю некие 3Д обьекты (ну типа шар, пирамида, звездочка и т.д.) которые можно "взять с полки" и составить из них линейку. Параметры функций могут быть ввиде циферблатов прямо на модели или задаваться с общего пульта если обьект выбран, не суть важно.

Например такой алгоритм визуализируется элементарно:

x = A1(x); 
x = A2(x); 
x = B1(x);
Это просто. Ставим модельки в линеечку и все. Скажем звездочка, еще звездочка и торус. Выход одной функции (модельки) это вход другой. Можно все их посадить на одну трубу (цилиндр). Взял модельку, положил на этот цилиндр и все. Красота!

Но я уперся в проблему цикла.

Например как визуализировать что-то вроде:

for(i=0;i<10;i++)
{
  x = A1(x);
  x = A2(x);
  x = B1(x);
}
Ну я решил добавить вторую координату и линеечка превратилась в лоток, т.е. три модельки повторяются по вертикали 10 раз (это значение может задаваться скажем "растягиванием" линейки вверх). Результат слегка напоминает счеты.
Если бы цикл всегда был с начала до конца, то это бы прокатило. Но как быть в таком случае?

x = A1(x)
x = A2(x);
for(int i=0; i>10; i++)
{
  x = B1(x);
}

Или в таком:

for(int i=0; i<3, i++)
{
  x = A1();
  for(int j=0; j<5; j++)
  {
    x = A2();
    x = B1(x);
  }
}

Короче тут я застрял. Ничего путное в голову не приходит.
Может помощь клуба может предложить что-то интересное?

Вообще проблема визуального программирования рано или поздно встанет в полный рост. Все мы движемся в сторону ВР, хотим мы это или нет. Вобщем подумайте, задача довольно нетривиальная. Любые предложения приветствуются.

Просто представьте что вы в виртуальной реальности и у вас нет клавиатуры, но надо написать программу. Причем любые библиотечные функции вам потенциально доступны ввиде 3Д обьектов. Вы можете двигать руками, у вас есть "лазерная указка" в каждой руке и на ней курок и джойстик (две степени свободы). Далее включайте воображение.


#1
(Правка: 5:37) 5:26, 12 янв. 2019
Вообще проблема визуального программирования рано или поздно но встанет в полный рост.

Вообще, этой проблемой в мире промышленной автоматизации уже лет так 30 назад озаботились и даже родился промышленные стандарт какими языками разрешено программировать заводы и тамошние производственные процессы.

https://ru.wikipedia.org/wiki/IEC_61131-3

В нем 5 языков, 3 из которых - визуальные. Собственно оные последовательно появились, когда пришлось переучивать в программистов инженеров по релейной логике на физических реле, потом инженеров-схемотехников паявших логическую рассыпуху и затем академических академиков, рисовавших блок-схемы. Особняком был Instruction List (это примерно как стековый ассемблер джавы только язык на котором нужно руками программы мписать)

Наконец когда появился паскалеподобный Structured_Text, все облегченно вздохнули что ну его нахрен наконец эти визуальные релюшки и наконец можно более менее вменяемо программировать на похожем на нормальный языке программирования.

На то что ты хочешь из оного стандарта больше всего похож SFC, правда там больше про машины состояний.

#2
(Правка: 6:10) 5:49, 12 янв. 2019

nonamezerox
Это совсем не то. Меня интерсует не язык, а интерфейс. 30 лет назад ничего похожего на ВР не было даже в проекте. Все RAD'ы это тулзы для программистов (например Delphi), они принципиально не годятся для визуального конструирования программ ВООБЩЕ без знания программирования. Релейная логика линейна (насколько я знаю там циклов нет), но даже в этом случае освоить ее чайнику малореально. Я же говорю о человеке (геймере) особым интеллектом не обремененным по определению.

Короче надо сделать интерфейс который позволит создавать программы просто двигая руками (все библиотечные функции представлены ввиде 3D моделей, и их можно использовать as is). Как я сказал, пока у меня проблема только в циклах (ибо изначально задача очень простая, это примитивный шейдер а не код на C++). Как циклы представить визуально я пока не придумал. Разумеется это самый первый шаг в визуальном программировании, но без решения проблемы циклов дальше двигаться вообще не имеет смысла.

#3
11:03, 12 янв. 2019

https://www.gsn-lib.org/docs/nodes/ShaderPluginNode.php
Тут просто нод repeat с количеством повторений.
Но обычно все что сложнее чем соединить несколько нодов проще написать кодом, лучше пусть пользователь машет руками и рисует заклинания, а программа по хэшам от всего этого творчества будет генерировать сложный шейдер))

#4
18:12, 12 янв. 2019

/A\
Так вопрос в том, как должны выглядеть эти самые "заклинания" и "махания руками".

#5
19:37, 12 янв. 2019

san
Обычно это придумывают дизайнеры, потому что программисты мыслят слишком логически для таких абстрактных действий)

#6
(Правка: 20:10) 20:04, 12 янв. 2019

/A\
Нет у меня специального дизайнера. Да и боюсь что дизайнеру трудно будет обьяснить что такое цикл и нафига он нужен.
Фактически речь идет о дизайне программирования. Просто вместо языка программирования основанного на тексте, должен использоваться язык основанный на неких визуальных образах. Задача максимально сужена, нет логических конструкций (типа if), нет переменных, все функции выполняются последовательно. Но отказаться еще и от циклов я бы не хотел.  Конечно их можно развернуть, но тогда линейка операций получается слишком длинной и не совсем понятно, как быть с параметрами функций. Короче циклы должны быть. Разве что можно запретить вложенные циклы, без них я как-нибудь обойдусь.

#7
21:20, 12 янв. 2019

san
Ну так пример визуального программирования можно взять из редакторов unity/UE и прочих.

Меня больше интересует для какой цели все это разрабатывается. Если для получения прибыли, то ЦА это те немногие кто заинтересуется шейдерами, но не умеет программировать, при этом есть мощный ПК и ВР. Таких очень мало.
Я видел исследования по ВР и там получается что чаще всего это дети, на всяких праздниках и время игры 1-5 минут. Вот на такое и надо рассчитывать, если стоит цель заработать. Но никто не будет напрягать мозг чтоб состовить что-то осмысленное. Поэтому я и предложил дать возможность творить не задумываясь о том что ты делаешь. Машешь руками, рисуешь разноцветные линии, а потом программа это анализирует и выдает красивый ландшафт со всякими эффектами. Потраченное время - минута, усилий для мозга минимум, но все довольны.
Еще вопрос как такие шейдеры будут работать на слабом железе, ведь чаще всего это будет 1060. Я пробовал запускать шейдеры с шейдертоя на 1080 в ВР и они работали достаточно медленно, самые тяжелые тормозили и без ВР.

#8
(Правка: 0:21) 0:14, 13 янв. 2019

/A\
Ну так я примерно это и делаю. Это типа игры, но не совсем.
Суть в том, что ты из деталей составляешь некую структуру которая формирует фрактальный мир. Его можно наблюдать на экране, крутить параметры которые влияют на картинку и в конце перенестись в этот мир целиком. Его можно исследовать, по нему можно походить. А когда надоест - вернуться в "лабораторию" и создать новый. Рассчитано на любой по возрасту контингент, знаний программирования и тем более математики не требуется.
Поскольку аппликация сделана для ВР, то это подразумевает, что у юзера уже есть мощная видеокарта, что требуется для работы тяжелых шейдеров. Таким образом можно формировать очень сложные миры, вот пример - фрактальный мир. Шейдер, который формирует эту картинку, состоит из 20 строк. Его можно составить всего из десятка деталей.

Что до железа, то 1060 более чем хватает. В реалтайм генерируется только маленькая картинка которая служит для создания мира, а когда ты туда "проваливаешься", то движение происходит шагами (типа телепортации), т.е время создания всего мира в 2-3 секунды это нормально.

#9
14:41, 13 янв. 2019

san, это весьма крутая идея.

Такие мысли:

1) Человек может вести записи/зарисовки в блокнот.
Учебники или распечатки на принтере - так же являются 2D поверхностями.

Это означает, что надо изначально предусмотреть вариант 2D представления.
Значит должна быть возможность переключать режимы отображения:
или 2D
или 3D

Сфера -> круг.
Куб -> квадрат.

Сам визуальный формат мог бы хранить дополнительный слой 3D координат объектов.


2) Интересная консольная игра выпуска 1995 года:

Продолжение выпущенное в 2013 году:

#10
4:56, 14 янв. 2019

ELena_Shloemovich
Дело в том, что как только появляются команды типа "Return" и условные переходы, это уже ничем не отличается от программы на языке программирования.

Я раньше уже думал свести интерфейс к неким записям в "книге рецептов". Сами "заклинания" (суть функции) при этом копировались бы из словаря. Тогда цикл можно было бы представить как строку "Повторить N раз". Но опять же непонятно, как тогда выделить тело цикла - если вводить скобки это опять получается мнемонический язык программирования. Задача же состоит в том, что-бы вообще уйти от любых мнемонических команд, заменив мнемонику на интуитивно понятные визуальные компоненты.

#11
7:37, 14 янв. 2019

san
Рисуйте иконку операции (конус,цилиндр итд) и число повторов, если больше 1. Или иконку блока, который может включать операции и др блоки. И раскрывайте по щелчку с первого блока в виде дерева

#12
10:01, 14 янв. 2019

Визуальное программирование - это бред, утопия и мечта любого лентяя :-)
Сколько раз я подходил к этому вопросу с разных флангов и каждый раз убеждался, что для чего-то простого и совсем шаблонного визуальщина сгодится, но шаг влево, шаг вправо и мечта рушится, т.к. даже какую-то простую вещь в пару строк приходится делать через задницу или сделать её просто невозможно, по этому начинаются всякие вставки блоков кода, а потом ты понимаешь что это бред и лучше б с самого начала просто в коде софт лепил :-)
Вот мои последние попытки, больше я к этому не возвращался и не собираюсь:

+ Показать

Упрощать процесс написания кода разумеется надо, ведь кодерство - это по сути работа для негров, в идеале архитектор должен работать только над изобретением идей, а реализовывать в коде его задумки должен AI, хотя на самом деле и изобретение можно отвести на AI.

#13
(Правка: 16:32) 16:26, 14 янв. 2019

Aslan
> Рисуйте иконку операции (конус,цилиндр итд) и число повторов,
Проблема в том, что в цикл входит не одна операция. Т.е надо выделить блок и число повторов делать для него. Вот я и думаю, как это сделать наиболее просто, наглядно и интуитивно понятно. Блоки хороши в 2Д, тогда программа сводится к блок-схеме. Но это не интерфейс для среднего туповатого геймера.

™­•-=MASTER=-•™
> для чего-то простого и совсем шаблонного визуальщина сгодится
Так у меня и есть "простое и шаблонное". Я не претендую на визуальный С++.

#14
(Правка: 19:42) 19:41, 14 янв. 2019

san
> Проблема в том, что в цикл входит не одна операция. Т.е надо выделить блок и число повторов делать для него
Я писал:
Или иконку блока, который может включать операции и др блоки
Иконка троеточие или вроде того, при щелчке - разворачивать блок
Программа в виде дерева
Куда еще нагляднее?

Страницы: 1 2 3 4 Следующая »
ПрограммированиеФорумГрафика