Compare commits

..

3 Commits

8 changed files with 1233 additions and 71 deletions

103
_math.lua
View File

@ -32,7 +32,7 @@ mat4 = {
-- newByteData is zero-initialized
local data = love.data.newByteData(16 * 4)
local m = ffi.cast('float*', data:getFFIPointer())
value = {
local value = {
data = data,
m = m,
}
@ -552,18 +552,73 @@ mat4 = {
setmetatable(mat4, mat4)
vec2 = {
__call = function(_t, x, y, z)
-- newByteData is zero-initialized
local data = love.data.newByteData(2 * 4)
local f = ffi.cast('float*', data:getFFIPointer())
local value = {
data = data,
f = f,
}
f[0] = x
f[1] = y
setmetatable(value, vec2)
return value
end,
load_table = function(t)
assert(#t == 2)
assert(t[1] ~= nil)
assert(t[2] ~= nil)
return vec2(t[1], t[2])
end,
set_x = function(v, value)
return vec2(value, v.f[1])
end,
set_y = function(v, value)
return vec2(v.f[0], value)
end,
get_x = function(v)
return v.f[0]
end,
get_y = function(v)
return v.f[1]
end,
__mul = function(v, s)
return vec2(v.f[0] * s,
v.f[1] * s)
end,
__add = function(v1, v2)
return vec2(v1.f[0] + v2.f[0],
v1.f[1] + v2.f[1])
end,
print = function(v)
print(tostring(v.f[0]) .. " " .. tostring(v.f[1]))
end,
}
setmetatable(vec2, vec2)
vec3 = {
__call = function(_t, x, y, z)
-- newByteData is zero-initialized
local data = love.data.newByteData(3 * 4)
local f = ffi.cast('float*', data:getFFIPointer())
value = {
local value = {
data = data,
f = f,
}
f[0] = x or 0
f[1] = y or 0
f[2] = z or 0
f[0] = x
f[1] = y
f[2] = z
setmetatable(value, vec3)
return value
end,
@ -576,6 +631,18 @@ vec3 = {
return vec3(t[1], t[2], t[3])
end,
set_x = function(v, value)
return vec3(value, v.f[1], v.f[2])
end,
set_y = function(v, value)
return vec3(v.f[0], value, v.f[2])
end,
set_z = function(v, value)
return vec3(v.f[0], v.f[1], value)
end,
replicate = function(value)
return vec3(value, value, value)
end,
@ -716,14 +783,14 @@ vec4 = {
-- newByteData is zero-initialized
local data = love.data.newByteData(4 * 4)
local f = ffi.cast('float*', data:getFFIPointer())
value = {
local value = {
data = data,
f = f,
}
f[0] = x or 0
f[1] = y or 0
f[2] = z or 0
f[3] = w or 0
f[0] = x
f[1] = y
f[2] = z
f[3] = w
setmetatable(value, vec4)
return value
end,
@ -737,6 +804,22 @@ vec4 = {
return vec4(t[1], t[2], t[3], t[4])
end,
set_x = function(v, value)
return vec4(value, v.f[1], v.f[2], v.f[3])
end,
set_y = function(v, value)
return vec4(v.f[0], value, v.f[2], v.f[3])
end,
set_z = function(v, value)
return vec4(v.f[0], v.f[1], value, v.f[3])
end,
set_w = function(v, value)
return vec4(v.f[0], v.f[1], v.f[2], value)
end,
print = function(v)
print(tostring(v.f[0]) .. " " .. tostring(v.f[1]) .. " " .. tostring(v.f[2]) .. " " .. tostring(v.f[3]))
end,

View File

@ -53,47 +53,6 @@ collada_scene = {
end
end,
node_world_transform = function(node)
local world
if node.parent_index >= 0 then
world = node_instances[node.parent_index].world
assert(world ~= nil)
else
world = mat4.identity()
end
for _, transform in ipairs(node.transforms) do
local m
if transform.type == collada_types.transform_type.LOOKAT then
assert(false)
elseif transform.type == collada_types.transform_type.MATRIX then
m = mat4.load_table(transform.matrix)
elseif transform.type == collada_types.transform_type.ROTATE then
local rotate = vec4.load_table(transform.rotate)
local w = rotate.f[3]
m = mat4.rotation_axis(rotate, scalar.convert_to_radians(w))
elseif transform.type == collada_types.transform_type.SCALE then
m = mat4.scaling_from_vector(vec3.load_table(transform.scale))
elseif transform.type == collada_types.transform_type.TRANSLATE then
m = mat4.translation_from_vector(vec3.load_table(transform.translate))
else
assert(false)
end
world = m * world
end
return world
end,
load_node_world_transforms = function(nodes)
local node_index = 0
for _, node in ipairs(nodes) do
world = collada_scene.node_world_transform(node)
node_instances[node_index] = { world = world }
node_index = node_index + 1
end
end,
set_color_or_texture = function(color_or_texture, color_uniform, sampler_uniform)
if color_or_texture.type == collada_types.color_or_texture_type.COLOR then
shader:send(color_uniform, color_or_texture.color)
@ -154,7 +113,7 @@ collada_scene = {
end
end,
draw_node = function(node_index, node, transform)
draw_node = function(node, node_instance, transform)
if node.type ~= collada_types.node_type.NODE then
return
end
@ -163,7 +122,7 @@ collada_scene = {
return
end
local world = node_instances[node_index].world
local world = node_instance.world
transform = world * transform
shader:send("world_transform", "column", world.data)
shader:send("transform", "column", transform.data)
@ -173,14 +132,15 @@ collada_scene = {
end
end,
draw_nodes = function(nodes, transform)
draw_nodes = function(node_state, transform)
love.graphics.setShader(shader)
shader:send("view_position", {-88.57101, -71.71298, 104.5738, 1.0})
shader:send("light_position", {0.0, -56.804, 58.237, 1.0})
local node_index = 0
for _, node in ipairs(nodes) do
collada_scene.draw_node(node_index, node, transform)
for _, node in ipairs(node_state.nodes) do
local node_instance = node_state.node_instances[node_index]
collada_scene.draw_node(node, node_instance, transform)
node_index = node_index + 1
end
end,
@ -189,6 +149,7 @@ collada_scene = {
return {
draw_nodes = collada_scene.draw_nodes,
load_buffers = collada_scene.load_buffers,
load_node_world_transforms = collada_scene.load_node_world_transforms,
load_node_instances = collada_scene.load_node_instances,
load_images = collada_scene.load_images,
update = collada_scene.update,
}

200
collada_scene/animate.lua Normal file
View File

@ -0,0 +1,200 @@
local _math = require '_math'
local mat4 = _math.mat4
local vec3 = _math.vec3
local vec4 = _math.vec4
local scalar = _math.scalar
local collada_types = require 'collada_types'
local fract = function(f)
return f - math.floor(f)
end
local loop = function(f, n)
return fract(f / n) * n
end
local find_frame_ix = function(source, t)
for i = 1, source.count - 1 do
if source.float_array[i] <= t and source.float_array[i+1] > t then
return i - 1 -- 0-based index
end
end
return -1
end
local linear_interpolate_iv = function(source, frame_ix, t)
local prev = source.float_array[(frame_ix + 0) * source.stride + 1]
local next = source.float_array[(frame_ix + 1) * source.stride + 1]
return (t - prev) / (next - prev)
end
local linear_interpolate_value = function(source, frame_ix, parameter_ix, iv)
local prev = source.float_array[(frame_ix + 0) * source.stride + parameter_ix + 1]
local next = source.float_array[(frame_ix + 1) * source.stride + parameter_ix + 1]
return prev + iv * (next - prev)
end
local pow3 = function(f)
return f * f * f
end
local pow2 = function(f)
return f * f
end
local bezier = function(p0, c0, c1, p1, s)
return
(p0 * pow3(1 - s))
+ (c0 * 3 * s * pow2(1 - s))
+ (c1 * 3 * pow2(s) * (1 - s))
+ (p1 * pow3(s))
end
local bezier_binary_search = function(p0, c0, c1, p1, want)
local low = 0.0
local high = 1.0
local iterations = 0
while iterations < 20 do
iterations = iterations + 1
local s = (high + low) * 0.5
local bs = bezier(p0, c0, c1, p1, s)
local t = vec2.get_x(bs)
local epsilon = 0.001
if (math.abs(t - want) < epsilon) then
return vec2.get_y(bs)
end
if t > want then
high = s
else
low = s
end
end
print(vec2.get_x(p0), vec2.get_y(p0))
print(vec2.get_x(c0), vec2.get_y(c0))
print(vec2.get_x(c1), vec2.get_y(c1))
print(vec2.get_x(p1), vec2.get_y(p1))
assert(false)
end
local tangent_index = function(source, frame_ix, parameter_ix)
local ix = frame_ix * source.stride + parameter_ix * 2
x = source.float_array[ix + 0 + 1]
y = source.float_array[ix + 1 + 1]
return {x, y}
end
local bezier_sampler = function(sampler, frame_ix, parameter_ix, t)
-- P0 is (INPUT[i] , OUTPUT[i])
-- C0 (or T0) is (OUT_TANGENT[i][0] , OUT_TANGENT[i][1])
-- C1 (or T1) is (IN_TANGENT[i+1][0], IN_TANGENT[i+1][1])
-- P1 is (INPUT[i+1], OUTPUT[i+1])
local frame0_input = sampler.input.float_array[frame_ix + 0 + 1]
local frame1_input = sampler.input.float_array[frame_ix + 1 + 1]
local frame0_output = sampler.output.float_array[(frame_ix + 0) * sampler.output.stride + parameter_ix + 1]
local frame1_output = sampler.output.float_array[(frame_ix + 1) * sampler.output.stride + parameter_ix + 1]
local p0 = vec2(frame0_input, frame0_output)
local c0 = vec2.load_table(tangent_index(sampler.out_tangent, frame_ix + 0, parameter_ix))
local c1 = vec2.load_table(tangent_index(sampler.in_tangent, frame_ix + 1, parameter_ix))
local p1 = vec2(frame1_input, frame1_output)
return bezier_binary_search(p0, c0, c1, p1, t)
end
local apply_transform_target = function(transform, channel_target_attribute, value)
if transform.type == collada_types.transform_type.TRANSLATE or transform.type == collada_types.transform_type.SCALE then
if channel_target_attribute == collada_types.target_attribute.X then
transform.value = vec3.set_x(transform.value, value)
elseif channel_target_attribute == collada_types.target_attribute.Y then
transform.value = vec3.set_y(transform.value, value)
elseif channel_target_attribute == collada_types.target_attribute.Z then
transform.value = vec3.set_z(transform.value, value)
else
assert(false)
end
elseif transform.type == collada_types.transform_type.ROTATE then
if channel_target_attribute == collada_types.target_attribute.X then
transform.value = vec4.set_x(transform.value, value)
elseif channel_target_attribute == collada_types.target_attribute.Y then
transform.value = vec4.set_y(transform.value, value)
elseif channel_target_attribute == collada_types.target_attribute.Z then
transform.value = vec4.set_z(transform.value, value)
elseif channel_target_attribute == collada_types.target_attribute.ANGLE then
transform.value = vec4.set_w(transform.value, value)
else
assert(false)
end
else
assert(false)
end
end
local animate_channel_segment = function(channel, transform, frame_ix, t)
local target_attributes = {channel.target_attribute}
if channel.target_attribute == collada_types.target_attribute.ALL then
if transform.type == collada_types.transform_type.TRANSLATE or transform.type == collada_types.transform_type.SCALE then
target_attributes = translate_scale_target_attributes
elseif transform.type == collada_types.transform_type.ROTATE then
target_attributes = rotate_target_attributes
else
assert(false)
end
end
target_attributes_count = #target_attributes
-- parameter_ix: 0-based index
for parameter_ix = 0, target_attributes_count-1 do
local interpolation = channel.source_sampler.interpolation.interpolation_array[frame_ix]
local value
if interpolation == collada_types.interpolation.BEZIER then
value = bezier_sampler(channel.source_sampler, frame_ix, parameter_ix, t)
else
local iv = linear_interpolate_iv(channel.source_sampler.input, frame_ix, t)
value = linear_interpolate_value(channel.source_sampler.output, frame_ix, parameter_ix, iv)
end
apply_transform_target(transform, target_attributes[parameter_ix + 1], value)
end
end
local animate_node = function(node, node_instance, t)
for _, channel in ipairs(node.channels) do
local transform = node_instance.transforms[channel.target_transform_index]
assert(transform ~= nil)
-- frame_ix: 0-based index
local frame_ix = find_frame_ix(channel.source_sampler.input, t)
assert(frame_ix >= 0)
animate_channel_segment(channel, transform, frame_ix, t)
end
end
local update = function(_t, node_state)
local t = loop(_t / 2.0, 3.333333)
local node_index = 0
for _, node in ipairs(node_state.nodes) do
node_instance = node_state.node_instances[node_index]
animate_node(node, node_instance, t)
local world = node_state:node_instance_world(node, node_instance.transforms)
node_instance.world = world
node_index = node_index + 1
end
end
return {
update = update,
}

View File

@ -0,0 +1,116 @@
local _math = require '_math'
local mat4 = _math.mat4
local vec3 = _math.vec3
local vec4 = _math.vec4
local scalar = _math.scalar
local collada_types = require 'collada_types'
local load_transform = function(transform)
if transform.type == collada_types.transform_type.LOOKAT then
assert(false)
elseif transform.type == collada_types.transform_type.MATRIX then
return mat4.load_table(transform.matrix)
elseif transform.type == collada_types.transform_type.ROTATE then
return vec4.load_table(transform.rotate)
elseif transform.type == collada_types.transform_type.SCALE then
return vec3.load_table(transform.scale)
elseif transform.type == collada_types.transform_type.TRANSLATE then
return vec3.load_table(transform.translate)
else
assert(false)
end
end
local transform_matrix = function (loaded_transform)
local type = loaded_transform.type
local value = loaded_transform.value
if type == collada_types.transform_type.LOOKAT then
assert(false)
elseif type == collada_types.transform_type.MATRIX then
return value
elseif type == collada_types.transform_type.ROTATE then
return mat4.rotation_axis(value, scalar.convert_to_radians(value.f[3]))
elseif type == collada_types.transform_type.SCALE then
return mat4.scaling_from_vector(value)
elseif type == collada_types.transform_type.TRANSLATE then
return mat4.translation_from_vector(value)
else
assert(false)
end
end
local instance_transforms_from_node = function(node)
local transforms = {}
local transform_index = 0
for _, transform in ipairs(node.transforms) do
local value = load_transform(transform)
local loaded_transform = {
type = transform.type,
value = value,
}
transforms[transform_index] = loaded_transform
transform_index = transform_index + 1
end
return transforms
end
local collada_scene_node_state
collada_scene_node_state = {
__index = {
node_instance_world = function(this, node, transforms)
local world
if node.parent_index >= 0 then
world = this.node_instances[node.parent_index].world
assert(world ~= nil)
else
world = mat4.identity()
end
local transforms_count = #node.transforms
local transform_index = 0
while transform_index < transforms_count do
local m = transform_matrix(transforms[transform_index])
world = m * world
transform_index = transform_index + 1
end
return world
end,
node_instance_new = function(this, node)
local transforms = instance_transforms_from_node(node)
local world = this:node_instance_world(node, transforms)
local node_instance = {
transforms = transforms,
transforms_count = transforms_count,
world = world,
}
return node_instance
end,
node_instances_new = function(this, nodes)
local node_index = 0
for _, node in ipairs(nodes) do
local node_instance = this:node_instance_new(node)
this.node_instances[node_index] = node_instance
node_index = node_index + 1
end
end,
},
__call = function(_t, nodes)
local value = {
nodes = nodes,
node_instances = {},
}
setmetatable(value, collada_scene_node_state)
value:node_instances_new(nodes)
return value
end,
}
setmetatable(collada_scene_node_state, collada_scene_node_state)
return collada_scene_node_state

View File

@ -67,6 +67,19 @@ local target_attribute = {
ALL = {}
}
local rotate_target_attributes = {
target_attribute.X,
target_attribute.Y,
target_attribute.Z,
target_attribute.ANGLE,
}
local translate_scale_target_attributes = {
target_attribute.X,
target_attribute.Y,
target_attribute.Z,
}
return {
input_format = input_format,
light_type = light_type,
@ -76,4 +89,6 @@ return {
node_type = node_type,
interpolation = interpolation,
target_attribute = target_attribute,
rotate_target_attributes = rotate_target_attributes,
translate_scale_target_attributes = translate_scale_target_attributes,
}

View File

@ -9,16 +9,22 @@ local vec4 = _math.vec4
local scalar = _math.scalar
local scene_test = require 'scene.test.test'
local collada_scene = require 'collada_scene'
local collada_scene_animate = require 'collada_scene.animate'
local collada_scene_node_state = require 'collada_scene.node_state'
local node_state
function love.load(args)
love.window.setMode(1024, 1024, {depth=true})
collada_scene.load_buffers()
collada_scene.load_node_world_transforms(scene_test.descriptor.nodes)
collada_scene.load_images("scene/test", scene_test.descriptor.images)
node_state = collada_scene_node_state(scene_test.descriptor.nodes)
end
local rotation = 0.0
local t = 0.0
function love.draw()
local radius = 100
@ -26,10 +32,6 @@ function love.draw()
width, height = love.graphics.getDimensions()
-- local projection = mat4.perspective_rh(width / width * 0.1,
-- height / width * 0.1,
-- 0.1,
-- 1000.0)
local aspect_ratio = width / height
local projection = mat4.perspective_fov_rh(scalar.convert_to_radians(45 / 2),
aspect_ratio,
@ -46,6 +48,9 @@ function love.draw()
local transform = view * projection
collada_scene_animate.update(t, node_state)
t = t + 0.016
love.graphics.setDepthMode("less", true)
collada_scene.draw_nodes(scene_test.descriptor.nodes, transform)
collada_scene.draw_nodes(node_state, transform)
end

View File

@ -6,8 +6,8 @@
<authoring_tool>OpenCOLLADA for 3ds Max; Version: 1.6; Revision: 68</authoring_tool>
<source_data>file:///C:/Users/bilbo/Documents/wood/scenes/test/test.max</source_data>
</contributor>
<created>2026-02-23T22:42:05</created>
<modified>2026-02-23T22:42:05</modified>
<created>2026-02-24T13:10:30</created>
<modified>2026-02-24T13:10:30</modified>
<unit name="inch" meter="0.0254"/>
<up_axis>Z_UP</up_axis>
</asset>
@ -422,7 +422,7 @@
</extra>
</node>
<node id="node-Torus_Knot23" name="Torus_Knot23">
<translate>-21.94384 -1.68812e-14 45.45129</translate>
<translate sid="translation">-21.94384 -1.68812e-14 45.45129</translate>
<rotate>-1 -2.22051e-16 -2.22051e-16 -90</rotate>
<scale>0.5458366 0.5458366 0.5458366</scale>
<instance_geometry url="#geom-Torus_Knot23">
@ -443,7 +443,9 @@
</node>
<node id="node-TorusKnot25" name="TorusKnot25">
<translate>3.281013 -28.30101 45.45129</translate>
<rotate>0.9075136 -0.007434183 0.4199569 -178.1592</rotate>
<rotate sid="rotationZ">0 0 1 -2.386906</rotate>
<rotate sid="rotationY">0 1 0 -49.62295</rotate>
<rotate sid="rotationX">1 0 0 -176.868</rotate>
<rotate>0.9893375 0 0.1456411 -1.382112</rotate>
<scale>0.5458366 0.5458367 0.5458366</scale>
<rotate>0.9893375 0 0.1456411 1.382112</rotate>
@ -522,6 +524,310 @@
</node>
</visual_scene>
</library_visual_scenes>
<library_animations>
<animation>
<source id="node-Torus_Knot23_translation.X-input">
<float_array id="node-Torus_Knot23_translation.X-input-array" count="5">0 1 2 3 3.333333</float_array>
<technique_common>
<accessor source="#node-Torus_Knot23_translation.X-input-array" count="5" stride="1">
<param name="TIME" type="float"/>
</accessor>
</technique_common>
</source>
<source id="node-Torus_Knot23_translation.X-output">
<float_array id="node-Torus_Knot23_translation.X-output-array" count="5">-21.94384 17.57915 40.64392 -0.591423 -21.94384</float_array>
<technique_common>
<accessor source="#node-Torus_Knot23_translation.X-output-array" count="5" stride="1">
<param name="X" type="float"/>
</accessor>
</technique_common>
</source>
<source id="node-Torus_Knot23_translation.X-intangent">
<float_array id="node-Torus_Knot23_translation.X-intangent-array" count="10">-0.3329306 -21.94384 0.667 7.158293 1.667 40.64392 2.667 15.03987 3.222333 -21.94384</float_array>
<technique_common>
<accessor source="#node-Torus_Knot23_translation.X-intangent-array" count="5" stride="2">
<param name="X" type="float"/>
<param name="Y" type="float"/>
</accessor>
</technique_common>
</source>
<source id="node-Torus_Knot23_translation.X-outtangent">
<float_array id="node-Torus_Knot23_translation.X-outtangent-array" count="10">0.333 -21.94384 1.333 28.00002 2.333 40.64392 3.111 -5.801854 3.666264 -21.94384</float_array>
<technique_common>
<accessor source="#node-Torus_Knot23_translation.X-outtangent-array" count="5" stride="2">
<param name="X" type="float"/>
<param name="Y" type="float"/>
</accessor>
</technique_common>
</source>
<source id="node-Torus_Knot23_translation.X-interpolation">
<Name_array id="node-Torus_Knot23_translation.X-interpolation-array" count="5">BEZIER BEZIER BEZIER BEZIER BEZIER</Name_array>
<technique_common>
<accessor source="#node-Torus_Knot23_translation.X-interpolation-array" count="5" stride="1">
<param name="INTERPOLATION" type="name"/>
</accessor>
</technique_common>
</source>
<source id="node-Torus_Knot23_translation.Y-input">
<float_array id="node-Torus_Knot23_translation.Y-input-array" count="5">0 1 2 3 3.333333</float_array>
<technique_common>
<accessor source="#node-Torus_Knot23_translation.Y-input-array" count="5" stride="1">
<param name="TIME" type="float"/>
</accessor>
</technique_common>
</source>
<source id="node-Torus_Knot23_translation.Y-output">
<float_array id="node-Torus_Knot23_translation.Y-output-array" count="5">-1.68812e-14 24.27013 -12.4935 9.835234 -1.68812e-14</float_array>
<technique_common>
<accessor source="#node-Torus_Knot23_translation.Y-output-array" count="5" stride="1">
<param name="Y" type="float"/>
</accessor>
</technique_common>
</source>
<source id="node-Torus_Knot23_translation.Y-intangent">
<float_array id="node-Torus_Knot23_translation.Y-intangent-array" count="10">-0.3329306 -1.68812e-14 0.667 24.27013 1.667 -12.4935 2.667 9.835234 3.222333 -1.68812e-14</float_array>
<technique_common>
<accessor source="#node-Torus_Knot23_translation.Y-intangent-array" count="5" stride="2">
<param name="X" type="float"/>
<param name="Y" type="float"/>
</accessor>
</technique_common>
</source>
<source id="node-Torus_Knot23_translation.Y-outtangent">
<float_array id="node-Torus_Knot23_translation.Y-outtangent-array" count="10">0.333 -1.68812e-14 1.333 24.27013 2.333 -12.4935 3.111 9.835234 3.666264 -1.68812e-14</float_array>
<technique_common>
<accessor source="#node-Torus_Knot23_translation.Y-outtangent-array" count="5" stride="2">
<param name="X" type="float"/>
<param name="Y" type="float"/>
</accessor>
</technique_common>
</source>
<source id="node-Torus_Knot23_translation.Y-interpolation">
<Name_array id="node-Torus_Knot23_translation.Y-interpolation-array" count="5">BEZIER BEZIER BEZIER BEZIER BEZIER</Name_array>
<technique_common>
<accessor source="#node-Torus_Knot23_translation.Y-interpolation-array" count="5" stride="1">
<param name="INTERPOLATION" type="name"/>
</accessor>
</technique_common>
</source>
<source id="node-Torus_Knot23_translation.Z-input">
<float_array id="node-Torus_Knot23_translation.Z-input-array" count="5">0 1 2 3 3.333333</float_array>
<technique_common>
<accessor source="#node-Torus_Knot23_translation.Z-input-array" count="5" stride="1">
<param name="TIME" type="float"/>
</accessor>
</technique_common>
</source>
<source id="node-Torus_Knot23_translation.Z-output">
<float_array id="node-Torus_Knot23_translation.Z-output-array" count="5">45.45129 45.45129 45.45129 45.45129 45.45129</float_array>
<technique_common>
<accessor source="#node-Torus_Knot23_translation.Z-output-array" count="5" stride="1">
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="node-Torus_Knot23_translation.Z-intangent">
<float_array id="node-Torus_Knot23_translation.Z-intangent-array" count="10">-0.3329306 45.45129 0.667 45.45129 1.667 45.45129 2.667 45.45129 3.222333 45.45129</float_array>
<technique_common>
<accessor source="#node-Torus_Knot23_translation.Z-intangent-array" count="5" stride="2">
<param name="X" type="float"/>
<param name="Y" type="float"/>
</accessor>
</technique_common>
</source>
<source id="node-Torus_Knot23_translation.Z-outtangent">
<float_array id="node-Torus_Knot23_translation.Z-outtangent-array" count="10">0.333 45.45129 1.333 45.45129 2.333 45.45129 3.111 45.45129 3.666264 45.45129</float_array>
<technique_common>
<accessor source="#node-Torus_Knot23_translation.Z-outtangent-array" count="5" stride="2">
<param name="X" type="float"/>
<param name="Y" type="float"/>
</accessor>
</technique_common>
</source>
<source id="node-Torus_Knot23_translation.Z-interpolation">
<Name_array id="node-Torus_Knot23_translation.Z-interpolation-array" count="5">BEZIER BEZIER BEZIER BEZIER BEZIER</Name_array>
<technique_common>
<accessor source="#node-Torus_Knot23_translation.Z-interpolation-array" count="5" stride="1">
<param name="INTERPOLATION" type="name"/>
</accessor>
</technique_common>
</source>
<source id="node-TorusKnot25_rotationZ.ANGLE-input">
<float_array id="node-TorusKnot25_rotationZ.ANGLE-input-array" count="7">0 0.5 1 1.5 2 2.5 3.333333</float_array>
<technique_common>
<accessor source="#node-TorusKnot25_rotationZ.ANGLE-input-array" count="7" stride="1">
<param name="TIME" type="float"/>
</accessor>
</technique_common>
</source>
<source id="node-TorusKnot25_rotationZ.ANGLE-output">
<float_array id="node-TorusKnot25_rotationZ.ANGLE-output-array" count="7">-2.386905 -47.8331 -59.67817 -40.14935 -120.2731 -163.7238 -2.386905</float_array>
<technique_common>
<accessor source="#node-TorusKnot25_rotationZ.ANGLE-output-array" count="7" stride="1">
<param name="ANGLE" type="float"/>
</accessor>
</technique_common>
</source>
<source id="node-TorusKnot25_rotationZ.ANGLE-intangent">
<float_array id="node-TorusKnot25_rotationZ.ANGLE-intangent-array" count="14">-0.3329306 -2.386905 0.3335 -38.2941 0.8335 -59.67817 1.3335 -40.14935 1.8335 -99.69791 2.3335 -163.7238 3.055833 -2.386905</float_array>
<technique_common>
<accessor source="#node-TorusKnot25_rotationZ.ANGLE-intangent-array" count="7" stride="2">
<param name="X" type="float"/>
<param name="Y" type="float"/>
</accessor>
</technique_common>
</source>
<source id="node-TorusKnot25_rotationZ.ANGLE-outtangent">
<float_array id="node-TorusKnot25_rotationZ.ANGLE-outtangent-array" count="14">0.1665 -2.386905 0.6665 -57.37209 1.1665 -59.67817 1.6665 -40.14935 2.1665 -140.8482 2.7775 -163.7238 3.666264 -2.386905</float_array>
<technique_common>
<accessor source="#node-TorusKnot25_rotationZ.ANGLE-outtangent-array" count="7" stride="2">
<param name="X" type="float"/>
<param name="Y" type="float"/>
</accessor>
</technique_common>
</source>
<source id="node-TorusKnot25_rotationZ.ANGLE-interpolation">
<Name_array id="node-TorusKnot25_rotationZ.ANGLE-interpolation-array" count="7">BEZIER BEZIER BEZIER BEZIER BEZIER BEZIER BEZIER</Name_array>
<technique_common>
<accessor source="#node-TorusKnot25_rotationZ.ANGLE-interpolation-array" count="7" stride="1">
<param name="INTERPOLATION" type="name"/>
</accessor>
</technique_common>
</source>
<source id="node-TorusKnot25_rotationY.ANGLE-input">
<float_array id="node-TorusKnot25_rotationY.ANGLE-input-array" count="7">0 0.5 1 1.5 2 2.5 3.333333</float_array>
<technique_common>
<accessor source="#node-TorusKnot25_rotationY.ANGLE-input-array" count="7" stride="1">
<param name="TIME" type="float"/>
</accessor>
</technique_common>
</source>
<source id="node-TorusKnot25_rotationY.ANGLE-output">
<float_array id="node-TorusKnot25_rotationY.ANGLE-output-array" count="7">-49.62293 -15.37984 34.11597 -56.85069 -56.85069 -170.1778 -49.62293</float_array>
<technique_common>
<accessor source="#node-TorusKnot25_rotationY.ANGLE-output-array" count="7" stride="1">
<param name="ANGLE" type="float"/>
</accessor>
</technique_common>
</source>
<source id="node-TorusKnot25_rotationY.ANGLE-intangent">
<float_array id="node-TorusKnot25_rotationY.ANGLE-intangent-array" count="14">-0.3329306 -49.62293 0.3335 -29.32237 0.8335 34.11597 1.3335 -56.85069 1.8335 -56.85069 2.3335 -170.1778 3.055833 -49.62293</float_array>
<technique_common>
<accessor source="#node-TorusKnot25_rotationY.ANGLE-intangent-array" count="7" stride="2">
<param name="X" type="float"/>
<param name="Y" type="float"/>
</accessor>
</technique_common>
</source>
<source id="node-TorusKnot25_rotationY.ANGLE-outtangent">
<float_array id="node-TorusKnot25_rotationY.ANGLE-outtangent-array" count="14">0.1665 -49.62293 0.6665 -1.437308 1.1665 34.11597 1.6665 -56.85069 2.1665 -56.85069 2.7775 -170.1778 3.666264 -49.62293</float_array>
<technique_common>
<accessor source="#node-TorusKnot25_rotationY.ANGLE-outtangent-array" count="7" stride="2">
<param name="X" type="float"/>
<param name="Y" type="float"/>
</accessor>
</technique_common>
</source>
<source id="node-TorusKnot25_rotationY.ANGLE-interpolation">
<Name_array id="node-TorusKnot25_rotationY.ANGLE-interpolation-array" count="7">BEZIER BEZIER BEZIER BEZIER BEZIER BEZIER BEZIER</Name_array>
<technique_common>
<accessor source="#node-TorusKnot25_rotationY.ANGLE-interpolation-array" count="7" stride="1">
<param name="INTERPOLATION" type="name"/>
</accessor>
</technique_common>
</source>
<source id="node-TorusKnot25_rotationX.ANGLE-input">
<float_array id="node-TorusKnot25_rotationX.ANGLE-input-array" count="7">0 0.5 1 1.5 2 2.5 3.333333</float_array>
<technique_common>
<accessor source="#node-TorusKnot25_rotationX.ANGLE-input-array" count="7" stride="1">
<param name="TIME" type="float"/>
</accessor>
</technique_common>
</source>
<source id="node-TorusKnot25_rotationX.ANGLE-output">
<float_array id="node-TorusKnot25_rotationX.ANGLE-output-array" count="7">183.132 256.4932 196.3711 133.4248 133.4248 152.3479 183.132</float_array>
<technique_common>
<accessor source="#node-TorusKnot25_rotationX.ANGLE-output-array" count="7" stride="1">
<param name="ANGLE" type="float"/>
</accessor>
</technique_common>
</source>
<source id="node-TorusKnot25_rotationX.ANGLE-intangent">
<float_array id="node-TorusKnot25_rotationX.ANGLE-intangent-array" count="14">-0.3329306 183.132 0.3335 256.4932 0.8335 216.862 1.3335 133.4248 1.8335 133.4248 2.3335 146.1407 3.055833 183.132</float_array>
<technique_common>
<accessor source="#node-TorusKnot25_rotationX.ANGLE-intangent-array" count="7" stride="2">
<param name="X" type="float"/>
<param name="Y" type="float"/>
</accessor>
</technique_common>
</source>
<source id="node-TorusKnot25_rotationX.ANGLE-outtangent">
<float_array id="node-TorusKnot25_rotationX.ANGLE-outtangent-array" count="14">0.1665 183.132 0.6665 256.4932 1.1665 175.8802 1.6665 133.4248 2.1665 133.4248 2.7775 162.6932 3.666264 183.132</float_array>
<technique_common>
<accessor source="#node-TorusKnot25_rotationX.ANGLE-outtangent-array" count="7" stride="2">
<param name="X" type="float"/>
<param name="Y" type="float"/>
</accessor>
</technique_common>
</source>
<source id="node-TorusKnot25_rotationX.ANGLE-interpolation">
<Name_array id="node-TorusKnot25_rotationX.ANGLE-interpolation-array" count="7">BEZIER BEZIER BEZIER BEZIER BEZIER BEZIER BEZIER</Name_array>
<technique_common>
<accessor source="#node-TorusKnot25_rotationX.ANGLE-interpolation-array" count="7" stride="1">
<param name="INTERPOLATION" type="name"/>
</accessor>
</technique_common>
</source>
<sampler id="node-Torus_Knot23_translation.X-sampler">
<input semantic="INPUT" source="#node-Torus_Knot23_translation.X-input"/>
<input semantic="OUTPUT" source="#node-Torus_Knot23_translation.X-output"/>
<input semantic="IN_TANGENT" source="#node-Torus_Knot23_translation.X-intangent"/>
<input semantic="OUT_TANGENT" source="#node-Torus_Knot23_translation.X-outtangent"/>
<input semantic="INTERPOLATION" source="#node-Torus_Knot23_translation.X-interpolation"/>
</sampler>
<sampler id="node-Torus_Knot23_translation.Y-sampler">
<input semantic="INPUT" source="#node-Torus_Knot23_translation.Y-input"/>
<input semantic="OUTPUT" source="#node-Torus_Knot23_translation.Y-output"/>
<input semantic="IN_TANGENT" source="#node-Torus_Knot23_translation.Y-intangent"/>
<input semantic="OUT_TANGENT" source="#node-Torus_Knot23_translation.Y-outtangent"/>
<input semantic="INTERPOLATION" source="#node-Torus_Knot23_translation.Y-interpolation"/>
</sampler>
<sampler id="node-Torus_Knot23_translation.Z-sampler">
<input semantic="INPUT" source="#node-Torus_Knot23_translation.Z-input"/>
<input semantic="OUTPUT" source="#node-Torus_Knot23_translation.Z-output"/>
<input semantic="IN_TANGENT" source="#node-Torus_Knot23_translation.Z-intangent"/>
<input semantic="OUT_TANGENT" source="#node-Torus_Knot23_translation.Z-outtangent"/>
<input semantic="INTERPOLATION" source="#node-Torus_Knot23_translation.Z-interpolation"/>
</sampler>
<sampler id="node-TorusKnot25_rotationZ.ANGLE-sampler">
<input semantic="INPUT" source="#node-TorusKnot25_rotationZ.ANGLE-input"/>
<input semantic="OUTPUT" source="#node-TorusKnot25_rotationZ.ANGLE-output"/>
<input semantic="IN_TANGENT" source="#node-TorusKnot25_rotationZ.ANGLE-intangent"/>
<input semantic="OUT_TANGENT" source="#node-TorusKnot25_rotationZ.ANGLE-outtangent"/>
<input semantic="INTERPOLATION" source="#node-TorusKnot25_rotationZ.ANGLE-interpolation"/>
</sampler>
<sampler id="node-TorusKnot25_rotationY.ANGLE-sampler">
<input semantic="INPUT" source="#node-TorusKnot25_rotationY.ANGLE-input"/>
<input semantic="OUTPUT" source="#node-TorusKnot25_rotationY.ANGLE-output"/>
<input semantic="IN_TANGENT" source="#node-TorusKnot25_rotationY.ANGLE-intangent"/>
<input semantic="OUT_TANGENT" source="#node-TorusKnot25_rotationY.ANGLE-outtangent"/>
<input semantic="INTERPOLATION" source="#node-TorusKnot25_rotationY.ANGLE-interpolation"/>
</sampler>
<sampler id="node-TorusKnot25_rotationX.ANGLE-sampler">
<input semantic="INPUT" source="#node-TorusKnot25_rotationX.ANGLE-input"/>
<input semantic="OUTPUT" source="#node-TorusKnot25_rotationX.ANGLE-output"/>
<input semantic="IN_TANGENT" source="#node-TorusKnot25_rotationX.ANGLE-intangent"/>
<input semantic="OUT_TANGENT" source="#node-TorusKnot25_rotationX.ANGLE-outtangent"/>
<input semantic="INTERPOLATION" source="#node-TorusKnot25_rotationX.ANGLE-interpolation"/>
</sampler>
<channel source="#node-Torus_Knot23_translation.X-sampler" target="node-Torus_Knot23/translation.X"/>
<channel source="#node-Torus_Knot23_translation.Y-sampler" target="node-Torus_Knot23/translation.Y"/>
<channel source="#node-Torus_Knot23_translation.Z-sampler" target="node-Torus_Knot23/translation.Z"/>
<channel source="#node-TorusKnot25_rotationZ.ANGLE-sampler" target="node-TorusKnot25/rotationZ.ANGLE"/>
<channel source="#node-TorusKnot25_rotationY.ANGLE-sampler" target="node-TorusKnot25/rotationY.ANGLE"/>
<channel source="#node-TorusKnot25_rotationX.ANGLE-sampler" target="node-TorusKnot25/rotationX.ANGLE"/>
</animation>
</library_animations>
<scene>
<instance_visual_scene url="#MaxScene"/>
</scene>

View File

@ -15,6 +15,468 @@ local light_omni001_light = {
type = collada_types.light_type.POINT,
color = {1.0, 1.0, 1.0},
}
local array_node_torus_knot23_translation_x_input_array = {
0.0,
1.0,
2.0,
3.0,
3.333333,
}
local array_node_torus_knot23_translation_x_output_array = {
-21.94384,
17.57915,
40.64392,
-0.591423,
-21.94384,
}
local array_node_torus_knot23_translation_x_intangent_array = {
-0.3329306, -21.94384,
0.667, 7.158293,
1.667, 40.64392,
2.667, 15.03987,
3.222333, -21.94384,
}
local array_node_torus_knot23_translation_x_outtangent_array = {
0.333, -21.94384,
1.333, 28.00002,
2.333, 40.64392,
3.111, -5.801854,
3.666264, -21.94384,
}
local array_node_torus_knot23_translation_x_interpolation_array = {
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
}
local sampler_node_torus_knot23_translation_x_sampler = {
-- node_torus_knot23_translation_x_input
input = {
float_array = array_node_torus_knot23_translation_x_input_array,
count = 5,
stride = 1,
},
-- node_torus_knot23_translation_x_output
output = {
float_array = array_node_torus_knot23_translation_x_output_array,
count = 5,
stride = 1,
},
-- node_torus_knot23_translation_x_intangent
in_tangent = {
float_array = array_node_torus_knot23_translation_x_intangent_array,
count = 5,
stride = 2,
},
-- node_torus_knot23_translation_x_outtangent
out_tangent = {
float_array = array_node_torus_knot23_translation_x_outtangent_array,
count = 5,
stride = 2,
},
-- node_torus_knot23_translation_x_interpolation
interpolation = {
interpolation_array = array_node_torus_knot23_translation_x_interpolation_array,
count = 5,
stride = 1,
},
}
local array_node_torus_knot23_translation_y_input_array = {
0.0,
1.0,
2.0,
3.0,
3.333333,
}
local array_node_torus_knot23_translation_y_output_array = {
-1.68812e-14,
24.27013,
-12.4935,
9.835234,
-1.68812e-14,
}
local array_node_torus_knot23_translation_y_intangent_array = {
-0.3329306, -1.68812e-14,
0.667, 24.27013,
1.667, -12.4935,
2.667, 9.835234,
3.222333, -1.68812e-14,
}
local array_node_torus_knot23_translation_y_outtangent_array = {
0.333, -1.68812e-14,
1.333, 24.27013,
2.333, -12.4935,
3.111, 9.835234,
3.666264, -1.68812e-14,
}
local array_node_torus_knot23_translation_y_interpolation_array = {
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
}
local sampler_node_torus_knot23_translation_y_sampler = {
-- node_torus_knot23_translation_y_input
input = {
float_array = array_node_torus_knot23_translation_y_input_array,
count = 5,
stride = 1,
},
-- node_torus_knot23_translation_y_output
output = {
float_array = array_node_torus_knot23_translation_y_output_array,
count = 5,
stride = 1,
},
-- node_torus_knot23_translation_y_intangent
in_tangent = {
float_array = array_node_torus_knot23_translation_y_intangent_array,
count = 5,
stride = 2,
},
-- node_torus_knot23_translation_y_outtangent
out_tangent = {
float_array = array_node_torus_knot23_translation_y_outtangent_array,
count = 5,
stride = 2,
},
-- node_torus_knot23_translation_y_interpolation
interpolation = {
interpolation_array = array_node_torus_knot23_translation_y_interpolation_array,
count = 5,
stride = 1,
},
}
local array_node_torus_knot23_translation_z_input_array = {
0.0,
1.0,
2.0,
3.0,
3.333333,
}
local array_node_torus_knot23_translation_z_output_array = {
45.45129,
45.45129,
45.45129,
45.45129,
45.45129,
}
local array_node_torus_knot23_translation_z_intangent_array = {
-0.3329306, 45.45129,
0.667, 45.45129,
1.667, 45.45129,
2.667, 45.45129,
3.222333, 45.45129,
}
local array_node_torus_knot23_translation_z_outtangent_array = {
0.333, 45.45129,
1.333, 45.45129,
2.333, 45.45129,
3.111, 45.45129,
3.666264, 45.45129,
}
local array_node_torus_knot23_translation_z_interpolation_array = {
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
}
local sampler_node_torus_knot23_translation_z_sampler = {
-- node_torus_knot23_translation_z_input
input = {
float_array = array_node_torus_knot23_translation_z_input_array,
count = 5,
stride = 1,
},
-- node_torus_knot23_translation_z_output
output = {
float_array = array_node_torus_knot23_translation_z_output_array,
count = 5,
stride = 1,
},
-- node_torus_knot23_translation_z_intangent
in_tangent = {
float_array = array_node_torus_knot23_translation_z_intangent_array,
count = 5,
stride = 2,
},
-- node_torus_knot23_translation_z_outtangent
out_tangent = {
float_array = array_node_torus_knot23_translation_z_outtangent_array,
count = 5,
stride = 2,
},
-- node_torus_knot23_translation_z_interpolation
interpolation = {
interpolation_array = array_node_torus_knot23_translation_z_interpolation_array,
count = 5,
stride = 1,
},
}
local array_node_torusknot25_rotationz_angle_input_array = {
0.0,
0.5,
1.0,
1.5,
2.0,
2.5,
3.333333,
}
local array_node_torusknot25_rotationz_angle_output_array = {
-2.386905,
-47.8331,
-59.67817,
-40.14935,
-120.2731,
-163.7238,
-2.386905,
}
local array_node_torusknot25_rotationz_angle_intangent_array = {
-0.3329306, -2.386905,
0.3335, -38.2941,
0.8335, -59.67817,
1.3335, -40.14935,
1.8335, -99.69791,
2.3335, -163.7238,
3.055833, -2.386905,
}
local array_node_torusknot25_rotationz_angle_outtangent_array = {
0.1665, -2.386905,
0.6665, -57.37209,
1.1665, -59.67817,
1.6665, -40.14935,
2.1665, -140.8482,
2.7775, -163.7238,
3.666264, -2.386905,
}
local array_node_torusknot25_rotationz_angle_interpolation_array = {
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
}
local sampler_node_torusknot25_rotationz_angle_sampler = {
-- node_torusknot25_rotationz_angle_input
input = {
float_array = array_node_torusknot25_rotationz_angle_input_array,
count = 7,
stride = 1,
},
-- node_torusknot25_rotationz_angle_output
output = {
float_array = array_node_torusknot25_rotationz_angle_output_array,
count = 7,
stride = 1,
},
-- node_torusknot25_rotationz_angle_intangent
in_tangent = {
float_array = array_node_torusknot25_rotationz_angle_intangent_array,
count = 7,
stride = 2,
},
-- node_torusknot25_rotationz_angle_outtangent
out_tangent = {
float_array = array_node_torusknot25_rotationz_angle_outtangent_array,
count = 7,
stride = 2,
},
-- node_torusknot25_rotationz_angle_interpolation
interpolation = {
interpolation_array = array_node_torusknot25_rotationz_angle_interpolation_array,
count = 7,
stride = 1,
},
}
local array_node_torusknot25_rotationy_angle_input_array = {
0.0,
0.5,
1.0,
1.5,
2.0,
2.5,
3.333333,
}
local array_node_torusknot25_rotationy_angle_output_array = {
-49.62293,
-15.37984,
34.11597,
-56.85069,
-56.85069,
-170.1778,
-49.62293,
}
local array_node_torusknot25_rotationy_angle_intangent_array = {
-0.3329306, -49.62293,
0.3335, -29.32237,
0.8335, 34.11597,
1.3335, -56.85069,
1.8335, -56.85069,
2.3335, -170.1778,
3.055833, -49.62293,
}
local array_node_torusknot25_rotationy_angle_outtangent_array = {
0.1665, -49.62293,
0.6665, -1.437308,
1.1665, 34.11597,
1.6665, -56.85069,
2.1665, -56.85069,
2.7775, -170.1778,
3.666264, -49.62293,
}
local array_node_torusknot25_rotationy_angle_interpolation_array = {
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
}
local sampler_node_torusknot25_rotationy_angle_sampler = {
-- node_torusknot25_rotationy_angle_input
input = {
float_array = array_node_torusknot25_rotationy_angle_input_array,
count = 7,
stride = 1,
},
-- node_torusknot25_rotationy_angle_output
output = {
float_array = array_node_torusknot25_rotationy_angle_output_array,
count = 7,
stride = 1,
},
-- node_torusknot25_rotationy_angle_intangent
in_tangent = {
float_array = array_node_torusknot25_rotationy_angle_intangent_array,
count = 7,
stride = 2,
},
-- node_torusknot25_rotationy_angle_outtangent
out_tangent = {
float_array = array_node_torusknot25_rotationy_angle_outtangent_array,
count = 7,
stride = 2,
},
-- node_torusknot25_rotationy_angle_interpolation
interpolation = {
interpolation_array = array_node_torusknot25_rotationy_angle_interpolation_array,
count = 7,
stride = 1,
},
}
local array_node_torusknot25_rotationx_angle_input_array = {
0.0,
0.5,
1.0,
1.5,
2.0,
2.5,
3.333333,
}
local array_node_torusknot25_rotationx_angle_output_array = {
183.132,
256.4932,
196.3711,
133.4248,
133.4248,
152.3479,
183.132,
}
local array_node_torusknot25_rotationx_angle_intangent_array = {
-0.3329306, 183.132,
0.3335, 256.4932,
0.8335, 216.862,
1.3335, 133.4248,
1.8335, 133.4248,
2.3335, 146.1407,
3.055833, 183.132,
}
local array_node_torusknot25_rotationx_angle_outtangent_array = {
0.1665, 183.132,
0.6665, 256.4932,
1.1665, 175.8802,
1.6665, 133.4248,
2.1665, 133.4248,
2.7775, 162.6932,
3.666264, 183.132,
}
local array_node_torusknot25_rotationx_angle_interpolation_array = {
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
collada_types.interpolation.BEZIER,
}
local sampler_node_torusknot25_rotationx_angle_sampler = {
-- node_torusknot25_rotationx_angle_input
input = {
float_array = array_node_torusknot25_rotationx_angle_input_array,
count = 7,
stride = 1,
},
-- node_torusknot25_rotationx_angle_output
output = {
float_array = array_node_torusknot25_rotationx_angle_output_array,
count = 7,
stride = 1,
},
-- node_torusknot25_rotationx_angle_intangent
in_tangent = {
float_array = array_node_torusknot25_rotationx_angle_intangent_array,
count = 7,
stride = 2,
},
-- node_torusknot25_rotationx_angle_outtangent
out_tangent = {
float_array = array_node_torusknot25_rotationx_angle_outtangent_array,
count = 7,
stride = 2,
},
-- node_torusknot25_rotationx_angle_interpolation
interpolation = {
interpolation_array = array_node_torusknot25_rotationx_angle_interpolation_array,
count = 7,
stride = 1,
},
}
local node_channel_node_torus_knot23_translation_x = {
source_sampler = sampler_node_torus_knot23_translation_x_sampler,
target_transform_index = 0,
target_attribute = collada_types.target_attribute.X,
}
local node_channel_node_torus_knot23_translation_y = {
source_sampler = sampler_node_torus_knot23_translation_y_sampler,
target_transform_index = 0,
target_attribute = collada_types.target_attribute.Y,
}
local node_channel_node_torus_knot23_translation_z = {
source_sampler = sampler_node_torus_knot23_translation_z_sampler,
target_transform_index = 0,
target_attribute = collada_types.target_attribute.Z,
}
local node_channel_node_torusknot25_rotationz_angle = {
source_sampler = sampler_node_torusknot25_rotationz_angle_sampler,
target_transform_index = 1,
target_attribute = collada_types.target_attribute.ANGLE,
}
local node_channel_node_torusknot25_rotationy_angle = {
source_sampler = sampler_node_torusknot25_rotationy_angle_sampler,
target_transform_index = 2,
target_attribute = collada_types.target_attribute.ANGLE,
}
local node_channel_node_torusknot25_rotationx_angle = {
source_sampler = sampler_node_torusknot25_rotationx_angle_sampler,
target_transform_index = 3,
target_attribute = collada_types.target_attribute.ANGLE,
}
-- logOnly_png
local image_logonly_png = {
uri = "./images/0_logOnly.png",
@ -363,6 +825,9 @@ local instance_controllers_node_torus_knot23 = {
local instance_lights_node_torus_knot23 = {
}
local node_channels_node_torus_knot23 = {
node_channel_node_torus_knot23_translation_z,
node_channel_node_torus_knot23_translation_x,
node_channel_node_torus_knot23_translation_y,
}
local node_node_torus_knot23 = {
parent_index = -1,
@ -382,7 +847,7 @@ local node_node_torus_knot23 = {
instance_lights_count = 0,
channels = node_channels_node_torus_knot23,
channels_count = 0,
channels_count = 3,
}
local transforms_node_torusknot25 = {
{
@ -391,7 +856,15 @@ local transforms_node_torusknot25 = {
},
{
type = collada_types.transform_type.ROTATE,
rotate = {0.9075136, -0.007434183, 0.4199569, -178.1592},
rotate = {0.0, 0.0, 1.0, -2.386906},
},
{
type = collada_types.transform_type.ROTATE,
rotate = {0.0, 1.0, 0.0, -49.62295},
},
{
type = collada_types.transform_type.ROTATE,
rotate = {1.0, 0.0, 0.0, -176.868},
},
{
type = collada_types.transform_type.ROTATE,
@ -430,6 +903,9 @@ local instance_controllers_node_torusknot25 = {
local instance_lights_node_torusknot25 = {
}
local node_channels_node_torusknot25 = {
node_channel_node_torusknot25_rotationy_angle,
node_channel_node_torusknot25_rotationz_angle,
node_channel_node_torusknot25_rotationx_angle,
}
local node_node_torusknot25 = {
parent_index = -1,
@ -437,7 +913,7 @@ local node_node_torusknot25 = {
type = collada_types.node_type.NODE,
transforms = transforms_node_torusknot25,
transforms_count = 5,
transforms_count = 7,
instance_geometries = instance_geometries_node_torusknot25,
instance_geometries_count = 1,
@ -449,7 +925,7 @@ local node_node_torusknot25 = {
instance_lights_count = 0,
channels = node_channels_node_torusknot25,
channels_count = 0,
channels_count = 3,
}
local transforms_node_camerahelper = {
{