collada_scene: get camera and light position from scene

This commit is contained in:
Zack Buhman 2026-02-27 00:40:39 +00:00
parent 85174f15f6
commit 8f22a0faf2
12 changed files with 1557 additions and 31 deletions

View File

@ -498,6 +498,36 @@ mat4 = {
return M
end,
orthographic_rh = function(view_width, view_height, near_z, far_z)
assert(not scalar.near_equal(view_width, 0.0, 0.00001))
assert(not scalar.near_equal(view_height, 0.0, 0.00001))
assert(not scalar.near_equal(far_z, near_z, 0.00001))
local f_range = 1.0 / (near_z - far_z)
local M = mat4()
M.m[0 * 4 + 0] = 2.0 / view_width
--M.m[0 * 4 + 1] = 0.0
--M.m[0 * 4 + 2] = 0.0
--M.m[0 * 4 + 3] = 0.0
--M.m[1 * 4 + 0] = 0.0
M.m[1 * 4 + 1] = 2.0 / view_height
--M.m[1 * 4 + 2] = 0.0
--M.m[1 * 4 + 3] = 0.0
--M.m[2 * 4 + 0] = 0.0
--M.m[2 * 4 + 1] = 0.0
M.m[2 * 4 + 2] = f_range
--M.m[2 * 4 + 3] = 0.0
--M.m[3 * 4 + 0] = 0.0
--M.m[3 * 4 + 1] = 0.0
M.m[3 * 4 + 2] = f_range * near_z
M.m[3 * 4 + 3] = 1.0
return M
end,
near_equal = function(M1, M2, epsilon)
local d00 = abs(M1.m[0 * 4 + 0] - M2.m[0 * 4 + 0])
local d01 = abs(M1.m[0 * 4 + 1] - M2.m[0 * 4 + 1])
@ -759,6 +789,41 @@ vec3 = {
return result
end,
transform = function(v, M)
local x = ((M.m[0 * 4 + 0] * v.f[0])
+ (M.m[1 * 4 + 0] * v.f[1])
+ (M.m[2 * 4 + 0] * v.f[2])
+ (M.m[3 * 4 + 0]))
local y = ((M.m[0 * 4 + 1] * v.f[0])
+ (M.m[1 * 4 + 1] * v.f[1])
+ (M.m[2 * 4 + 1] * v.f[2])
+ (M.m[3 * 4 + 1]))
local z = ((M.m[0 * 4 + 2] * v.f[0])
+ (M.m[1 * 4 + 2] * v.f[1])
+ (M.m[2 * 4 + 2] * v.f[2])
+ (M.m[3 * 4 + 2]))
return vec4(x, y, z, 1)
end,
transform_normal = function(v, M)
local x = ((M.m[0 * 4 + 0] * v.f[0])
+ (M.m[1 * 4 + 0] * v.f[1])
+ (M.m[2 * 4 + 0] * v.f[2]))
local y = ((M.m[0 * 4 + 1] * v.f[0])
+ (M.m[1 * 4 + 1] * v.f[1])
+ (M.m[2 * 4 + 1] * v.f[2]))
local z = ((M.m[0 * 4 + 2] * v.f[0])
+ (M.m[1 * 4 + 2] * v.f[1])
+ (M.m[2 * 4 + 2] * v.f[2]))
return vec4(x, y, z, 0)
end,
equal = function(v1, v2)
return (
(v1.f[0] == v2.f[0]) and

13
build_scene.sh Normal file
View File

@ -0,0 +1,13 @@
set -eux
cd scene/$1
PYTHONPATH=~/d3d10 \
python -m collada.main \
$1.DAE \
$1.lua \
$1.vtx \
$1.vjw \
$1.idx \
$1.rc \
$1.mk

View File

@ -199,8 +199,8 @@ collada_scene = {
if node.instance_geometries_count > 0 then
current_shader = shader_static
love.graphics.setShader(current_shader)
current_shader:send("view_position", view_position)
current_shader:send("light_position", light_position)
current_shader:send("view_position", view_position.data)
current_shader:send("light_position", light_position.data)
current_shader:send("world_transform", "column", world.data)
current_shader:send("transform", "column", transform.data)
@ -219,9 +219,21 @@ collada_scene = {
end
end,
draw_nodes = function(node_state, transform)
local view_position = {-630.43401, -528.53392, 474.3912, 1.0}
local light_position = {-403.649, -165.804, 317.237, 1.0}
draw_nodes = function(node_state, projection)
local camera_world = node_state.node_instances[node_state.camera].world
local view_position = vec3.transform(vec3._zero, camera_world)
local camera_target_world = node_state.node_instances[node_state.camera_target].world
local view_target_position = vec3.transform(vec3._zero, camera_target_world)
local light_world = node_state.node_instances[node_state.light].world
local light_position = vec3.transform(vec3._zero, light_world)
local view = mat4.look_at_rh(view_position,
view_target_position,
vec3(0, 0, 1))
local transform = view * projection
local node_index = 0
for _, node in ipairs(node_state.nodes) do

View File

@ -61,6 +61,19 @@ local instance_transforms_from_node = function(node)
return transforms
end
local find_node_index_by_name = function(nodes, name)
local value = nil
local node_index = 0
for _, node in ipairs(nodes) do
if node.node_name == name then
return node_index
end
node_index = node_index + 1
end
print(name)
assert(false)
end
local collada_scene_node_state
collada_scene_node_state = {
@ -103,12 +116,24 @@ collada_scene_node_state = {
node_index = node_index + 1
end
end,
set_camera = function(this, camera_name, camera_target_name)
this.camera = find_node_index_by_name(this.nodes, camera_name)
this.camera_target = find_node_index_by_name(this.nodes, camera_target_name)
end,
set_light = function(this, light_name)
this.light = find_node_index_by_name(this.nodes, light_name)
end,
},
__call = function(_t, nodes)
local value = {
nodes = nodes,
node_instances = {},
camera = nil,
camera_target = nil,
light = nil,
}
setmetatable(value, collada_scene_node_state)
value:node_instances_new(nodes)

View File

@ -14,6 +14,24 @@ local collada_scene_node_state = require 'collada_scene.node_state'
local scene_test = require 'scene.test.test'
local scene_noodle = require 'scene.noodle.noodle'
local scene_sci_fi_ship = require 'scene.sci_fi_ship.sci_fi_ship'
local scene_shadow_test = require 'scene.shadow_test.shadow_test'
local scenes = {
sci_fi_ship = {
descriptor = scene_sci_fi_ship.descriptor,
image_path = "scene/sci_fi_ship",
idx_path = "scene/sci_fi_ship/sci_fi_ship.idx",
vtx_path = "scene/sci_fi_ship/sci_fi_ship.vtx",
vjw_path = "scene/sci_fi_ship/sci_fi_ship.vjw",
},
shadow_test = {
descriptor = scene_shadow_test.descriptor,
image_path = "scene/shadow_test",
idx_path = "scene/shadow_test/shadow_test.idx",
vtx_path = "scene/shadow_test/shadow_test.vtx",
vjw_path = "scene/shadow_test/shadow_test.vjw",
},
}
local node_state
@ -47,14 +65,12 @@ end
function love.load(args)
love.window.setMode(1024, 1024, {depth=true, resizable=false})
local scene = scene_sci_fi_ship
local idx_path = "scene/sci_fi_ship/sci_fi_ship.idx"
local vtx_path = "scene/sci_fi_ship/sci_fi_ship.vtx"
local vjw_path = "scene/sci_fi_ship/sci_fi_ship.vjw"
collada_scene.load_buffers(idx_path, vtx_path, vjw_path)
collada_scene.load_images("scene/sci_fi_ship", scene.descriptor.images)
local scene = scenes.shadow_test
collada_scene.load_buffers(scene.idx_path, scene.vtx_path, scene.vjw_path)
collada_scene.load_images(scene.image_path, scene.descriptor.images)
node_state = collada_scene_node_state(scene.descriptor.nodes)
node_state:set_camera("node_camera001", "node_camera001_target")
node_state:set_light("node_direct001")
----------------------------------------------------------------------
-- canvas
@ -82,37 +98,37 @@ function love.draw()
0.1,
10000.0)
local view = mat4.look_at_rh(vec3(-630.43401, -528.53392, 474.3912),
vec3(0.0, 0.0, 13.41141),
vec3(0, 0, 1))
--projection = mat4.orthographic_rh(500, 500, 0.1, 10000.0)
local world1 = mat4.rotation_z(rotation)
local world2 = mat4.rotation_z(rotation * 0.5)
--local world3 = mat4.translation(0, 0, -0.5)
rotation = rotation + 0.01
local transform = view * projection
local transform = projection
collada_scene_animate.update(t, node_state)
t = t + 0.016
love.graphics.setBlendMode("replace", "premultiplied")
love.graphics.setDepthMode("less", true)
love.graphics.setCanvas({
g_color_canvas,
g_position_canvas,
g_normal_canvas,
depth = true
})
love.graphics.clear(
{0.0, 0.0, 0.0, 1.0},
{0.0, 0.0, 0.0, 1.0},
{0.0, 0.0, 0.0, 1.0})
collada_scene.draw_nodes(node_state, transform)
love.graphics.setCanvas()
love.graphics.setShader(screen_shader)
screen_shader:send("g_normal_sampler", g_normal_canvas)
screen_shader:send("g_color_sampler", g_color_canvas)
love.graphics.drawFromShader(screen_index_buffer, 3 * 2, 1, 1)
-- love.graphics.setCanvas({
-- g_color_canvas,
-- g_position_canvas,
-- g_normal_canvas,
-- depth = true
-- })
-- love.graphics.clear(
-- {0.0, 0.0, 0.0, 1.0},
-- {0.0, 0.0, 0.0, 1.0},
-- {0.0, 0.0, 0.0, 1.0})
-- collada_scene.draw_nodes(node_state, transform)
--love.graphics.setCanvas()
--love.graphics.setShader(screen_shader)
--screen_shader:send("g_normal_sampler", g_normal_canvas)
--screen_shader:send("g_color_sampler", g_color_canvas)
--love.graphics.drawFromShader(screen_index_buffer, 3 * 2, 1, 1)
end

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -0,0 +1,776 @@
local collada_types = require 'collada_types'
local ns = {}
ns.camera_camera001_camera = {
xfov = 45.0,
yfov = 0.0,
znear = 1.0,
zfar = 1000.0,
aspect_ratio = 0.0,
}
ns.light_environmentambientlight = {
type = collada_types.light_type.AMBIENT,
color = {0.0, 0.0, 0.0},
}
ns.light_direct001_light = {
type = collada_types.light_type.DIRECTIONAL,
color = {1.0, 1.0, 1.0},
}
ns.images = {
}
ns.effect_material__148 = {
type = collada_types.effect_type.BLINN,
blinn = {
emission = {
type = collada_types.color_or_texture_type.COLOR,
color = {0.0, 0.0, 0.0, 1.0},
},
ambient = {
type = collada_types.color_or_texture_type.COLOR,
color = {0.588, 0.588, 0.588, 1.0},
},
diffuse = {
type = collada_types.color_or_texture_type.COLOR,
color = {0.588, 0.588, 0.588, 1.0},
},
specular = {
type = collada_types.color_or_texture_type.COLOR,
color = {0.0, 0.0, 0.0, 1.0},
},
shininess = 10.0,
reflective = {
type = collada_types.color_or_texture_type.COLOR,
color = {0.0, 0.0, 0.0, 1.0},
},
reflectivity = 0.0,
transparent = {
type = collada_types.color_or_texture_type.COLOR,
color = {1.0, 1.0, 1.0, 1.0},
},
transparency = 1.0,
index_of_refraction = 0.0,
}
}
ns.effect_coloreffectr5g54b179 = {
type = collada_types.effect_type.PHONG,
phong = {
emission = {
type = collada_types.color_or_texture_type.COLOR,
color = {0.0, 0.0, 0.0, 0.0},
},
ambient = {
type = collada_types.color_or_texture_type.COLOR,
color = {0.01960784, 0.2117647, 0.7019608, 1.0},
},
diffuse = {
type = collada_types.color_or_texture_type.COLOR,
color = {0.01960784, 0.2117647, 0.7019608, 1.0},
},
specular = {
type = collada_types.color_or_texture_type.COLOR,
color = {1.0, 1.0, 1.0, 1.0},
},
shininess = 10.0,
reflective = {
type = collada_types.color_or_texture_type.COLOR,
color = {0.0, 0.0, 0.0, 1.0},
},
reflectivity = 0.0,
transparent = {
type = collada_types.color_or_texture_type.COLOR,
color = {1.0, 1.0, 1.0, 1.0},
},
transparency = 1.0,
index_of_refraction = 0.0,
}
}
ns.effect_coloreffectr134g110b8 = {
type = collada_types.effect_type.PHONG,
phong = {
emission = {
type = collada_types.color_or_texture_type.COLOR,
color = {0.0, 0.0, 0.0, 0.0},
},
ambient = {
type = collada_types.color_or_texture_type.COLOR,
color = {0.5254902, 0.4313725, 0.03137255, 1.0},
},
diffuse = {
type = collada_types.color_or_texture_type.COLOR,
color = {0.5254902, 0.4313725, 0.03137255, 1.0},
},
specular = {
type = collada_types.color_or_texture_type.COLOR,
color = {1.0, 1.0, 1.0, 1.0},
},
shininess = 10.0,
reflective = {
type = collada_types.color_or_texture_type.COLOR,
color = {0.0, 0.0, 0.0, 1.0},
},
reflectivity = 0.0,
transparent = {
type = collada_types.color_or_texture_type.COLOR,
color = {1.0, 1.0, 1.0, 1.0},
},
transparency = 1.0,
index_of_refraction = 0.0,
}
}
ns.effect_coloreffectr255g229b0 = {
type = collada_types.effect_type.PHONG,
phong = {
emission = {
type = collada_types.color_or_texture_type.COLOR,
color = {0.0, 0.0, 0.0, 0.0},
},
ambient = {
type = collada_types.color_or_texture_type.COLOR,
color = {1.0, 0.8980392, 0.0, 1.0},
},
diffuse = {
type = collada_types.color_or_texture_type.COLOR,
color = {1.0, 0.8980392, 0.0, 1.0},
},
specular = {
type = collada_types.color_or_texture_type.COLOR,
color = {1.0, 1.0, 1.0, 1.0},
},
shininess = 10.0,
reflective = {
type = collada_types.color_or_texture_type.COLOR,
color = {0.0, 0.0, 0.0, 1.0},
},
reflectivity = 0.0,
transparent = {
type = collada_types.color_or_texture_type.COLOR,
color = {1.0, 1.0, 1.0, 1.0},
},
transparency = 1.0,
index_of_refraction = 0.0,
}
}
ns.effect_coloreffectr6g134b6 = {
type = collada_types.effect_type.PHONG,
phong = {
emission = {
type = collada_types.color_or_texture_type.COLOR,
color = {0.0, 0.0, 0.0, 0.0},
},
ambient = {
type = collada_types.color_or_texture_type.COLOR,
color = {0.02352941, 0.5254902, 0.02352941, 1.0},
},
diffuse = {
type = collada_types.color_or_texture_type.COLOR,
color = {0.02352941, 0.5254902, 0.02352941, 1.0},
},
specular = {
type = collada_types.color_or_texture_type.COLOR,
color = {1.0, 1.0, 1.0, 1.0},
},
shininess = 10.0,
reflective = {
type = collada_types.color_or_texture_type.COLOR,
color = {0.0, 0.0, 0.0, 1.0},
},
reflectivity = 0.0,
transparent = {
type = collada_types.color_or_texture_type.COLOR,
color = {1.0, 1.0, 1.0, 1.0},
},
transparency = 1.0,
index_of_refraction = 0.0,
}
}
ns.effect_coloreffectr88g88b225 = {
type = collada_types.effect_type.PHONG,
phong = {
emission = {
type = collada_types.color_or_texture_type.COLOR,
color = {0.0, 0.0, 0.0, 0.0},
},
ambient = {
type = collada_types.color_or_texture_type.COLOR,
color = {0.345098, 0.345098, 0.8823529, 1.0},
},
diffuse = {
type = collada_types.color_or_texture_type.COLOR,
color = {0.345098, 0.345098, 0.8823529, 1.0},
},
specular = {
type = collada_types.color_or_texture_type.COLOR,
color = {1.0, 1.0, 1.0, 1.0},
},
shininess = 10.0,
reflective = {
type = collada_types.color_or_texture_type.COLOR,
color = {0.0, 0.0, 0.0, 1.0},
},
reflectivity = 0.0,
transparent = {
type = collada_types.color_or_texture_type.COLOR,
color = {1.0, 1.0, 1.0, 1.0},
},
transparency = 1.0,
index_of_refraction = 0.0,
}
}
ns.material_coloreffectr5g54b179_material = {
effect = ns.effect_coloreffectr5g54b179,
}
ns.material_coloreffectr134g110b8_material = {
effect = ns.effect_coloreffectr134g110b8,
}
ns.material_coloreffectr255g229b0_material = {
effect = ns.effect_coloreffectr255g229b0,
}
ns.material_coloreffectr6g134b6_material = {
effect = ns.effect_coloreffectr6g134b6,
}
ns.material_coloreffectr88g88b225_material = {
effect = ns.effect_coloreffectr88g88b225,
}
ns.material_material__148_material = {
effect = ns.effect_material__148,
}
ns.input_elements_position_0_3_normal_0_3_texcoord_0_3 = {
{
semantic = "POSITION",
semantic_index = 0,
format = collada_types.input_format.FLOAT3,
},
{
semantic = "NORMAL",
semantic_index = 0,
format = collada_types.input_format.FLOAT3,
},
{
semantic = "TEXCOORD",
semantic_index = 0,
format = collada_types.input_format.FLOAT3,
},
}
ns.triangles_geom_plane001 = {
{
count = 20000, -- triangles
index_offset = 0, -- indices
inputs_index = 0, -- index into inputs_list
},
}
ns.geometry_geom_plane001 = {
mesh = {
triangles = ns.triangles_geom_plane001,
triangles_count = 1,
vertex_buffer_offset = 0,
vertex_buffer_size = 489648,
index_buffer_offset = 0,
index_buffer_size = 240000,
}
}
ns.triangles_geom_torus_knot001 = {
{
count = 2880, -- triangles
index_offset = 0, -- indices
inputs_index = 0, -- index into inputs_list
},
}
ns.geometry_geom_torus_knot001 = {
mesh = {
triangles = ns.triangles_geom_torus_knot001,
triangles_count = 1,
vertex_buffer_offset = 489648,
vertex_buffer_size = 75504,
index_buffer_offset = 240000,
index_buffer_size = 34560,
}
}
ns.triangles_geom_cone001 = {
{
count = 288, -- triangles
index_offset = 0, -- indices
inputs_index = 0, -- index into inputs_list
},
}
ns.geometry_geom_cone001 = {
mesh = {
triangles = ns.triangles_geom_cone001,
triangles_count = 1,
vertex_buffer_offset = 565152,
vertex_buffer_size = 9984,
index_buffer_offset = 274560,
index_buffer_size = 3456,
}
}
ns.triangles_geom_box001 = {
{
count = 32, -- triangles
index_offset = 0, -- indices
inputs_index = 0, -- index into inputs_list
},
}
ns.geometry_geom_box001 = {
mesh = {
triangles = ns.triangles_geom_box001,
triangles_count = 1,
vertex_buffer_offset = 575136,
vertex_buffer_size = 3840,
index_buffer_offset = 278016,
index_buffer_size = 384,
}
}
ns.geometries = {
ns.geometry_geom_plane001,
ns.geometry_geom_torus_knot001,
ns.geometry_geom_cone001,
ns.geometry_geom_box001,
}
ns.transforms_node_environmentambientlight = {
}
ns.instance_geometries_node_environmentambientlight = {
}
ns.instance_controllers_node_environmentambientlight = {
}
ns.instance_lights_node_environmentambientlight = {
{
light = ns.light_environmentambientlight,
}
}
ns.node_channels_node_environmentambientlight = {
}
ns.node_node_environmentambientlight = {
node_name = "node_environmentambientlight",
parent_index = -1,
type = collada_types.node_type.NODE,
transforms = ns.transforms_node_environmentambientlight,
transforms_count = 0,
instance_geometries = ns.instance_geometries_node_environmentambientlight,
instance_geometries_count = 0,
instance_controllers = ns.instance_controllers_node_environmentambientlight,
instance_controllers_count = 0,
instance_lights = ns.instance_lights_node_environmentambientlight,
instance_lights_count = 1,
channels = ns.node_channels_node_environmentambientlight,
channels_count = 0,
}
ns.transforms_node_plane001 = {
}
ns.instance_geometry_instance_materials_node_plane001_0 = {
{
element_index = 0, -- an index into mesh.triangles
material = ns.material_material__148_material,
emission = { input_set = -1 },
ambient = { input_set = -1 },
diffuse = { input_set = -1 },
specular = { input_set = -1 },
},
}
ns.instance_geometries_node_plane001 = {
{
geometry = ns.geometry_geom_plane001,
instance_materials = ns.instance_geometry_instance_materials_node_plane001_0,
instance_materials_count = 1,
},
}
ns.instance_controllers_node_plane001 = {
}
ns.instance_lights_node_plane001 = {
}
ns.node_channels_node_plane001 = {
}
ns.node_node_plane001 = {
node_name = "node_plane001",
parent_index = -1,
type = collada_types.node_type.NODE,
transforms = ns.transforms_node_plane001,
transforms_count = 0,
instance_geometries = ns.instance_geometries_node_plane001,
instance_geometries_count = 1,
instance_controllers = ns.instance_controllers_node_plane001,
instance_controllers_count = 0,
instance_lights = ns.instance_lights_node_plane001,
instance_lights_count = 0,
channels = ns.node_channels_node_plane001,
channels_count = 0,
}
ns.transforms_node_camera001 = {
{
type = collada_types.transform_type.MATRIX,
matrix = {-0.8666914, -0.4987199, -0.01115339, 0.0, 0.377458, -0.6702487, 0.6389774, 0.0, -0.3261463, 0.5495863, 0.7691447, 0.0, -85.35754, 169.1221, 269.2574, 1.0},
},
}
ns.instance_geometries_node_camera001 = {
}
ns.instance_controllers_node_camera001 = {
}
ns.instance_lights_node_camera001 = {
}
ns.node_channels_node_camera001 = {
}
ns.node_node_camera001 = {
node_name = "node_camera001",
parent_index = -1,
type = collada_types.node_type.NODE,
transforms = ns.transforms_node_camera001,
transforms_count = 1,
instance_geometries = ns.instance_geometries_node_camera001,
instance_geometries_count = 0,
instance_controllers = ns.instance_controllers_node_camera001,
instance_controllers_count = 0,
instance_lights = ns.instance_lights_node_camera001,
instance_lights_count = 0,
channels = ns.node_channels_node_camera001,
channels_count = 0,
}
ns.transforms_node_camera001_target = {
{
type = collada_types.transform_type.TRANSLATE,
translate = {10.26849, 7.983534, 43.74428},
},
{
type = collada_types.transform_type.ROTATE,
rotate = {-0.7700763, 0.318976, 0.5524825, -73.7201},
},
}
ns.instance_geometries_node_camera001_target = {
}
ns.instance_controllers_node_camera001_target = {
}
ns.instance_lights_node_camera001_target = {
}
ns.node_channels_node_camera001_target = {
}
ns.node_node_camera001_target = {
node_name = "node_camera001_target",
parent_index = -1,
type = collada_types.node_type.NODE,
transforms = ns.transforms_node_camera001_target,
transforms_count = 2,
instance_geometries = ns.instance_geometries_node_camera001_target,
instance_geometries_count = 0,
instance_controllers = ns.instance_controllers_node_camera001_target,
instance_controllers_count = 0,
instance_lights = ns.instance_lights_node_camera001_target,
instance_lights_count = 0,
channels = ns.node_channels_node_camera001_target,
channels_count = 0,
}
ns.transforms_node_torus_knot001 = {
{
type = collada_types.transform_type.TRANSLATE,
translate = {-6.954298, 40.46052, 74.58796},
},
{
type = collada_types.transform_type.ROTATE,
rotate = {-0.5773502, 0.5773503, 0.5773503, -120.0},
},
}
ns.instance_geometry_instance_materials_node_torus_knot001_0 = {
{
element_index = 0, -- an index into mesh.triangles
material = ns.material_coloreffectr134g110b8_material,
emission = { input_set = -1 },
ambient = { input_set = -1 },
diffuse = { input_set = -1 },
specular = { input_set = -1 },
},
}
ns.instance_geometries_node_torus_knot001 = {
{
geometry = ns.geometry_geom_torus_knot001,
instance_materials = ns.instance_geometry_instance_materials_node_torus_knot001_0,
instance_materials_count = 1,
},
}
ns.instance_controllers_node_torus_knot001 = {
}
ns.instance_lights_node_torus_knot001 = {
}
ns.node_channels_node_torus_knot001 = {
}
ns.node_node_torus_knot001 = {
node_name = "node_torus_knot001",
parent_index = -1,
type = collada_types.node_type.NODE,
transforms = ns.transforms_node_torus_knot001,
transforms_count = 2,
instance_geometries = ns.instance_geometries_node_torus_knot001,
instance_geometries_count = 1,
instance_controllers = ns.instance_controllers_node_torus_knot001,
instance_controllers_count = 0,
instance_lights = ns.instance_lights_node_torus_knot001,
instance_lights_count = 0,
channels = ns.node_channels_node_torus_knot001,
channels_count = 0,
}
ns.transforms_node_direct001 = {
{
type = collada_types.transform_type.MATRIX,
matrix = {-0.5428072, 0.8398573, 0.0, 0.0, -0.7717882, -0.4988136, 0.3943704, 0.0, 0.3312148, 0.2140671, 0.9189516, 0.0, 60.17801, 38.89358, 166.9632, 1.0},
},
}
ns.instance_geometries_node_direct001 = {
}
ns.instance_controllers_node_direct001 = {
}
ns.instance_lights_node_direct001 = {
{
light = ns.light_direct001_light,
}
}
ns.node_channels_node_direct001 = {
}
ns.node_node_direct001 = {
node_name = "node_direct001",
parent_index = -1,
type = collada_types.node_type.NODE,
transforms = ns.transforms_node_direct001,
transforms_count = 1,
instance_geometries = ns.instance_geometries_node_direct001,
instance_geometries_count = 0,
instance_controllers = ns.instance_controllers_node_direct001,
instance_controllers_count = 0,
instance_lights = ns.instance_lights_node_direct001,
instance_lights_count = 1,
channels = ns.node_channels_node_direct001,
channels_count = 0,
}
ns.transforms_node_direct001_target = {
{
type = collada_types.transform_type.ROTATE,
rotate = {-0.5773502, 0.5773503, 0.5773503, -120.0},
},
}
ns.instance_geometries_node_direct001_target = {
}
ns.instance_controllers_node_direct001_target = {
}
ns.instance_lights_node_direct001_target = {
}
ns.node_channels_node_direct001_target = {
}
ns.node_node_direct001_target = {
node_name = "node_direct001_target",
parent_index = -1,
type = collada_types.node_type.NODE,
transforms = ns.transforms_node_direct001_target,
transforms_count = 1,
instance_geometries = ns.instance_geometries_node_direct001_target,
instance_geometries_count = 0,
instance_controllers = ns.instance_controllers_node_direct001_target,
instance_controllers_count = 0,
instance_lights = ns.instance_lights_node_direct001_target,
instance_lights_count = 0,
channels = ns.node_channels_node_direct001_target,
channels_count = 0,
}
ns.transforms_node_cone001 = {
{
type = collada_types.transform_type.TRANSLATE,
translate = {-70.49181, -17.80504, 52.78688},
},
{
type = collada_types.transform_type.ROTATE,
rotate = {1.0, 0.0, 0.0, -89.7081},
},
}
ns.instance_geometry_instance_materials_node_cone001_0 = {
{
element_index = 0, -- an index into mesh.triangles
material = ns.material_coloreffectr6g134b6_material,
emission = { input_set = -1 },
ambient = { input_set = -1 },
diffuse = { input_set = -1 },
specular = { input_set = -1 },
},
}
ns.instance_geometries_node_cone001 = {
{
geometry = ns.geometry_geom_cone001,
instance_materials = ns.instance_geometry_instance_materials_node_cone001_0,
instance_materials_count = 1,
},
}
ns.instance_controllers_node_cone001 = {
}
ns.instance_lights_node_cone001 = {
}
ns.node_channels_node_cone001 = {
}
ns.node_node_cone001 = {
node_name = "node_cone001",
parent_index = -1,
type = collada_types.node_type.NODE,
transforms = ns.transforms_node_cone001,
transforms_count = 2,
instance_geometries = ns.instance_geometries_node_cone001,
instance_geometries_count = 1,
instance_controllers = ns.instance_controllers_node_cone001,
instance_controllers_count = 0,
instance_lights = ns.instance_lights_node_cone001,
instance_lights_count = 0,
channels = ns.node_channels_node_cone001,
channels_count = 0,
}
ns.transforms_node_box001 = {
{
type = collada_types.transform_type.TRANSLATE,
translate = {72.78688, -2.19274e-06, 50.16393},
},
{
type = collada_types.transform_type.ROTATE,
rotate = {-1.0, 0.0, 0.0, -90.0},
},
}
ns.instance_geometry_instance_materials_node_box001_0 = {
{
element_index = 0, -- an index into mesh.triangles
material = ns.material_coloreffectr88g88b225_material,
emission = { input_set = -1 },
ambient = { input_set = -1 },
diffuse = { input_set = -1 },
specular = { input_set = -1 },
},
}
ns.instance_geometries_node_box001 = {
{
geometry = ns.geometry_geom_box001,
instance_materials = ns.instance_geometry_instance_materials_node_box001_0,
instance_materials_count = 1,
},
}
ns.instance_controllers_node_box001 = {
}
ns.instance_lights_node_box001 = {
}
ns.node_channels_node_box001 = {
}
ns.node_node_box001 = {
node_name = "node_box001",
parent_index = -1,
type = collada_types.node_type.NODE,
transforms = ns.transforms_node_box001,
transforms_count = 2,
instance_geometries = ns.instance_geometries_node_box001,
instance_geometries_count = 1,
instance_controllers = ns.instance_controllers_node_box001,
instance_controllers_count = 0,
instance_lights = ns.instance_lights_node_box001,
instance_lights_count = 0,
channels = ns.node_channels_node_box001,
channels_count = 0,
}
ns.nodes = {
ns.node_node_environmentambientlight, -- 0
ns.node_node_plane001, -- 1
ns.node_node_camera001, -- 2
ns.node_node_camera001_target, -- 3
ns.node_node_torus_knot001, -- 4
ns.node_node_direct001, -- 5
ns.node_node_direct001_target, -- 6
ns.node_node_cone001, -- 7
ns.node_node_box001, -- 8
}
ns.inputs_list = {
{
elements = ns.input_elements_position_0_3_normal_0_3_texcoord_0_3,
elements_count = 3,
},
}
ns.descriptor = {
nodes = ns.nodes,
nodes_count = #ns.nodes,
geometries = ns.geometries,
nodes_count = #ns.geometries,
inputs_list = ns.inputs_list,
inputs_list_count = #ns.inputs_list,
images = ns.images,
images_count = #ns.images,
}
return {
descriptor = ns.descriptor
}

View File

View File

@ -0,0 +1,4 @@
RES_SCENES_SHADOW_TEST_VTX RCDATA "shadow_test.vtx"
RES_SCENES_SHADOW_TEST_VJW RCDATA "shadow_test.vjw"
RES_SCENES_SHADOW_TEST_IDX RCDATA "shadow_test.idx"

View File

Binary file not shown.