https://github.com/jampekka/webtrajsim
Tip revision: 61b0c3047004e8dfa7ee181975b13b94a3cf9668 authored by Jami Pekkanen on 28 December 2016, 19:53:27 UTC
Texture filtering tweaking
Texture filtering tweaking
Tip revision: 61b0c30
utils.ls
THREE = require 'three'
window.THREE = THREE
require './node_modules/three/examples/js/loaders/ColladaLoader.js'
P = require 'bluebird'
{findIndex} = require 'prelude-ls'
export loadCollada = (path) -> new P (resolve, reject) ->
loader = new THREE.ColladaLoader
loader.options.convertUpAxis = true
loader.load path, resolve
export mergeObject = (root) ->
# TODO: Merge stuff using MeshFaceMaterials
submeshes = new Map
merged = new THREE.Object3D()
getSubmesh = (object) ->
key = object.material
if submeshes.has key
return submeshes.get key
submesh = new THREE.Mesh (new THREE.Geometry), object.material.clone()
submeshes.set key, submesh
return submesh
isTransparent = (o) ->
return false if not o.material
return true if o.material.transparent
return false if not o.material.materials
for material in o.material.materials
return true if material.transparent
return false
merge = (object, matrix=(new THREE.Matrix4)) ->
object.updateMatrix()
# Don't merge transparent objects, 'cause rasterization
# sucks
if isTransparent object
clone = object.clone()
clone.applyMatrix matrix
merged.add clone
return
matrix = matrix.clone().multiply object.matrix
if object.geometry?
getSubmesh(object).geometry.merge object.geometry, matrix
for child in object.children
merge child, matrix
merge root
submeshes.forEach (sub) ->
merged.add sub
merged.applyMatrix root.matrix
return merged