Package org.osm2world.core.target.common.material

Source Code of org.osm2world.core.target.common.material.TexCoordUtil

package org.osm2world.core.target.common.material;

import static java.util.Collections.*;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.osm2world.core.math.TriangleXYZ;
import org.osm2world.core.math.VectorXYZ;
import org.osm2world.core.math.VectorXZ;
import org.osm2world.core.target.common.TextureData;

/**
* utility class for texture coordinate calculation
*/
public final class TexCoordUtil {
 
  /** prevents instantiation */
  private TexCoordUtil() {}
 
  /**
   * calculates the texture coordinate lists based on the
   * {@link TexCoordFunction} associated with each {@link TextureData} layer
   */
  public static final List<List<VectorXZ>> texCoordLists(
      List<VectorXYZ> vs, Material material,
      TexCoordFunction defaultCoordFunction) {
   
    List<TextureData> textureDataList = material.getTextureDataList();
   
    if (textureDataList.size() == 0) {
     
      return emptyList();
     
    } else if (textureDataList.size() == 1) {
     
      TextureData textureData = textureDataList.get(0);
      TexCoordFunction coordFunction = textureData.coordFunction;
      if (coordFunction == null) { coordFunction = defaultCoordFunction; }
     
      return singletonList(coordFunction.apply(vs, textureData));
     
    } else {
     
      List<List<VectorXZ>> result = new ArrayList<List<VectorXZ>>();
     
      for (TextureData textureData : textureDataList) {
       
        TexCoordFunction coordFunction = textureData.coordFunction;
        if (coordFunction == null) { coordFunction = defaultCoordFunction; }
       
        result.add(coordFunction.apply(vs, textureData));
       
      }
     
      return result;
     
    }
   
  }
 
  /**
   * equivalent of {@link #texCoordLists(List, Material, TexCoordFunction)}
   * for a collection of triangle objects.
   */
  public static final List<List<VectorXZ>> triangleTexCoordLists(
      Collection<TriangleXYZ> triangles, Material material,
      TexCoordFunction defaultCoordFunction) {
   
    List<VectorXYZ> vs = new ArrayList<VectorXYZ>(triangles.size() * 3);
   
    for (TriangleXYZ triangle : triangles) {
      vs.add(triangle.v1);
      vs.add(triangle.v2);
      vs.add(triangle.v3);
    }
   
    return texCoordLists(vs, material, defaultCoordFunction);
   
  }
 
}
TOP

Related Classes of org.osm2world.core.target.common.material.TexCoordUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.