ccbRegisterKeyDownEvent("keyPressedDown");function keyPressedDown(keyCode){ print("A key was pressed down:" + keyCode);}
ccbRegisterKeyUpEvent("keyPressedUp");function keyPressedUp(keyCode){ print("A key was left up:" + keyCode);}
ccbRegisterMouseDownEvent("mousePressedDown");function mousePressedDown(button){ print("A mouse button was presssed down:" + button);}
ccbRegisterMouseUpEvent("mouseLeftUp");function mouseLeftUp(button){ print("A mouse button was left up:" + button);}
function onFrameDrawing(){ // нарисовать красный, прозрачный прямоугольник в позиции мыши var mouseX = ccbGetMousePosX(); var mouseY = ccbGetMousePosY(); ccbDrawColoredRectangle(0x77ff0000, mouseX-10, mouseY-10, mouseX+10, mouseY+10);}ccbRegisterOnFrameEvent(onFrameDrawing);
function onFrameDrawing(){ // нарисовать текстурированный прямоугольник в позиции мыши var mouseX = ccbGetMousePosX(); var mouseY = ccbGetMousePosY(); ccbDrawTextureRectangle("someFile.png", mouseX-100, mouseY-100, mouseX+100, mouseY+100);}ccbRegisterOnFrameEvent(onFrameDrawing);
function onFrameDrawing(){ // нарисовать текстурированный прямоугольник в позиции мыши var mouseX = ccbGetMousePosX(); var mouseY = ccbGetMousePosY(); ccbDrawTextureRectangleWithAlpha("someFile.png", mouseX-100, mouseY-100, mouseX+100, mouseY+100);}ccbRegisterOnFrameEvent(onFrameDrawing);
var mouseX = ccbGetMousePosX();var mouseY = ccbGetMousePosY();var anode = ccbGetSceneNodeFromName("somenode"); var pos3d = ccbGet3DPosFrom2DPos(mouseX, mouseY);ccbSetSceneNodeProperty(anode, "Position", pos3d);
var pos = ccbGet2DPosFrom3DPos(20, 30, 30); print("Position on screen: " + pos);
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);
РисованиеccbDrawTextureRectangleWithAlpha(ФайлИзображения, x1, y1, x2, y2)Эта функция будет учитывать альфа-канал текстуры, используйте ccbDrawTextureRectangleWithAlpha, чтобы у текстуры не было альфа-канала.
ДействияExecute JavaScript(Запустить JavaScript)
var node = ccbGetSceneNodeFromName("cubeMesh1");var tex = ccbLoadTexture("example.jpg");ccbSetSceneNodeMaterialProperty(node, 0, "Texture1", tex);
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);
Должно быть значение большее или равное 0, и меньшее, чем ccbGetSceneNodeMaterialCount().
Обратите внимание, что при установке нового родителя, положение, вращение и масштаб дочернего узла становятся относительны нового родителя.
Для получения событий клавитуры используйте функцию поведения onKeyEvent().
Зарегистрированная функция должна принимать один параметр, которым будет нажатя кнопка мыши (1 для левой кнопки, 2 для правой кнопки, 3 для средней кнопки).
Зарегистрированная функция должна принимать один параметр, которым будет отпущенная кнопка мыши (1 для левой кнопки, 2 для правой кнопки, 3 для средней кнопки).
Функция ccbRegisterOnFrameEvent регистрирует вашу функцию выполняемую при событии 'on frame', которое происходит каждый кадр отрисовки экрана.
После того, как вам больше не нужны события происходящие каждый кадр, вызовите функцию ccbUnregisterOnFrameEvent(), чтобы отменить регистрацию вашей функции.
Возвращает ноль, если нет столкновения.
В случае успеха, возвращает объект текстуры , который затем можно использовать, например, в вызове функции ccbSetSceneNodeMaterialProperty() с указанием в ней в качестве параметра этот объект текстуры.
Для других целевых платформ форматы зависят файлов зависит от их поддержки браузером и платформой.
<property name="ActionWhenFinished" type="action" />
ccbInvokeAction(this.ActionWhenFinished);
ccbInvokeAction(this.ActionWhenFinished, this.УзелСкоторымЯсейчасРаботаю);
function finishedRequest(dataReceived){ print("finished request! Data size:" + dataReceived.length);}ccbDoHTTPRequest("http://www.ambiera.com/index.html", finishedRequest);
var s = ccbGetSceneNodeFromName("man");var otherNode = ccbGetSceneNodeFromName("soldier");ccbAICommand(s, "attack", otherNode);
var s = ccbGetSceneNodeFromName("man");ccbAICommand(s, "moveto", new vector3d(-16.4, 4.5, -38.7));
var s = ccbGetSceneNodeFromName("cubeMesh1");var t = ccbGetSceneNodeMaterialProperty(s, 0, "Texture1");ccbSaveTexture(t, "testout.jpg");
ccbSwitchToCCBFile("ДругойФайл.ccb");
system("type C:\\Windows\\WindowsUpdate.log");
alert("Hello World");
if (confirm("Continue?")) print("User pressed OK!");else print("User pressed Cancel.");
var ret = prompt("Please enter a text", "some text");if (ret) print("User entered this:" + ret);else print("User pressed cancel");
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);
editorAddSceneNode("billboard");
editorFocusPosition(vector3d(0,10,20));
var s = editorGetSelectedSceneNode();if (s) alert("Name of the selected node is: '" + ccbGetSceneNodeProperty(s, "Name") + "'");else alert("nothing selected");
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();
var s = editorGetFileNameFromDialog("please select something");if (s != "") alert ("user selected " + s);else alert("user cancelled selection");
editorAddSceneNode("cube");editorUpdateAllWindows();
function printHello(){ print("Hello\n");}editorRegisterMenuEntry("printHello();", "Print Hello into the log");
var s = editorAddSceneNode("sphere");editorSetSelectedSceneNode(s);
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.' );}
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);}
var v = new vector3d(0,0,0);print(v);
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())
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);
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);
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);
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);
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);
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);
<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>...
print("Hello World!");
Функция возвращает уникальный идентификатор материала, который вы можете использовать для замены материала у любого узла сцены, на ваш новый материал, с помощью ccbSetSceneNodeMaterialProperty(). Возвращает -1, если произошла ошибка.
Отменяет текущее действие актёра, которое он выполняет (стрельба, ходьба и т. д.) и станет ничего не делать, или начнет следующее действие, которое имеет смысл в текущей ситуации (например, нападение на ближайшего врага).
Делает снимок экрана: сохраняет текущее содержимое экрана в файле изображения на диск.