Автор Тема: CopperCube  (Прочитано 46256 раз)

Оффлайн Samovar

  • Житель
Re: CopperCube
« Ответ #165 : 12 Июль 2019, 22:44:30 »
События

ccbRegisterKeyDownEvent(ИмяФункции)

Примечание: Эта функция недоступна в редакторе и доступна только в целевом приложении Windows и Mac OS X. Для получения событий клавитуры используйте функцию поведения onKeyEvent().


Регистрирует функцию для получения события нажатия клавиши. Зарегистрированная функция должна принимать один параметр, который будет кодом клавиши.

Пример:
Код
ccbRegisterKeyDownEvent("keyPressedDown");

function keyPressedDown(keyCode)
{
    print("A key was pressed down:" + keyCode);
}

При нажатии печатает, какая клавиша была нажата.



ccbRegisterKeyUpEvent(ИмяФункции)

Примечание: Эта функция недоступна в редакторе и доступна только в целевом приложении Windows и Mac OS X. Для получения событий клавитуры используйте функцию поведения onKeyEvent().

Регистрирует функцию для получения события отпускания клавиши. Зарегистрированная функция должна принимать один параметр, который будет кодом клавиши.

Пример:
Код
ccbRegisterKeyUpEvent("keyPressedUp");


function keyPressedUp(keyCode)
{
  print("A key was left up:" + keyCode);
}

При отпускании клавиши печатает, какая клавиша была отпущена.



ccbRegisterMouseDownEvent(ИмяФункции)

Примечание: Эта функция недоступна в редакторе и доступна только в целевом приложении Windows и Mac OS X. Для получения событий мыши используйте функцию поведения onMouseEvent().

Регистрирует функцию для получения события нажатия клавиши. Зарегистрированная функция должна принимать один параметр, которым будет нажатя кнопка мыши (1 для левой кнопки, 2 для правой кнопки, 3 для средней кнопки).

Пример:
Код
ccbRegisterMouseDownEvent("mousePressedDown");

function mousePressedDown(button)
{
   print("A mouse button was presssed down:" + button);
}

При нажатии кнопки мыши печатает, какая кнопка была нажата.



ccbRegisterMouseUpEvent(ИмяФункции)

Примечание: Эта функция недоступна в редакторе и доступна только в целевом приложении Windows и Mac OS X. Для получения событий мыши используйте функцию поведения onMouseEvent().

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

Пример:
Код
ccbRegisterMouseUpEvent("mouseLeftUp");

function mouseLeftUp(button)
{
    print("A mouse button was left up:" + button);
}

При отпускании кнопки мыши печатает, какая кнопка была отпущена.



ccbRegisterOnFrameEvent(Функция)
ccbUnregisterOnFrameEvent(Функция)

Примечание: Эти функции недоступны в редакторе.

Функция ccbRegisterOnFrameEvent регистрирует вашу функцию выполняемую при событии 'on frame', которое происходит каждый кадр отрисовки экрана. Зарегистрированная функция не должна принимать никаких параметров. С помощью этой функции можно рисовать собственные, пользовательские вещи,  например, интерфейсы пользователя.
После того, как вам больше не нужны события происходящие каждый кадр, вызовите функцию ccbUnregisterOnFrameEvent(), чтобы отменить регистрацию вашей функции.

Пример:
Код
function onFrameDrawing()
{
   // нарисовать красный, прозрачный прямоугольник в позиции мыши
 var mouseX = ccbGetMousePosX();
 var mouseY = ccbGetMousePosY();

   ccbDrawColoredRectangle(0x77ff0000, mouseX-10, mouseY-10, mouseX+10, mouseY+10);
}

ccbRegisterOnFrameEvent(onFrameDrawing);

Рисует красный прямоугольник в позиции курсора мыши (или в центре, если курсор мыши управляет камерой от первого лица в стиле FPS).
« Последнее редактирование: 12 Июль 2019, 23:09:36 от Samovar »

Оффлайн Samovar

  • Житель
Re: CopperCube
« Ответ #166 : 13 Июль 2019, 10:23:25 »
Рисование

ccbDrawColoredRectangle(Цвет, x1, y1, x2, y2)

Примечание: Эта функция недоступна в редакторе.

Рисует цветной прямоугольник. Эта функция может использоваться только внутри функции события кадра, которая должна быть зарегистрирована с помощью ccbRegisterOnFrameEvent().

Цвет представляет собой 32-битное значение с альфа-каналом, красным, зеленым и синим компонентами (0xaarrggbb, подобно значениям цвета, известным из HTML, но с добавленным вначале значением прозрачности альфа-канала). Например, 0x77ff0000 - это прозрачный красный, 0xff0000ff - непрозрачный синий.

Пример:
Код
function onFrameDrawing()
{
   // нарисовать красный, прозрачный прямоугольник в позиции мыши
 var mouseX = ccbGetMousePosX();
 var mouseY = ccbGetMousePosY();

   ccbDrawColoredRectangle(0x77ff0000, mouseX-10, mouseY-10, mouseX+10, mouseY+10);
}

ccbRegisterOnFrameEvent(onFrameDrawing);
Рисует красный прямоугольник в позиции курсора мыши (или в центре, если курсор мыши управляет камерой от первого лица в стиле FPS).


ccbDrawTextureRectangle(ФайлИзображения, x1, y1, x2, y2)

Примечание: Эта функция недоступна в редакторе.

Рисует текстурированный прямоугольник. Эта функция может использоваться только внутри функции события кадра, которая должна быть зарегистрирована с помощью ccbRegisterOnFrameEvent().

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

Пример:
Код
function onFrameDrawing()
{
 // нарисовать текстурированный прямоугольник в позиции мыши
 var mouseX = ccbGetMousePosX();
 var mouseY = ccbGetMousePosY();

 ccbDrawTextureRectangle("someFile.png", mouseX-100, mouseY-100, mouseX+100, mouseY+100);
}

ccbRegisterOnFrameEvent(onFrameDrawing);
Рисует текстурированный прямоугольник в позиции курсора мыши (или в центре, если курсор мыши управляет камерой от первого лица в стиле FPS).


ccbDrawTextureRectangleWithAlpha(ФайлИзображения, x1, y1, x2, y2)

Примечание: Эта функция недоступна в редакторе.

Рисует текстурированный прямоугольник с альфа-каналом. Эта функция может использоваться только внутри функции события кадра, которая должна быть зарегистрирована с помощью ccbRegisterOnFrameEvent().

Эта функция будет учитывать альфа-канал текстуры, используйте ccbDrawTextureRectangleWithAlpha, чтобы у текстуры не было альфа-канала.

Пример:
Код
function onFrameDrawing()
{
   // нарисовать текстурированный прямоугольник в позиции мыши
    var mouseX = ccbGetMousePosX();
 var mouseY = ccbGetMousePosY();

   ccbDrawTextureRectangleWithAlpha("someFile.png", mouseX-100, mouseY-100, mouseX+100, mouseY+100);
}

ccbRegisterOnFrameEvent(onFrameDrawing);
Рисует текстурированный прямоугольник в позиции курсора мыши (или в центре, если курсор мыши управляет камерой от первого лица в стиле FPS).

Оффлайн Samovar

  • Житель
Re: CopperCube
« Ответ #167 : 13 Июль 2019, 10:50:06 »
Поправил:

Open a website
(Открыть вебстраницу)   

Открывает вебстраницу в браузере. Действие работает только на целевой платформе WebGL. Обратите внимание, что в параметре «URL» необходимо запускать её с http:// или https://, иначе это не будет работать.
Поддерживаются следующие параметры:
  • URL: Адрес вебстраницы начинающийся с http:// или https://
  • Target: В качестве зарезервированных имен используются следующие:
    • _blank: Загружает страницу в новое окно браузера. Значение по умолчанию.
    • _self: Загружает страницу в текущее окно.
    • _parent: Загружает страницу во фрейм-родитель, если фреймов нет, то это значение работает как _self.
    • _top: Отменяет все фреймы и загружает страницу в полном окне браузера, если фреймов нет, то это значение работает как _self.

Оффлайн Samovar

  • Житель
Re: CopperCube
« Ответ #168 : 13 Июль 2019, 12:26:18 »
Столкновения

ccbGet3DPosFrom2DPos(x,y)

Возвращает 3D-позицию из 2D-позиции на экране.
Примечание: двумерная позиция на экране представляет собой не одну трехмерную точку, а фактически трехмерную линию. Таким образом, чтобы сформировать эту линию, используйте 3D-точку, возвращаемую этой функцией, и положение текущей камеры.

Пример:
Код
var mouseX = ccbGetMousePosX();
var mouseY = ccbGetMousePosY();

var anode = ccbGetSceneNodeFromName("somenode");
var pos3d = ccbGet3DPosFrom2DPos(mouseX, mouseY);
ccbSetSceneNodeProperty(anode, "Position", pos3d);
Устанавливает положение узла сцены с именем 'somenode' в 3D-положение за курсором мыши.


ccbGet2DPosFrom3DPos(x,y,z)

Возвращает 2D-позицию из 3D-позиции или ничего, если позиция не находится в пределах экрана (например, она находится за камерой).

Пример:
Код
var pos = ccbGet2DPosFrom3DPos(20, 30, 30);  
print("Position on screen: " + pos);
Печатает положение 3D-координаты в 2D.


ccbGetCollisionPointOfWorldWithLine(НачалоX, НачалоY, НачалоZ, КонецX, КонецY, КонецZ)

Возвращает точку столкновения 3D-линии с 3D-миром. Возвращает ноль, если нет столкновения.


ccbDoesLineCollideWithBoundingBoxOfSceneNode(Узел, НачалоX, НачалоY, НачалоZ, КонецX, КонецY, КонецZ)

Возвращает true (истина), если ограничивающий контейнер данного узла сцены сталкивается с 3D-линией между двумя заданными точками. Иначе возвращает false (ложь).

Пример:
Код
function onFrameDrawing()
{
 var mouseX = ccbGetMousePosX();
 var mouseY = ccbGetMousePosY();
 
  // проверка столкновения

 var cube = ccbGetSceneNodeFromName("cubeMesh1");   
 var endPoint3d = ccbGet3DPosFrom2DPos(mouseX, mouseY);
 var  startPos3D = ccbGetSceneNodeProperty(ccbGetActiveCamera(), "Position");
 
  if (ccbDoesLineCollideWithBoundingBoxOfSceneNode(cube, startPos3D.x, startPos3D.y,
                          startPos3D.z, endPoint3d.x, endPoint3d.y, endPoint3d.z))
   {
     ccbDrawColoredRectangle(0x77ff0000, mouseX-10, mouseY-10, mouseX+10, mouseY+10);
  }
 else
     ccbDrawColoredRectangle(0x770000ff, mouseX-10, mouseY-10, mouseX+10, mouseY+10);
}

ccbRegisterOnFrameEvent(onFrameDrawing);
Рисует красный прямоугольник в позиции курсора мыши (или в центре экрана, если управляется контроллером камеры от первого лица в стиле FPS), если курсор мыши находится над узлом сцены с именем 'cubeMesh1', и рисует синий прямоугольник, если нет.

Оффлайн Samovar

  • Житель
Re: CopperCube
« Ответ #169 : 14 Июль 2019, 06:56:35 »
Изменено

Цитировать
Рисование

ccbDrawTextureRectangleWithAlpha(ФайлИзображения, x1, y1, x2, y2)

Эта функция будет учитывать альфа-канал текстуры, используйте ccbDrawTextureRectangleWithAlpha, чтобы у текстуры не было альфа-канала.

Эта функция будет учитывать альфа-канал текстуры, используйте ccbDrawTextureRectangle, чтобы у текстуры не было альфа-канала.


Цитировать
Действия

Execute JavaScript
(Запустить JavaScript)

Execute JavaScript
(Выполнить JavaScript)

Оффлайн Samovar

  • Житель
Re: CopperCube
« Ответ #170 : 14 Июль 2019, 07:07:16 »
Разное

ccbEndProgram()

Примечание: Эта функция недоступна в редакторе.
Завершает приложение. В приложениях для платформ Flash и WebGL эта функция закрывает окно (если оно было открыто ранее скриптом, как всплывающее окно).


ccbLoadTexture(ИмяФайлаИзображения)

Загружает текстуру в текстурный кеш. В случае успеха, возвращает объект текстуры , который затем можно использовать, например, в вызове функции ccbSetSceneNodeMaterialProperty() с указанием в ней в качестве параметра этот объект текстуры. Обратите внимание, что текстура загружается только один раз. Вы можете вызвать эту функцию несколько раз с одним и тем же именем файла текстуры, но CopperCube не будет пытаться загрузить файл снова, если он уже был загружен ранее.

Параметры:

ИмяФайлаИзображения: имя текстуры для загрузки. Используйте что-то вроде 'example.jpg', тогда он загрузит файл 'example.jpg' из каталога, где находится ваше приложение для Windows или Mac OS X. На целевых платформах Flash и WebGL, файл будет загружен с того места, где находится ваш сайт на сервере. Для этих целей также можно использовать URL-адреса (например, "http://www.example.com/foobar.jpg") в качестве параметра, но это также зависит от настроек безопасности вашего браузера.
Пример:
Код
var node = ccbGetSceneNodeFromName("cubeMesh1");
var tex = ccbLoadTexture("example.jpg");
ccbSetSceneNodeMaterialProperty(node, 0, "Texture1", tex);
Загружает текстуру и устанавливает ее первой текстурой в материал с индексом 0 у объекта с именем 'cubeMesh1'.


ccbGetMousePosX()

Примечание: Эта функция недоступна в редакторе.
Возвращает текущую позицию курсора мыши по оси X в пикселях.

Пример:
Код
function onFrameDrawing()
{
   // нарисовать красный, прозрачный прямоугольник в позиции мыши
 var mouseX = ccbGetMousePosX();
 var mouseY = ccbGetMousePosY();

   ccbDrawColoredRectangle(0x77ff0000, mouseX-10, mouseY-10, mouseX+10, mouseY+10);
}

ccbRegisterOnFrameEvent(onFrameDrawing);
Рисует красный прямоугольник в позиции курсора мыши (или в центре, если курсор мыши управляет камерой от первого лица в стиле FPS). 


ccbGetMousePosY()

Примечание: Эта функция недоступна в редакторе.
Возвращает текущую позицию курсора мыши по оси Y в пикселях.

Пример:
Код
function onFrameDrawing()
{
   // draw a red, transparent rectangle at the position of the mouse
 var mouseX = ccbGetMousePosX();
 var mouseY = ccbGetMousePosY();

   ccbDrawColoredRectangle(0x77ff0000, mouseX-10, mouseY-10, mouseX+10, mouseY+10);
}

ccbRegisterOnFrameEvent(onFrameDrawing);
Рисует красный прямоугольник в позиции курсора мыши (или в центре, если курсор мыши управляет камерой от первого лица в стиле FPS). 


ccbGetScreenWidth()

Примечание: Эта функция недоступна в редакторе.
Возвращает текущую ширину экрана в пикселях.


ccbGetScreenHeight()

Примечание: Эта функция недоступна в редакторе.
Возвращает текущую высоту экрана в пикселях.


ccbSetCloseOnEscapePressed(БулевоеЗначение)

По умолчанию, когда пользователь нажимает клавишу escape в режиме отладки, приложение для Windows и Mac OS X закрывается. Вызов функции ccbSetCloseOnEscapePressed (false) отключает эту возможность. На других целевых платформах эта функция не работает.

Параметры:

БулевоЗначение: Значение true (истина или 1) или false (ложь или 0).


ccbSetCursorVisible(БулевоеЗначение)

Примечание: Эта функция может ничего не делать в зависимости от целевой платформы, на которой она выполняется (например, веб-приложения не имеют доступа к курсору мыши).
Управляет видимостью курсора мыши. Вызовите функцию ccbSetCursorVisible (false), чтобы сделать курсор мыши невидимым, или вызовите функцию ccbSetCursorVisible (true), чтобы снова сделать его видимым.

Параметры:

БулевоЗначение: Значение true (истина или 1) или false (ложь или 0).


ccbSwitchToScene(ИмяСцены)

Примечание: Эта функция недоступна в редакторе.
Переключает движок на сцену с указанным именем. Функция ccbSwitchToScene("моя сцена") переключит движок на сцену с именем "моя сцена", если она есть.
Примечание: ИмяСцены чувствительно к регистру.


ccbPlaySound(ИмяЗвуковогоФайла)

Функция воспроизводит звуковой или музыкальный файл. В Windows и Mac OS X поддерживаются следующие форматы файлов: WAV, OGG, MOD, XM, IT, S3M. Для других целевых платформ форматы зависят файлов зависит от их поддержки браузером и платформой. Но обычно, MP3 и OGG должны работать везде.


ccbStopSound(ИмяЗвуковогоФайла)

Останавливает воспроизведение звука или музыки, которые были запущены функцией ccbPlaySound, либо действием "Play а sound" (Воспроизвести звук).


ccbSetCopperCubeVariable(ИмяПеременной, Значение)

Устанавливает определённое значение переменной в CopperCube. Переменные в CopperCube могут быть созданы и изменены с помощью действия "Set or change a Variable" (Создать или изменить переменную) в редакторе.


ccbGetCopperCubeVariable(ИмяПеременной)

Получает значение переменной в CopperCube. Переменные в CopperCube могут быть созданы и изменены с помощью действия "Set or change a Variable" (Создать или изменить переменную) в редакторе.


ccbReadFileContent(ИмяТекстовогоФайла)

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


ccbWriteFileContent(ИмяТекстовогоФайла, ТекстовоеСодержимое)

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

...

Оффлайн Striver

  • Житель
  • недоинженер, полупрограммист
    • http://striver00.ru
Re: CopperCube
« Ответ #171 : 19 Июль 2019, 22:46:55 »
ccbGetSceneNodeMaterialProperty(Узел, ИндексМатериала, ИмяСвойства)
Цитировать
Должно быть значение большее или равное 0, и меньшее, чем ccbGetSceneNodeMaterialCount().
Должно быть значение, большее или равное 0, и меньшее, чем ccbGetSceneNodeMaterialCount().

ccbSetSceneNodeParent(Узел, НовыйРодительскийУзел)
Цитировать
Обратите внимание, что при установке нового родителя, положение, вращение и масштаб дочернего узла становятся относительны нового родителя.
Обратите внимание, что при установке нового родителя, положение, вращение и масштаб дочернего узла действуют по отношению к новому родителю.
или
Обратите внимание, что при установке нового родителя, положение, вращение и масштаб дочернего узла вычисляются по отношению к новому родителю.

ccbSetSceneNodeMaterialProperty(Узел, ИндексМатериала, ИмяСвойства, Значение)
Цитировать
Должно быть значение большее или равное 0, и меньшее, чем ccbGetSceneNodeMaterialCount().
Должно быть значение, большее или равное 0, и меньшее, чем ccbGetSceneNodeMaterialCount().

ccbRegisterKeyDownEvent(ИмяФункции)
Цитировать
Для получения событий клавитуры используйте функцию поведения onKeyEvent().
Для получения событий клавиатуры используйте функцию поведения onKeyEvent().
тоже самое в ccbRegisterKeyUpEvent(ИмяФункции)

ccbRegisterMouseDownEvent(ИмяФункции)
Цитировать
Зарегистрированная функция должна принимать один параметр, которым будет нажатя кнопка мыши (1 для левой кнопки, 2 для правой кнопки, 3 для средней кнопки).
Зарегистрированная функция должна принимать один параметр, которым будет код нажатой кнопки мыши (1 для левой кнопки, 2 для правой кнопки, 3 для средней кнопки).

ccbRegisterMouseUpEvent(ИмяФункции)
Цитировать
Зарегистрированная функция должна принимать один параметр, которым будет отпущенная кнопка мыши (1 для левой кнопки, 2 для правой кнопки, 3 для средней кнопки).
Зарегистрированная функция должна принимать один параметр, которым будет код отпущенной кнопки мыши (1 для левой кнопки, 2 для правой кнопки, 3 для средней кнопки).

ccbRegisterOnFrameEvent(Функция)
ccbUnregisterOnFrameEvent(Функция)

Цитировать
Функция ccbRegisterOnFrameEvent регистрирует вашу функцию выполняемую при событии 'on frame', которое происходит каждый кадр отрисовки экрана.

Функция ccbRegisterOnFrameEvent регистрирует вашу функцию, выполняемую при событии 'on frame', которое происходит каждый кадр отрисовки экрана.

Цитировать
После того, как вам больше не нужны события происходящие каждый кадр, вызовите функцию ccbUnregisterOnFrameEvent(), чтобы отменить регистрацию вашей функции.
После того, как вам стало больше не нужно выполнять вашу функцию при отрисовке каждого кадра, вызовите функцию ccbUnregisterOnFrameEvent(), чтобы отменить регистрацию вашей функции.

ccbGetCollisionPointOfWorldWithLine(НачалоX, НачалоY, НачалоZ, КонецX, КонецY, КонецZ)
Цитировать
Возвращает ноль, если нет столкновения.
Возвращает null, если нет столкновения.
null в Javascript - это совсем не тоже самое, что числовой ноль. (Аналогичные типы отсутствия значения есть в большинстве других языков, например в Питоне это None). Лучше везде, где этот null встречается, оставлять его без перевода.

ccbLoadTexture(ИмяФайлаИзображения)
Цитировать
В случае успеха, возвращает объект текстуры , который затем можно использовать, например, в вызове функции ccbSetSceneNodeMaterialProperty() с указанием в ней в качестве параметра этот объект текстуры.
В случае успеха возвращает объект текстуры, который затем можно использовать, например, в вызове функции ccbSetSceneNodeMaterialProperty() с указанием в ней в качестве параметра этот объект текстуры.

ccbPlaySound(ИмяЗвуковогоФайла)
Цитировать
Для других целевых платформ форматы зависят файлов зависит от их поддержки браузером и платформой.
Для других целевых платформ поддержка форматов файлов зависит от их поддержки браузером и платформой.

Оффлайн Samovar

  • Житель
Re: CopperCube
« Ответ #172 : 20 Июль 2019, 03:39:15 »
Спасибо, Striver! Поправил.

ccbInvokeAction(ИдентефикаторДействия, ТекущийУзел)

Запускает действие CopperCube. Применяется для использования совместно со сценарием расширения поведения или действия. Если в редакторе было определено какое-либо действие, которое будет выполнено для этого расширенного поведения или действия, то вы можете запустить его с помощью этой функции.

Параметры:
  • ИдентефикаторДействия: Идентификатор действия для запуска. Хранится в исполняемом приложении в свойстве с типом 'action (действие).
  • ТекущийУзел: Необязательная ссылка на 'current scene node' (текущий узел сцены). Действия, которые настроены на использование 'current' (текущего) узла сцены, будут затем использовать этот узел сцены в качестве текущего.
Пример:

Предположим, у вас есть скрипт расширения действия со следующим определением:
Код
<property name="ActionWhenFinished" type="action" />
Это означает, что экземпляр этого действия в JavaScript, во время выполнения, будет иметь свойство с именем 'ActionWhenFinished' (Действие при завершении), ссылаясь на действие, определенное пользователем в редакторе. Вы можете запустить это действие, используя вызов:
Код
ccbInvokeAction(this.ActionWhenFinished);
                                                       
Обратите внимание, что для большинства действий предполагается использование 'currentNode' (Текущего узла), поэтому установите для него реальное действие, которое имеет смысл быть текущим узлом в этом контексте, например так:
Код
ccbInvokeAction(this.ActionWhenFinished, this.УзелСкоторымЯсейчасРаботаю);
                                                       

ccbGetCurrentNode()

Возвращает текущий узел сцены. При выполнении некоего кода JavaScript с помощью действия 'Execute JavaScript' (Выполнить JavaScript), всегда выбран "current node" (текущий узел), обычно это узел, в котором выполняется действие.


ccbCleanMemory()

Очищает текущую использованную память. Пытается освободить как можно больше памяти, освобождая неиспользуемые текстуры, буферы вершин, индексов и тому подобное. Эту функцию полезно вызывать, например, после переключения сцен, чтобы увеличить производительность приложения. Может иметь разные эффекты на разных платформах.


ccbGetPlatform()

Возвращает строку, идентифицирующую систему, в которой работает приложение CopperCube. На данный момент возможны следующие типы возвращаемой строки:
  • "windows" - для приложений Windows
  • "macosx" - для приложений Mac OS X
  • "android" - для приложений Android
  • "webgl" - для приложений WebGL
  • "flash" - для приложений Flash

ccbSwitchToFullscreen(БлокировкаУказателяМыши, ЭлементПереключенияНаПолныйЭкран, ПереключениеОбратноВОконный)

При запуске в качестве Windows .exe, WebGL или Flash-приложения переключает приложение в полноэкранный режим, а также включает блокировку указателя мыши для Flash или WebGL, если это необходимо. Обратите внимание, что эта функция ничего не делает или даже не существует на платформах, которые не являются Windows .exe, WebGL или Flash.

Параметры:
  • БлокировкаУказателяМыши: Если установлено значение 'true' (истина), то это включает блокировку указателя мыши после переключения в полноэкранный режим во Flash или WebGL. Таким образом, камеры от первого лица прекрасно работают в сети. Этот параметр игнорируется на платформе Windows .exe.
  • ЭлементПереключенияНаПолныйЭкран: В WebGL это HTML-элемент, который должен быть переключен в полноэкранный режим. Если установлено значение null, то элемент canvas (холст) будет переключен в полноэкранный режим. Этот параметр может быть установлен в null на других платформах.
  • ПереключениеОбратноВОконный: Если установлено значение 'true' (истина), то на платформе Windows .exe это переключает приложение обратно в оконный режим. Этот параметр может быть установлен в null на других платформах.
Существуют некоторые ограничения для этой функции:
  • В Flash и WebGL эта функция должна вызываться в ответ на клик мышью или событие нажатия клавиши клавиатуры. В противном случае это не сработает. Это ограничение безопасности браузера, как во Flash, так и в WebGL.
  • При использовании этой функции в Windows .exe, она работает только в режиме окна с динамическим изменением размера.
  • При использовании этой функции во Flash, после переключения в полноэкранный режим, будут работать только клавиши перемещения курсора и пробел. Это ограничение безопасности Flash.

ccbDoHTTPRequest(URL, Отклик)
ccbCancelHTTPRequest(ИдентефикаторСоединенияДляОтмены)

Примечание: Эта функция недоступна в редакторе.
Функция ccbDoHTTPRequest() отправляет сетевой запрос GET через HTTP на любой веб-сервер, а функция ccbCancelHTTPRequest() может отменить этот запрос во время работы. Это позволяет легко общаться с любым веб-сервером / базой данных / многопользовательским сервером. Для функции ccbDoHTTPRequest() параметры следующие:
  • URL: URL для запроса, например, 'http:://www.example.com' или аналогичный.
  • Отклик: Функция отклика, которая будет вызываться с полученными данными в качестве параметра, после завершения запроса. Также она будет вызвана, если запрос получен с пустой строкой в ​​качестве параметра.
Функция возвращает уникальный идентификатор для идентификации этого запроса. Вы можете использовать этот идентификатор в качестве параметра для функции ccbCancelHTTPRequest(), чтобы отменить запущенный запрос, если, например, он занимает слишком много времени.

Примечание: В некоторых целевых платформах, таких как WebGL и Flash, междоменные запросы невозможны по соображениям безопасности. Обычно вы должны делать запросы только к тому же серверу, на котором работает ваш скрипт.

Пример:
Код
function finishedRequest(dataReceived)
{
  print("finished request! Data size:" + dataReceived.length);
}

ccbDoHTTPRequest("http://www.ambiera.com/index.html", finishedRequest);
Загружает главную страницу www.ambiera.com и показывает, сколько байт содержит страница.


ccbCreateMaterial(ВершинныйШейдер, ФрагментныйШейдер, ТипОсновногоМатериала, Отклик)
ccbSetShaderConstant(Тип, Имя, Значение1, Значение2, Значение3, Значение4)

Примечание: Эта функция недоступна в редакторе.
Функция ccbCreateMaterial() создает новый материал на основе вершинного и пиксельного (фрагментного) шейдеров. Смотрите Программирование шейдеров в CopperCube.

Параметры для функции ccbCreateMaterial():
  • ВершинныйШейдер: Код вершинного шейдера или пустая строка "".
  • ФрагментныйШейдер: Код фрагментного (пиксельного) шейдера или пустая строка "".
  • ТипОсновногоМатериала: Обычно 0 для твердого материала. (2 для карты освещения, 12 для аддитивной прозрачности).
  • Отклик: Функция, вызываемая перед использованием материала. В этой функции вызывайте функцию ccbSetShaderConstant(), чтобы установить константы вашего шейдера.
Функция возвращает уникальный идентификатор материала, который вы можете использовать для замены материала у любого узла сцены, на ваш новый материал, с помощью ccbSetSceneNodeMaterialProperty(). Возвращает -1, если произошла ошибка.

Функция ccbSetShaderConstant() может быть вызвана только в функции отклика материала.
Параметры для функции ccbSetShaderConstant():
  • Тип: Тип шейдера, 1 для вершинного и 2 для пиксельного шейдера. В GLSL этот параметр игнорируется.
  • Имя: Имя переменной для присвоения ей значения.
  • Значение1, Значение2, Значение3, Значение4: Содержимое переменной, 4 числа с плавающей точкой.
Примеры можно найти в  разделе Программирование шейдеров в CopperCube.


ccbSetPhysicsVelocity(Узел, x, y, z)

Примечание: Эта функция недоступна в редакторе.
Устанавливает линейную скорость объекта, перемещаемого физическим движком. Это работает только тогда, когда включена и доступна физическая симуляция для текущей платформы.

Параметры:
  • Узел:  Узел, для которого устанавливается линейная скорость. Чтобы это работало, к узлу должо быть прикреплено поведение "Сollide When Moved" (Сталкиваться при перемещении), либо поведение "Object moved by physics engine" (Объект перемещается физическим движком).
  • x, y, z: Скорость.

ccbUpdatePhysicsGeometry()

Примечание: Эта функция недоступна в редакторе.
Обновляет геометрию столкновений для физического движка. Вызывайте эту функцию, когда вы изменили статическую геометрию мира или объекта, и хотите, чтобы физическая симуляция это учитывала. Работает только тогда, когда  физический движок включен и доступен для текущей платформы.


ccbAICommand(Узел, Команда, Параметр)

Примечание: Эта функция недоступна в редакторе.
Посылает команду объекту с поведением 'Game Actor with Health' (Игровой актер со здоровьем). С помощью этой функции можно заставить объект перемещаться куда-либо и атаковать что-либо, или делать нечто подобное.

Параметры:
  • Узел: Узел, к которому применяется эта функция. К узлу должно быть прикреплено поведение 'Game Actor with Health' (Игровой актер со здоровьем).
  • Команда: Строка с командой. Смотрите описание ниже.
  • Параметр: Параметр команды. Смотрите описание ниже.
Возможные команды и параметры:
  • "cancel" (отмена) - Отменяет текущее действие актёра, которое он выполняет (стрельба, ходьба и т. д.) и станет ничего не делать, или начнет следующее действие, которое имеет смысл в текущей ситуации (например, нападение на ближайшего врага). Параметр команды может быть проигнорирован или быть null.
  • "moveto" (двигаться к) - Заставляет актёра перемещаться в 3D-позицию. Параметр 3D-позиции должен быть типом vector3d().
  • "attack" (атаковать) - Заставляет актёра атаковать противника, который указан в качестве параметра. Актёр будет атаковать врага, даже если враг находится за пределами диапазона оружия актёра.
Примеры:
Код
var s = ccbGetSceneNodeFromName("man");
var otherNode = ccbGetSceneNodeFromName("soldier");
ccbAICommand(s, "attack", otherNode);
Заставляет актёра с именем "man" (человек) атаковать другой узел с именем "soldier" (солдат).

Код
var s = ccbGetSceneNodeFromName("man");
ccbAICommand(s, "moveto", new vector3d(-16.4, 4.5, -38.7));
Заставляет актёра с именем "man" (человек) двигаться в позицию -16.4, 4.5, -38.7


ccbSteamSetAchievement(ИдентификаторДостижения)

Примечание: Эта функция работает только на целевой палатформе Windows .exe.
Устанавливает достижение Steam как достигнутое. 'ИдентификаторДостижения' - это строка, которую вы указываете в интерфейсе администратора Steam при создании достижения. Также нарисует оверлей достижения, если достижение установлено в первый раз. Смотрите подробности в Описании поддержки Steam.


ccbSteamResetAchievements()

Примечание: Эта функция работает только на целевой платформе Windows .exe
Сбрасывает все достижения Steam для текущего пользователя. Смотрите подробности в Описании поддержки Steam.


ccbSaveScreenshot(ИмяФайлаИзображения)

Примечание: Эта функция работает только в Windows .exe и Mac OS X .app.
Делает снимок экрана: сохраняет текущее содержимое экрана в файле изображения на диск. Единственным параметром должно быть имя файла, например "test.jpg" или "C:\\test.jpg". Поддерживаемые форматы файлов: .bmp, .jpg, .tga, .psd, .pcx, .png и .ppm.


ccbSaveTexture(Текстура, ИмяФайлаИзображения)

Примечание: Эта функция работает только в редакторе, в Windows .exe и Mac OS X .app.
Сохраняет текстуру как файл изображения. Первый параметр - это текстура, вторым должно быть имя файла, например "test.jpg" или "C:\\test.jpg". Поддерживаемые форматы файлов: .bmp, .jpg, .tga, .psd, .pcx, .png и .ppm.
Пример:
Код
var s = ccbGetSceneNodeFromName("cubeMesh1");
var t = ccbGetSceneNodeMaterialProperty(s, 0, "Texture1");
ccbSaveTexture(t, "testout.jpg");


ccbSwitchToCCBFile(ИмяФайлаCopperCube)

Примечание: Эта функция работает только в Windows .exe и Mac OS .app.
Если ваша игра использует много данных, таких как текстуры / звуки / сцены и т. д., то вы можете динамически загружать уровни и сцены во время выполнения приложения, используя эту функцию. При вызове, функция освободит память и загрузит/запустит указанный файл. Это позволяет легко разделить вашу игру на несколько файлов.

Пример:
Код
ccbSwitchToCCBFile("ДругойФайл.ccb");


print(Текст)
Выводит строку в окне вывода редактора или в окне консоли отладки приложения.


system(КоманднаяСтрока)

Выполняет заданную командную строку. Может использоваться для выполнения команд и запуска программ.

Пример:
Код
system("type C:\\Windows\\WindowsUpdate.log");
В Windows это выведет на экран содержимое файла WindowsUpdate.log (если он доступен).

Оффлайн Samovar

  • Житель
Re: CopperCube
« Ответ #173 : 20 Июль 2019, 18:35:31 »
Только в редакторе

alert(Текст)

Эта функция доступна только в редакторе CopperCube
Показывает строку сообщения в модальном окне.

Пример:
Код
alert("Hello World");
Показывает текст сообщения "Hello World!" в модальном окне


confirm(Текст)

Эта функция доступна только в редакторе CopperCube
Показывает строку  сообщения в модальном окне и просит нажать кнопку ОК или CANCEL.
Пример:
Код
if (confirm("Continue?"))
   print("User pressed OK!");
else
   print("User pressed Cancel.");
Показывает текст "Continue?" в модальном окне и печатает текст в зависимости от того, какую кнопку нажал пользователь.


prompt(Текст, РедактируемыйТекст)

Эта функция доступна только в редакторе CopperCube
Показывает поле редактирования в модальном окне и просит нажать кнопку ОК или CANCEL.
Пример:
Код
var ret = prompt("Please enter a text", "some text");
if (ret)
  print("User entered this:" + ret);
else
  print("User pressed cancel");
Показывает текст сообщения "Please enter a text" в модальном окне и дополнительном окне редактирования.


editorAddSceneNode(Тип)
editorAddSceneNode(Тип, x, y, z)
editorAddSceneNode(Тип, x, y, z, Размер)

Создает новый узел сцены заданного типа (должен быть строкой) в позиции x, y, z, и применяет к нему настройки редактора по умолчанию, затем выделяет его и обновляет все виды в редакторе. Это так же, как если бы пользователь использовал команду 'Edit->Insert' (Правка->Вставить) из меню редактора.

Параметр 'Тип' должен быть одной из следующих строк:

"cube", "sphere", "cylinder", "cone", "plane", "light", "camera", "billboard", "skybox", "hotspot", "3dsound", "overlay2d"

x,y,z - это позиция, где будет создан узел сцены. Если не используется, то позиция будет задана редактором.

Параметр 'Размер' является необязательным и задает размер объекта, например, ширина и высота куба по умолчанию будет составлять 10 единиц.

Возвращает: новый узел сцены.

Примеры:
Код
var count = 3;
var size = 12;
for (var x=0; x<count; ++x)
   for (var y=0; y<count; ++y)
      for (var z=0; z<count; ++z)
         editorAddSceneNode("cube", x*size, y*size, z*size);
В этом примере будет создано 27 кубов, размещенных в гиперкубе.

Код
editorAddSceneNode("billboard");
В этом примере будет создан билборд, и размещен непосредственно перед 3D-камерой на экране.
 

editorFocusPosition(Позиция)

Заставляет камеры всех окон просмотра сфокусироваться на заданной позиции.

Пример:
Код
editorFocusPosition(vector3d(0,10,20));
Заставляет камеры сфокусироваться на позиции (0,10,20)
 

editorGetSelectedSceneNode()

Возвращает текущий выделенный сцены или 0, если ничего не выделено.

Пример:
Код
var s = editorGetSelectedSceneNode();

if (s)
   alert("Name of the selected node is: '" + ccbGetSceneNodeProperty(s, "Name") + "'");
else
   alert("nothing selected");
В этом примере печатается имя выделенного в данный момент узла сцены.
 

editorGetSelectedTexture()

Возвращает текущую текстуру, которая выделена в окне менеджера текстур.

Пример:
Код
var t = editorGetSelectedTexture();
var s = editorAddSceneNode("cube");

ccbSetSceneNodeMaterialProperty(s, 0, "Texture1", t);

if (t == "")
  print("added no texture");
else
  print("set texture to: " + t );
editorUpdateAllWindows(); 
Создает новый куб и применяет к нему текущую выделенную текстуру.
 

editorGetFileNameFromDialog()
editorGetFileNameFromDialog(Сообщение)
editorGetFileNameFromDialog(Сообщение, РасширенияФайлов)
editorGetFileNameFromDialog(Сообщение, РасширенияФайлов, ЭтоДиалогОткрытияФайла)

Отображает диалоговое окно выбора файла, предлагающее пользователю выбрать файл, и возвращает выбранное имя файла или пустую строку, если пользователь отменил выбор.

Параметры:
  • Сообщение: Текстовое сообщение отображаемое в заголовке окна.
  • РасширенияФайлов: Список возможных расширений файлов. Если не используется, то по умолчанию "*. *". Строка расширения файла должна быть в используемом формате wxWidgets, например "BMP files (*.bmp)|*.bmp|GIF files (*.gif)|*.gif" или "*.mesh;*.xml"
  • ЭтоДиалогОткрытияФайла: Если true (истина), то диалоговое окно представляется как диалог открытия файла, иначе как диалог сохранения файла. По умолчанию true (истина).
Пример:
Код
var s = editorGetFileNameFromDialog("please select something");

if (s != "")
   alert ("user selected " + s);
else
   alert("user cancelled selection");
В этом примере пользователю предлагается выбрать файл, после чего печатается имя выбранного файла.
 

editorUpdateAllWindows()

Обновляет все окна редактора. То же самое, что и 'View-> UpdateAllWindows' (Вид->Обновить все окна) или нажатие клавиши F5 в редакторе.

Пример:
Код
editorAddSceneNode("cube");
editorUpdateAllWindows();
В этом примере создается новый куб с настройками по умолчанию и обновляются окна редактора, чтобы отобразить новый узел сцены во всех окнах.
 

editorRegisterMenuEntry(Фунция, Текст)
 
Регистрирует новую запись в меню 'Plugins' (Плагины), используя текст, указанный в параметре 'Текст'. Когда команда из меню выбирается пользователем, выполняется глобальная функция, указанная в параметре 'Функция'.
Обратите внимание, что функция editorRegisterMenuEntry() работает только в сценариях, запущенных в режиме автозапуска. Это означает, что сценарий должен быть расположен в каталоге \Documents\CopperCube\plugins и с расширением '.js'.

Пример:
Код
function printHello()
{
  print("Hello\n");
}

editorRegisterMenuEntry("printHello();", "Print Hello into the log");
Помещение этого скрипта в файл с именем, например, 'CopperCube\plugins\autostart_printhello.js' и запуск редактора, добавит новый пункт меню в меню 'Edit->Plugins' (Правка->Плагины), который, при его выборе, напечатает 'Hello' в окне сообщений (Message Log).
 

editorSetSelectedSceneNode(Узел)

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

Пример:
Код
var s = editorAddSceneNode("sphere");
editorSetSelectedSceneNode(s);
Добавляет узел сцены и выделяет его в редакторе.



Оффлайн Samovar

  • Житель
Re: CopperCube
« Ответ #174 : 20 Июль 2019, 22:02:54 »
Редактирование полигональной сетки


Функции управления трехмерной геометрией полигональной сетки в CopperCube:
Примечание: Пока доступны только в редакторе и в приложениях для Mac OS X и Windows.

ccbGetSceneNodeMeshBufferCount(Узел) - Возвращает количество буферов в полигональной сетке узла сцены (один буфер соответствует геометрии с одним материалом).
ccbRemoveMeshBuffer(Узел, ИндексБуфераПолигональнойСетки) - Стирает буфер в полигональной сетке узла сцены.
ccbAddMeshBuffer(Узел) - Добавляет новый буфер в полигональную сетку узла сцены.

ccbGetMeshBufferVertexCount(Узел, ИндексБуфераПолигональнойСетки) - Возвращает количество вершин в буфере.
ccbGetMeshBufferIndexCount(Узел, ИндексБуфераПолигональнойСетки) - Возвращает количество индексов в буфере (индексами описываются треугольники, и их количество всегда должно быть кратно трём, то есть количество треугольников в буфере всегда будет равно количеству_индексов/3).

ccbAddMeshBufferIndex(Узел, ИндексБуфераПолигональнойСетки, ЗначениеИндекса) - Добавляет новое значение индекса в буфер.
ccbGetMeshBufferIndexValue(Узел, ИндексБуфераПолигональнойСетки, НомерИндекса) - Возвращает значение индекса.
ccbSetMeshBufferIndexValue(Узел, ИндексБуфераПолигональнойСетки, НомерИндекса, ЗначениеИндекса) - Изменяет значение индекса.

ccbAddMeshBufferVertex(Узел, ИндексБуфераПолигональнойСетки, ПозицияВершины) - Добавляет вершину в буфер.
ccbGetMeshBufferVertexPosition(Узел, ИндексБуфераПолигональнойСетки, ИндексВершины) - Возвращает 3D-позицию.
ccbSetMeshBufferVertexPosition(Узел, ИндексБуфераПолигональнойСетки, ИндексВершины, ПозицияВершины) - Устанавливает 3D-позицию вершины.

ccbGetMeshBufferVertexTextureCoord(Узел, ИндексБуфераПолигональнойСетки, ИндексВершины) - Возвращает текстурные координаты вершины.
ccbSetMeshBufferVertexTextureCoord(Узел, ИндексБуфераПолигональнойСетки, ИндексВершины, ТекстурныеКоординаты) - Устанавливает текстурные координаты вершины.

ccbGetMeshBufferVertexNormal(Узел, ИндексБуфераПолигональнойСетки, ИндексВершины) - Возвращает нормаль вершины.
ccbSetMeshBufferVertexNormal(Узел, ИндексБуфераПолигональнойСетки, ИндексВершины, ВекторНормали) - Устанавливает нормаль вершины.

ccbGetMeshBufferVertexColor(Узел, ИндексБуфераПолигональнойСетки, ИндексВершины) - Возвращает цвет вершины.
ccbSetMeshBufferVertexColor(Узел, ИндексБуфераПолигональнойСетки, ИндексВершины, ЦветВершины) - Устанавливает цвет вершины.

ccbUpdateSceneNodeBoundingBox(Узел) - Вычисляет новый габаритный контейнер для узла сцены. Это необходимо делать после изменения геометрии узла сцены.

Перечисленные выше функции предоставляют доступ ко всей статической трехмерной геометрии в редакторе и позволяют изменять ее. Работает это так: у каждого узла, который имеет трехмерную геометрию в СopperCube, есть трехмерная полигональная сетка, представляющая эту трехмерную геометрию. Трехмерная полигональная сетка состоит из нескольких буферов полигональной сетки, по одному буферу для каждого материала. Каждый буфер полигональной сетки состоит из нескольких вершин, определяющих трехмерное положение каждой вершины трехмерной геометрии, и нескольких индексов, содержащих порядковый номер вершины в буфере полигональной сетки и соединяющих эти вершины в треугольники. Количество добавляемых индексов в вашем скрипте должно быть всегда кратно трем, например, 0, 2, 1, образуют треугольник из первых трех индексов. Следующий треугольник добавляется по порядку, и описываются следующими тремя индексами буфера, и так далее.

Параметры:
  • Узел: Узел сцены.
  • ИндексБуфераПолигональнойСетки: Буфер полигональной сетки узла сцены. Один буфер соответствует геометрии с одним материалом. Без знаковое целое число начиная с нуля.
  • НомерИндекса: Порядковый номер индекса в буфере. Без знаковое целое число начиная с нуля.
  • ЗначениеИндекса: Содержимое индекса, указывающее на порядковый номер вершины в буфере. Без знаковое целое число начиная с нуля.
  • ИндексВершины: Порядковый номер вершины в буфере. Без знаковое целое число начиная с нуля.
  • ПозицияВершины: Трёхмерные координаты вершины в полигональной сетке, относительно начала координат узла сцены. Тип vector3d(x,y,z).
  • ТекстурныеКоординаты: Текстурные координаты вершины. Тип vector3d(x,y,z).
  • ВекторНормали: Нормаль вершины. Тип vector3d(x,y,z).
  • ЦветВершины: Цвет вершины в шестнадцатиричном формате 0xAARRGGBB.
Примеры:

Подсчет полигонов и материалов:
Код
var meshnode = editorGetSelectedSceneNode();
var bufferCount = ccbGetSceneNodeMeshBufferCount(meshnode);
if (bufferCount == 0)
  alert('The selected node has no 3D geometry.');
else
{
  var totalVertexCount = 0;
  var totalIndexCount = 0;
  for (var i=0; i<bufferCount; ++i)
  {
    totalVertexCount += ccbGetMeshBufferVertexCount(meshnode, i);
    totalIndexCount += ccbGetMeshBufferIndexCount(meshnode, i);
  }

  alert('The selected node has ' + (totalIndexCount/3) + ' polygons ' +
        totalVertexCount + ' vertices, and ' +
        bufferCount + ' materials.' );
}
Этот скрипт напечатает общее количество полигонов, вершин и материалов выделенного в редакторе узла, например: The selected node has 12 polygons 36 vertices, and 1 materials. (Выделенный узел имеет 12 полигонов, 36 вершин и 1 материал.)

Модификация 3D-сетки:
Код
var meshnode = editorGetSelectedSceneNode();
var bufferCount = ccbGetSceneNodeMeshBufferCount(meshnode);
if (bufferCount == 0)
  alert('The selected node has no 3D geometry.');
else
{
  for (var i=0; i<bufferCount; ++i)
  {
    var vertexcount = ccbGetMeshBufferVertexCount(meshnode, i);
    for (var v=0; v<vertexcount; ++v)
    {
       var pos = ccbGetMeshBufferVertexPosition(meshnode, i, v);
       
       pos.x *= 2;
       pos.y *= 2;
       pos.z *= 2;
       
       ccbSetMeshBufferVertexPosition(meshnode, i, v, pos);
    }
  } 
  ccbUpdateSceneNodeBoundingBox(meshnode);
}
Этот скрипт будет масштабировать все вершины выделенного в данный момент в редакторе узла на коэффициент 2. Примечание: Это действие отличается от установки значения масштаба узла, фактически оно будет перемещать все позиции вершин полигональной сетки узла.

Существует также урок о том, как Создавать 3D-геометрию с помощью JavaScript.



Другое


vector3d()
vector3d(x,y,z)

Класс для хранения 3-х координат с плавающей точкой: x, y и z.
Также содержит вспомогательные методы:
  • add, substract: Сложение и вычитание векторов
  • getLength(): Для расчета длины
  • normalize(): Для создания вектора длинной=1 (нормализация вектора)
  • Преобразование в строку
Примеры:
Код
var v = new vector3d(0,0,0);
print(v);
Печатает: (0, 0, 0)

Код
var v1 = new vector3d(10,0,0);
var v2 = new vector3d(0,20,0);
var v3 = v1.add(v2);

v3.normalize();
print(v3 + " Length:" + v3.getLength())
Печатает: (0.447214, 0.894427, 0) Length:1
 

Другие доступные процедуры (подробности смотрите в стандарте JavaScript):

Математические функции: Math.abs(x); Math.acos(x); Math.asin(x); Math.atan(x); Math.atan2(x, y); Math.ceil(x); Math.cos(x); Math.exp(x); Math.floor(x); Math.log(x); Math.pow(x, y); Math.random(); Math.round(), Math.sin(x); Math.sqrt(x); Math.tan(x);

Прочие: Все основные функции JavaScript, такие как функции даты, регулярные выражения, строки, массивы и т. д.

« Последнее редактирование: 20 Июль 2019, 22:28:16 от Samovar »

Оффлайн Samovar

  • Житель
Re: CopperCube
« Ответ #175 : 22 Июль 2019, 07:33:41 »
Программирование шейдеров в CopperCube

Начиная с версии 5, CopperCube поддерживает шейдеры для создания материалов и эффектов. Система не очень продвинута, но позволяет создавать базовые расширения. Этот раздел является небольшим обзором того, как это работает. Обратите внимание, что программировать шейдеры - дело не простое, и предполагается, что вы знакомы с этой сложной темой.

Шейдерная система в CopperCube
По сути, вы создаете шейдеры в CopperCube во время выполнения, с помощью JavaScript API, используя функции ccbCreateMaterial и ccbSetShaderConstant, а затем устанавливаете вновь созданный материал с помощью ccbSetSceneNodeMaterialProperty(). Шейдеры зависят от платформы, это означает, что вы должны писать их на HLSL для Windows/D3D9, на GLSL при использовании Windows/OpenGL или Mac/OpenGL и GLSL ES в WebGL. На некоторых платформах шейдеры не поддерживаются (см. ниже). Ниже вы найдете несколько примеров того, как использовать эту систему.

Специфичные ограничения для платформы
Для всех платформ существуют специфичные технические ограничения, которые вам необходимо знать:

Платформа
Шейдерный язык
Комментарии

Windows, D3D9
HLSL
всегда являются пиксельными и вершинными шейдерами версии 3.0.

Windows, D3D8   
-   
при использовании D3D8 шейдеры не поддерживаются

Windows и Mac OS X, OpenGL
GLSL   
могут не работать на очень старом оборудовании с устаревшими драйверами

WebGL
GLSL ES   
должны работать

Android   
GLSL ES   
пока не поддерживаются


Константы по умолчанию, установленные движком
Для вашего удобства движок устанавливает некоторые константы по умолчанию для вершинных шейдеров в Windows и Mac OS X, чтобы вы могли легко их использовать:
  • mWorldViewProj: матрица перехода, для преобразования положения в пространство отсечения (World(Мир) * View(Вид) * Projection(Проекция))
  • mInvWorld: инвертированная мировая матрица, для преобразования нормалей
  • mTransWorld: транспонированная мировая матрица, для преобразования координат положения в мировые координаты
Для WebGL имеются подобные константы с другими именами:
  • worldviewproj: матрица перехода, для преобразования положения в пространство отсечения (World(Мир) * View(Вид) * Projection(Проекция))
  • worldtransform: транспонированная мировая матрица, для преобразования координат положения в мировые координаты
  • normaltransform: матрица преобразования нормалей
  • modelviewtransform: преобразование модели относительно текущего вида
Примеры кода
Вот несколько примеров шейдеров для начала. Обратите внимание, что только коды шейдеров в примерах отличаются от платформы к платформе, код создания материала всегда одинаков.

Примеры Windows / D3D9 / HLSL
Этот пример показывает простую комбинацию вершинного и пиксельного шейдеров. В вершинном шейдере указано, как преобразовать позиции вершин, чтобы они были правильно прорисованы, а фрагментный (пиксельный) шейдер немного осветляет цвета. Предполагается существование узла сцены с именем 'cubeMesh1'

Код
var vertexShader = 
"float4x4 mWorldViewProj;  // World * View * Projection \n" +
"float4x4 mInvWorld;       // Inverted world matrix       \n" +
"float4x4 mTransWorld;     // Transposed world matrix   \n" +
"                                          \n" +
"// Vertex shader output structure                  \n" +
"struct VS_OUTPUT                              \n" +
"{                                          \n" +
"   float4 Position   : POSITION;   // vertex position    \n" +
"   float4 Diffuse    : COLOR0;     // vertex diffuse    \n" +
"   float2 TexCoord   : TEXCOORD0;  // tex coords      \n" +
"};                                          \n" +
"                                          \n" +
"VS_OUTPUT main      ( in float4 vPosition : POSITION,   \n" +
"                      in float3 vNormal   : NORMAL,   \n" +
"                      float2 texCoord     : TEXCOORD0 )\n" +
"{                                          \n" +
"   VS_OUTPUT Output;                           \n" +
"                                          \n" +
"   // transform position to clip space             \n" +
"   Output.Position = mul(vPosition, mWorldViewProj);   \n" +
"                                          \n" +
"   // transformed normal would be this:            \n" +
"   float3 normal = mul(vNormal, mInvWorld);         \n" +
"                                          \n" +
"   // position in world coodinates   would be this:      \n" +
"   // float3 worldpos = mul(mTransWorld, vPosition);   \n" +
"                                          \n" +
"   Output.Diffuse = float4(1.0, 1.0, 1.0, 1.0);      \n" +
"   Output.TexCoord = texCoord;                     \n" +
"                                          \n" +
"   return Output;                              \n" +
"}                                          ";

var fragmentShader =
"struct PS_OUTPUT                        \n" +
"{                                    \n" +
"    float4 RGBColor : COLOR0;                  \n" +   
"};                                    \n" +
"                                    \n" +
"sampler2D tex0;                        \n" +
"                                    \n" +
"PS_OUTPUT main( float2 TexCoord : TEXCOORD0,   \n" +
"                float4 Position : POSITION,   \n" +
"                float4 Diffuse  : COLOR0 )    \n" +
"{                                     \n" +
"   PS_OUTPUT Output;                     \n" +
"   float4 col = tex2D( tex0, TexCoord );        \n" +
"   Output.RGBColor = Diffuse * col;         \n" +
"   Output.RGBColor *= 4.0;                  \n" +
"   return Output;                        \n" +
"}";

var newMaterial = ccbCreateMaterial(vertexShader, fragmentShader, 0, null);

var cube = ccbGetSceneNodeFromName('cubeMesh1');
ccbSetSceneNodeMaterialProperty(cube, 0, 'Type', newMaterial);

Этот пример является расширенной версией первого, использующего функцию ccbSetShaderConstant(), которая заставляет материал переходить от яркого к темному тону каждые полсекунды, устанавливая константу пиксельного шейдера, которая затем умножается в пиксельном шейдере на цвет каждого пикселя:

Код
var vertexShader = 
"float4x4 mWorldViewProj;  // World * View * Projection \n" +
"float4x4 mInvWorld;       // Inverted world matrix       \n" +
"float4x4 mTransWorld;     // Transposed world matrix   \n" +
"                                          \n" +
"// Vertex shader output structure                  \n" +
"struct VS_OUTPUT                              \n" +
"{                                          \n" +
"   float4 Position   : POSITION;   // vertex position    \n" +
"   float4 Diffuse    : COLOR0;     // vertex diffuse    \n" +
"   float2 TexCoord   : TEXCOORD0;  // tex coords      \n" +
"};                                          \n" +
"                                          \n" +
"VS_OUTPUT main      ( in float4 vPosition : POSITION,   \n" +
"                      in float3 vNormal   : NORMAL,   \n" +
"                      float2 texCoord     : TEXCOORD0 )\n" +
"{                                          \n" +
"   VS_OUTPUT Output;                           \n" +
"                                          \n" +
"   // transform position to clip space             \n" +
"   Output.Position = mul(vPosition, mWorldViewProj);   \n" +
"                                          \n" +
"   // transformed normal would be this:            \n" +
"   float3 normal = mul(vNormal, mInvWorld);         \n" +
"                                          \n" +
"   // position in world coodinates   would be this:      \n" +
"   // float3 worldpos = mul(mTransWorld, vPosition);   \n" +
"                                          \n" +
"   Output.Diffuse = float4(1.0, 1.0, 1.0, 1.0);      \n" +
"   Output.TexCoord = texCoord;                     \n" +
"                                          \n" +
"   return Output;                              \n" +
"}                                          ";

var fragmentShader =
"struct PS_OUTPUT                        \n" +
"{                                    \n" +
"    float4 RGBColor : COLOR0;                  \n" +   
"};                                    \n" +
"                                    \n" +
"float4 pulse;                           \n" +
"sampler2D tex0;                        \n" +
"                                    \n" +
"PS_OUTPUT main( float2 TexCoord : TEXCOORD0,   \n" +
"                float4 Position : POSITION,   \n" +
"                float4 Diffuse  : COLOR0 )    \n" +
"{                                     \n" +
"   PS_OUTPUT Output;                     \n" +
"   float4 col = tex2D( tex0, TexCoord );        \n" +
"   Output.RGBColor = pulse * col;            \n" +
"   return Output;                        \n" +
"}";

myShaderCallBack = function()
{
   var time = new Date().getTime();
   var pulse = (time % 500) / 500.0;
   ccbSetShaderConstant(2, 'pulse', pulse, pulse, 0, pulse);
}

var newMaterial = ccbCreateMaterial(vertexShader, fragmentShader, 0, myShaderCallBack);

var cube = ccbGetSceneNodeFromName('cubeMesh1');
ccbSetSceneNodeMaterialProperty(cube, 0, 'Type', newMaterial);

Примеры Windows и Mac OS X OpenGL / GLSL
Этот пример показывает простую комбинацию вершинного и пиксельного шейдеров. В вершинном шейдере указано, как преобразовать позиции вершин, чтобы они были правильно прорисованы, а фрагментный (пиксельный) шейдер немного осветляет цвета. Предполагается существование узла сцены с именем 'cubeMesh1':

Код
var vertexShader =                            
"uniform mat4 mWorldViewProj;                  \n" +
"uniform mat4 mInvWorld;                     \n" +
"uniform mat4 mTransWorld;                     \n" +
"                                       \n" +
"void main(void)                           \n" +
"{                                       \n" +
"   gl_Position = mWorldViewProj * gl_Vertex;      \n" +
"                                       \n" +
"   // normal would be this:                  \n" +
"   vec4 normal = vec4(gl_Normal, 0.0);            \n" +
"   normal = mInvWorld * normal;               \n" +
"   normal = normalize(normal);                  \n" +
"                                       \n" +
"   // world position would be this:            \n" +
"   vec4 worldpos = gl_Vertex * mTransWorld;      \n" +
"                                       \n" +
"   gl_FrontColor = gl_BackColor = vec4(1.0, 1.0, 1.0, 0.0);   \n" +
"                                       \n" +
"   gl_TexCoord[0] = gl_MultiTexCoord0;            \n" +
"}";

var fragmentShader =
"uniform sampler2D myTexture;                     \n" +
"                                          \n" +
"void main (void)                              \n" +
"{                                          \n" +
"    vec4 col = texture2D(myTexture, vec2(gl_TexCoord[0]));\n" +
"    col *= gl_Color;                           \n" +
"    gl_FragColor = col;                        \n" +
"}";

var newMaterial = ccbCreateMaterial(vertexShader, fragmentShader, 0, null);

var cube = ccbGetSceneNodeFromName('cubeMesh1');
ccbSetSceneNodeMaterialProperty(cube, 0, 'Type', newMaterial);

Этот пример является расширенной версией первого, использующего функцию ccbSetShaderConstant(), которая заставляет материал переходить от яркого к темному тону каждые полсекунды, устанавливая константу пиксельного шейдера, которая затем умножается в пиксельном шейдере на цвет каждого пикселя:

Код
var vertexShader =                            
"uniform mat4 mWorldViewProj;                  \n" +
"uniform mat4 mInvWorld;                     \n" +
"uniform mat4 mTransWorld;                     \n" +
"                                       \n" +
"void main(void)                           \n" +
"{                                       \n" +
"   gl_Position = mWorldViewProj * gl_Vertex;      \n" +
"                                       \n" +
"   // normal would be this:                  \n" +
"   vec4 normal = vec4(gl_Normal, 0.0);            \n" +
"   normal = mInvWorld * normal;               \n" +
"   normal = normalize(normal);                  \n" +
"                                       \n" +
"   // world position would be this:            \n" +
"   vec4 worldpos = gl_Vertex * mTransWorld;      \n" +
"                                       \n" +
"   gl_FrontColor = gl_BackColor = vec4(1.0, 1.0, 1.0, 0.0);   \n" +
"                                       \n" +
"   gl_TexCoord[0] = gl_MultiTexCoord0;            \n" +
"}";

var fragmentShader =
"uniform sampler2D myTexture;                     \n" +
"uniform vec4 pulse;                           \n" +
"                                          \n" +
"void main (void)                              \n" +
"{                                          \n" +
"    vec4 col = texture2D(myTexture, vec2(gl_TexCoord[0]));\n" +
"    col *= gl_Color;                           \n" +
"    gl_FragColor = col * pulse;                  \n" +
"}";

myShaderCallBack = function()
{
   var time = new Date().getTime();
   var pulse = (time % 500) / 500.0;
   ccbSetShaderConstant(2, 'pulse', pulse, pulse, 0, pulse);
}

var newMaterial = ccbCreateMaterial(vertexShader, fragmentShader, 0, myShaderCallBack);

var cube = ccbGetSceneNodeFromName('cubeMesh1');
ccbSetSceneNodeMaterialProperty(cube, 0, 'Type', newMaterial);

Примеры WebGL / GLSL
Этот пример показывает простую комбинацию вершинного и пиксельного шейдеров. В вершинном шейдере указано, как преобразовать позиции вершин, чтобы они были правильно прорисованы, а фрагментный (пиксельный) шейдер немного осветляет цвета. Предполагается существование узла сцены с именем 'cubeMesh1':

Код
var vertexShader =                            
"uniform mat4 worldviewproj;                        \n" +
"                                             \n" +
"attribute vec4 vPosition;                           \n" +
"attribute vec4 vNormal;                           \n" +
"attribute vec4 vColor;                              \n" +
"attribute vec2 vTexCoord1;                           \n" +
"attribute vec2 vTexCoord2;                           \n" +
"                                             \n" +
"varying vec4 v_color;                              \n" +
"varying vec2 v_texCoord1;                           \n" +
"varying vec2 v_texCoord2;                           \n" +
"                                             \n" +
"void main()                                    \n" +
"{                                             \n" +
"   v_color = vColor;                              \n" +
"   gl_Position = worldviewproj * vPosition;            \n" +
"   v_texCoord1 = vTexCoord1.st;                     \n" +
"   v_texCoord2 = vTexCoord2.st;                     \n" +
"}                                             ";

var fragmentShader =
"uniform sampler2D texture1;                        \n" +
"uniform sampler2D texture2;                        \n" +
"                                             \n" +
"varying vec2 v_texCoord1;                           \n" +
"varying vec2 v_texCoord2;                           \n" +
"                                             \n" +
"void main()                                    \n" +
"{                                             \n" +
"   vec2 texCoord = vec2(v_texCoord1.s, v_texCoord1.t);      \n" +
"   gl_FragColor = texture2D(texture1, texCoord) * 2.0;      \n" +
"}                                             \n";

var newMaterial = ccbCreateMaterial(vertexShader, fragmentShader, 0, null);

var cube = ccbGetSceneNodeFromName('cubeMesh1');
ccbSetSceneNodeMaterialProperty(cube, 0, 'Type', newMaterial);

Этот пример является расширенной версией первого, использующего функцию ccbSetShaderConstant(), которая заставляет материал переходить от яркого к темному тону каждые полсекунды, устанавливая константу пиксельного шейдера, которая затем умножается в пиксельном шейдере на цвет каждого пикселя:

Код
var vertexShader =                            
"uniform mat4 worldviewproj;                        \n" +
"                                             \n" +
"attribute vec4 vPosition;                           \n" +
"attribute vec4 vNormal;                           \n" +
"attribute vec4 vColor;                              \n" +
"attribute vec2 vTexCoord1;                           \n" +
"attribute vec2 vTexCoord2;                           \n" +
"                                             \n" +
"varying vec4 v_color;                              \n" +
"varying vec2 v_texCoord1;                           \n" +
"varying vec2 v_texCoord2;                           \n" +
"                                             \n" +
"void main()                                    \n" +
"{                                             \n" +
"   v_color = vColor;                              \n" +
"   gl_Position = worldviewproj * vPosition;            \n" +
"   v_texCoord1 = vTexCoord1.st;                     \n" +
"   v_texCoord2 = vTexCoord2.st;                     \n" +
"}                                             ";

var fragmentShader =
"uniform sampler2D texture1;                        \n" +
"uniform sampler2D texture2;                        \n" +
"uniform vec4 pulse;                              \n" +
"                                             \n" +
"varying vec2 v_texCoord1;                           \n" +
"varying vec2 v_texCoord2;                           \n" +
"                                             \n" +
"void main()                                    \n" +
"{                                             \n" +
"   vec2 texCoord = vec2(v_texCoord1.s, v_texCoord1.t);      \n" +
"   gl_FragColor = texture2D(texture1, texCoord) * pulse;   \n" +
"}                                             \n";

myShaderCallBack = function()
{
   var time = new Date().getTime();
   var pulse = (time % 500) / 500.0;
   ccbSetShaderConstant(2, 'pulse', pulse, pulse, 0, pulse);
}

var newMaterial = ccbCreateMaterial(vertexShader, fragmentShader, 0, myShaderCallBack);

var cube = ccbGetSceneNodeFromName('cubeMesh1');
ccbSetSceneNodeMaterialProperty(cube, 0, 'Type', newMaterial);

Оффлайн Samovar

  • Житель
Re: CopperCube
« Ответ #176 : 22 Июль 2019, 11:55:06 »
Платформа WebGL (.html)
При создании приложений WebGL/JavaScript .html в CopperCube, необходимо помнить о некоторых вещах:
Поддерживаются WebGL 1 и WebGL 2. Когда браузер не поддерживает WebGL 2, используется откат к WebGL 1.
Еще существует несколько старых браузеров, которые не поддерживают WebGL. Смотрите ниже информацию об этом.
Некоторые браузеры запускают контент WebGL, сгенерированный в CopperCube, только когда он поступает с веб-сервера (а не с локального диска). CopperCube сообщит вам, когда это произойдёт, и что с этим делать.


Переключение в полноэкранный режим и блокировка указателя мыши
Начиная с версии 4.5, CopperCube поддерживает переключение вашего WebGL приложения  в полноэкранный режим и, дополнительно, блокировку курсора мыши для лучшей работы камер First Person Shooter (Камера в стиле шутера от первого лица). Для этого добавьте в приложение поведение When a key is pressed do something (Когда нажата клавиша, сделать что-либо) или 2D-наложение с надписью When clicked on this do something (При нажатии сделать что-либо), а затем добавьте в него дополнительное действие Switch to Fullscreen (Переключиться в полноэкранный режим). Вы можете скачать это дополнительное действие  с домашней страницы CopperCube.

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

В неполноэкранных приложениях WebGL, если это необходимо, можете использовать автоматическую блокировку мыши для камер FPS (от первого лица). Эта опция находится в настройках публикации WebGL


Поддержка браузера
Проекты CopperCube, опубликованные в виде WebGL/JavaScript, имеют одно большое преимущество: им не требуется плагина, и они запускаются непосредственно в браузере.
Актуальный список браузеров поддерживающих WebGL, смотрите на сайте в разделе поддержки браузерами CopperLicht.


Скрытие отладочного текста
Проекты CopperCube WebGL иногда печатают информационный текст под холстом, например, когда загрузка текстуры не удалась или возникла проблема с созданием шейдера. Конечно, для вашего готового продукта вы не захотите, чтобы появлялся этот текст. Текст помечен CSS-классом "cldebug", чтобы вы могли легко влиять на его внешний вид. Если вы хотите, чтобы он был скрыт, просто добавьте правило CSS, например, "div.cldebug {display: none;}", в заголовок вашего .HTML файла:
Код
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
   <script type="text/javascript" src="copperlichtdata/copperlicht.js"></script>
   <style type="text/css">
      div.cldebug { display: none; }
   </style>
</head>
<body>
...


Программирование на JavaScript
Помимо действий и поведений, вы можете сделать ваши WebGL-сцены более интерактивными, используя встроенный язык сценариев JavaScript. Посмотрите Обзор программирования сценариев (написания скриптов) в CopperCube.

Кроме того, существует второй, более продвинутый способ написания сценария для вашего приложения WebGL, который работает только для WebGL, а не для других целевых платформ: CopperCube использует свой собственный JavaScript-движок на основе WebGL 3D с именем 'CopperLicht'. Вы можете бесплатно загрузить CopperLicht SDK. Он содержит подробную документацию и несколько примеров и уроков, показывающих, как расширить 3D-сцены CopperCube с помощью JavaScript:

Перейти на страницу CopperLicht.


Проблемы с запуском ваших  WebGL проектов в Google Chrome
Если вы хотите запускать свои WebGL проекты с локального диска и с помощью браузера Google Chrome, то вы можете получить сообщение об ошибке, типа:

Error: Could not load file 'copperlichtdata/coppercube.ccbjs'
(Ошибка: не удалось загрузить файл 'copperlichtdata/coppercube.ccbjs')

Обычно это вызвано ограничением безопасности, из-за которого Chrome не хочет читать файлы с вашего диска. Есть четыре способа обойти это:
  • Обходной путь 1: В Windows, CopperCube запускает свой собственный веб-сервер и использует его, если у вас включен этот параметр (а он включен по умолчанию), при  выборе вами Tools -> Test as WebGL (Инструменты -> Тестировать как WebGL). В этом случае, ваша сцена всегда будет работать в браузере.
  • Обходной путь 2: Используйте другой браузер, например, Firefox 4. На момент написания этой статьи Firefox с радостью считывал файлы с локального диска.
  • Обходной путь 3: Добавьте параметр --allow-file-access-from-files при запуске Chrome. Для этого в Windows сделайте следующее:
    • Если у вас есть ярлык Chrome где-то на рабочем столе или на панели задач, кликните его правой кнопкой мыши, выберите 'Свойства'. Вам откроются некоторые параметры запуска Chrome.
    • Как правило, существует первая запись с именем "target" или аналогичная, и устанавливается что-то вроде:
               C:\Users\вашеимя\AppData\Local\Google\Chrome\Application\chrome.exe
               Просто добавьте --allow-file-access-from-files, чтобы это выглядело так:
               C:\Users\вашеимя\AppData\Local\Google\Chrome\Application\chrome.exe --allow-file-access-from-files
    • Теперь, когда вы запустить браузер из CopperСube , чтобы отобразить ваш проект, просто скопируйте из него URL-адрес, а затем закройте браузер, и откройте его вновь, используя измененный ярлык, и вставьте URL-адрес в браузер. Тогда это заработает.
       
  • Обходной путь 4: Запустите ваш проект с веб-сервера. Вы можете либо загрузить свои файлы на веб-сервер в Интернете, либо запустить локальный веб-сервер в своей системе и позволить Chrome получить доступ к адресу http://localhost/...-адрес, где находятся ваши файлы, вместо прямого доступа к файлам, используя file:// ... URL.
« Последнее редактирование: 22 Июль 2019, 12:16:12 от Samovar »

Оффлайн Samovar

  • Житель
Re: CopperCube
« Ответ #177 : 22 Июль 2019, 16:57:12 »
Платформа MacOS (.app)
Вы можете создавать приложения Mac OS X .app с помощью CopperCube. Из-за ограничения 3D-движка в Mac OS X, эта целевая платформа недостаток: типы шрифтов для текста в 2D-наложениях игнорируются. Если вам нужен собственный шрифт в этой целевой платформе, то создайте на его базе текстуру изображения и используйте её на 2D-наложении. В остальном, эта целевая платформа является полностью функциональной.
Но есть также некоторые специальные функции:


Аргументы командной строки
При запуске каждого созданного файла .app, можно использовать несколько аргументов командной строки:
-windowed Принудительно запускает приложение в оконном режиме вместо полноэкранного режима.
-debug Запускает приложение в режиме отладки. Делает консоль отладки видимой, например, когда происходит ошибка или среда сценариев печатает строку текста.
-script:<файл> Использует данный файл в качестве основного скрипта (сценария), вместо файла сценария, скомпилированного внутри приложения.

Примеры:
Следующая командная строка запустит ваше приложение в оконном режиме:

yourapplication.app/Contents/MacOS/yourapplication -windowed

Следующая команда будет использовать файл сценария «myscript.js» вместо скомпилированного внутри приложения, и покажет консоль отладки, если какая-либо строка текста будет напечатана в вашем сценарии. Это полезно, например, для разработки файла сценария без редактора CopperCube.

yourapplication.app/Contents/MacOS/yourapplication -debug -script:myscript.js


Сценарии на JavaScript
Вы можете делать свои сцены CopperCube 3D Windows .exe более интерактивными, используя встроенный сценарный язык программирования JavaScript. Посмотрите Обзор программирования сценариев , что бы использовать эту возможность.

Кроме того, для этой целевой платформы вы можете использовать отдельный файл скрипта при разработке.
Если вы хотите использовать эту возможность, то выполните следующие действия:
Сохраните 3D-сцену в файл где-нибудь на жестком диске. Например, в файл с именем test.ccb
Создайте файл с именем вашего файла CopperCube, но с расширением «.js», например test.js
Отредактируйте этот файл с помощью вашего любимого текстового редактора (рекомендуется: Notepad++, он поддерживает подсветку синтаксиса JavaScript). При публикации вашего файла как приложения Windows .exe, CopperCube включит этот сценарий в файл .exe и будет использовать его в качестве основного сценария.
Пример:
Запишите этот текст в свой файл .js:
Код
print("Hello World!");
При тестировании вашей 3D-сцены из редактора CopperCube будет напечатан текст "Hello World!" в консоли отладки.

Совет по разработке:
Если вы предпочитаете разрабатывать сценарий без запуска редактора CopperCube, вы можете сделать это с помощью аргументов командной строки -debug и -script: Смотрите раздел Аргументы командной строки.

Ссылки и примеры
Обзор программирования сценариев с описанием того, как использовать сценарии для всех целевых платформ.
В этой документации имеется исчерпывающая справка по сценариям JavaScript API


Исходный код
Если вы хотите расширить приложение с помощью специальных пользовательских функций, вы можете сделать это, скомпилировав приложение самостоятельно и запрограммировав свои собственные дополнения. Вы можете получить исходный код, если вы являетесь владельцем CopperCube Studio Edition: В редакторе нажмите 'Help -> About', а затем кнопку "Download C++ Source" («Справка -> О программе», а затем кнопку «Загрузить исходный код C++»).
Код является проектом Xcode. Он основан на 3D-движке с открытым исходным кодом Irrlicht и его довольно легко расширить. Краткая документация о том, как собрать пакет, может быть найдена в корне с именем document.txt.

Оффлайн Samovar

  • Житель
Re: CopperCube
« Ответ #178 : 24 Июль 2019, 02:59:13 »
Платформа Android (.apk)

C помощью CopperCube вы можете создавать приложения для мобильных устройств с операционной системой Google Android. При публикации в эту целевую платформу, редактор сгенерирует файл с расширением имени файла .apk, который будет являться готовым приложением для Android. Вы можете перенести его на свое устройство, например, загрузив его из любой точки Интернета или нажав кнопку в CopperCube 'Install on Device'  (Установить на устройстве), а затем запустить его. Так же, вы можете продавать его, опубликовав в магазине Google Play.


Настройка CopperCube для создания приложений Android
Если вы хотите опубликовать созданные  вами с помощью CopperCube 3D-сцены в качестве приложения Android, то вам необходимо предварительно загрузить и установить некоторые дополнительные пакеты программного обеспечения. Чтобы сделать это, выполните следующие шаги:

Загрузка и установка Android SDK
  • Перейдите на страницу http://developer.android.com/sdk/index.html и загрузите SDK Android Studio. Там вы можете выбрать между версиями Windows и Mac OS X этого SDK.
  • Установите только что загруженный Android Studio SDK, запустив его установщик. SDK обычно требует установленной Java-машины, поэтому, если вы еще не установили ее, вам будет предложено загрузить и установить ее, прежде чем продолжить. Важное замечание: Пожалуйста, установите прилагаемый Android SDK в каталог верхнего уровня с именем C:\androidsdk или аналогичным.
  • После установки запустите Android Studio и откройте Android SDK Manager, используя меню Tools -> Android -> SDK Manager (Инструменты -> Android -> SDK Manager). Там вы можете выбрать конкретные платформы Android для загрузки и установки. Для CopperCube нам нужен пакет Android 8.0 ('O' / API Level 26). Просто выберите это и нажмите «ОК» для загрузки и установки.


Включение параметров разработчика на вашем Android-устройстве
Если вы хотите, чтобы CopperCube мог устанавливать ваше приложение на вашем Android-устройстве, вам нужно включить на нем опции разработчика. Установите для него большой флажок, а также установите флажок "USB Debugging" (Отладка по USB). Если у вас нет записи "Developer Options" (Параметры разработчика) в ваших настройках, вам нужно перейти к "About device" (Об устройстве) и коснуться записи "build number" (Номер сборки) семь раз, чтобы разблокировать опции разработчика.

Настройка CopperCube для использования Android SDK
Нужно сообщить CopperCube, где вы установили SDK для создания пакетов Android.
  • Запустите CopperCube, выберите в меню "Tools -> Options -> Directories" (Сервис -> Параметры -> Каталоги).
  • В поле 'Java SDK path' (Путь к Java SDK) выберите каталог, в котором установлен Java JDK. Если вы еще не установили его или не можете найти его в своей системе, то вы можете загрузить новый JDK из Oracle: Перейдите на  http://www.oracle.com/technetwork/java/javase/downloads/index.html, и выберите " Java Platform (JDK)" (Standard Edition), загрузите и установите его.
  • В поле 'Android SDK path' (Путь Android SDK) выберите каталог, в который вы установили Android SDK.
  • Для 'Keystore file' (Файла хранилища ключей) нажмите кнопку 'Create Keystore' (Создать хранилище ключей). Заполните подробную информацию, и нажмите ОК. Это создаст файл хранилища ключей, используемый для подписи ваших приложений.


Вот и все, теперь вы можете создавать приложения для Android с помощью CopperCube.
Обратите внимание, что в разделе Tools -> Publishing Settings -> Android (Инструменты -> Параметры публикации -> Android) вы найдете множество вариантов создания приложений, таких как файл значка, имя пакета, номер версии и т. д. Кроме того, убедитесь, что файл присутствует хранилище ключей, созданное вами на последнем шаге, это очень важно! Сделайте резервную копию файла, если вы планируете опубликовать или продать свое приложение для Android. Этот ключ необходим для создания обновлений вашего приложения. Ключ не может быть заново сгенерирован. Вам нужен этот ключ, даже если вы планируете создать несколько приложений для Android.


Системные требования
Созданные CopperCube приложения для Android работают на любой системе Android начиная с версии 2.2 с поддержкой OpenGL ES2. Но поскольку существуют очень быстрые, а также очень медленные устройства, то производительность вашего приложения может отличаться на разных устройствах. Для достаточной скорости работы рекомендуются, минимум, устройства Android с архитектурой ARMv7. Если вы используете скелетную анимацию в своем приложении, то производительность может быть очень низкой, когда устройство не поддерживает её.

Также обратите внимание, что устройства Android, как правило, гораздо менее быстрые, чем ваш обычный ПК или Mac. Обязательно используйте очень простую трехмерную геометрию, скелетную анимацию с очень небольшим количеством костей и самое главное: всего несколько текстур с очень низким разрешением. Если вашему Android-приложению не хватит памяти, а это, вероятно, произойдёт при использовании большого количества текстур в высоком разрешении, то это приведёт к сбою.


Программируемые сценарии (скрипты)
Приложения Android поддерживают те же функции JavaScript, что и другие целевые платформы, а также действие 'Execute Javascript' (Выполнить Javascript). Посмотрите Обзор программирования сценариев, чтоб знать, как использовать эту возможность.

Так же смотрите Справочник по JavaScript, где приведён список всех доступных функций.


Клавиша меню
Для  вашего приложения может быть полезно реагировать на нажатие пользователем клавиши 'Menu' (Меню) на устройстве Android. Вы можете сделать это в CopperCube, используя поведение "When a key is pressed do something" (При нажатии клавиши сделать что-либо) для любого трехмерного объекта или корневого объекта сцены, и выбрав клавишу  "App Menu key" (Клавиша меню приложения).


Звук
Для воспроизведения звуков на целевой платформе Android, рекомендуется использовать файлы .ogg.


Исходный код
Если вы хотите расширить приложение Android с помощью специальных функций Android, то вы можете сделать это, скомпилировав приложение для Android, и запрограммировав свои собственные дополнения. Вы можете получить доступ к исходному коду, если у вас есть версия CopperCube Studio Edition: В редакторе нажмите "Help -> About" (Справка -> О программе), а затем нажмите кнопку "Download Android Source" (Загрузить исходный код Android).
Код представляет собой проект Eclipse, который можно скомпилировать с помощью Android SDK и плагина Eclipse Android Development. Краткая документация о том, как собрать пакет, может быть найдена в корне с именем document.txt.

Оффлайн Striver

  • Житель
  • недоинженер, полупрограммист
    • http://striver00.ru
Re: CopperCube
« Ответ #179 : 24 Июль 2019, 18:22:53 »
ccbCreateMaterial(ВершинныйШейдер, ФрагментныйШейдер, ТипОсновногоМатериала, Отклик)
ccbSetShaderConstant(Тип, Имя, Значение1, Значение2, Значение3, Значение4)

Цитировать
Функция возвращает уникальный идентификатор материала, который вы можете использовать для замены материала у любого узла сцены, на ваш новый материал, с помощью ccbSetSceneNodeMaterialProperty(). Возвращает -1, если произошла ошибка.
Функция возвращает уникальный идентификатор материала, который вы можете использовать для замены материала любого узла сцены на ваш новый материал, с помощью функции ccbSetSceneNodeMaterialProperty(). Возвращает -1, если произошла ошибка.

ccbAICommand(Узел, Команда, Параметр)
Цитировать
Отменяет текущее действие актёра, которое он выполняет (стрельба, ходьба и т. д.) и станет ничего не делать, или начнет следующее действие, которое имеет смысл в текущей ситуации (например, нападение на ближайшего врага).
Отменяет текущее действие актёра, которое он выполняет (стрельба, ходьба и т. д.), после чего он перестанет что-либо делать или начнет следующее действие, которое имеет смысл в текущей ситуации (например, нападение на ближайшего врага).

ccbSaveScreenshot(ИмяФайлаИзображения)
Цитировать
Делает снимок экрана: сохраняет текущее содержимое экрана в файле изображения на диск.
Делает снимок экрана: сохраняет текущее содержимое экрана в графический файл на диске.

 


Яметрика

* По форуму

* Рекламный блок

* Последние вложения

1 (1).png
Скачано: 65
Автор: LEXA ANЭGROWND
blender.png
Скачано: 75
Автор: ipv2007
4.png
Скачано: 97
Автор: hiroyukiss
2.png
Скачано: 120
Автор: hiroyukiss

Скачано: 110
Автор: Dilifa12