Added assets for the border and for gates. Drew them in correct locations.

#implement
This commit is contained in:
cir27
2017-09-11 02:50:31 +12:00
parent e3ccb570ed
commit 78b4786482
10 changed files with 537 additions and 117 deletions
+145 -52
View File
@@ -9,15 +9,12 @@ import javafx.animation.AnimationTimer;
import javafx.application.Platform;
import javafx.geometry.Point2D;
import javafx.geometry.Point3D;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.ParallelCamera;
import javafx.scene.SceneAntialiasing;
import javafx.scene.SubScene;
import javafx.scene.*;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyEvent;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Polygon;
import javafx.scene.text.Text;
import javafx.scene.transform.Rotate;
@@ -31,10 +28,7 @@ import seng302.model.mark.CompoundMark;
import seng302.model.mark.Corner;
import seng302.model.mark.Mark;
import seng302.utilities.GeoUtility;
import seng302.visualiser.fxObjects.assets_2D.AnnotationBox;
import seng302.visualiser.fxObjects.assets_2D.BoatObject;
import seng302.visualiser.fxObjects.assets_2D.CourseBoundary;
import seng302.visualiser.fxObjects.assets_2D.Gate;
import seng302.visualiser.fxObjects.assets_2D.*;
import seng302.visualiser.fxObjects.assets_3D.ModelFactory;
import seng302.visualiser.fxObjects.assets_3D.ModelType;
@@ -47,10 +41,11 @@ public class GameView3D {
private final double FOV = 60;
private final double DEFAULT_CAMERA_DEPTH = 100;
Group root3D;
SubScene view;
ParallelCamera camera;
Group gameObjects;
private Group root3D;
private SubScene view;
// ParallelCamera camera;
private PerspectiveCamera camera;
private Group gameObjects;
private double bufferSize = 0;
private double canvasWidth = 200;
@@ -69,7 +64,7 @@ public class GameView3D {
final double SCALE_DELTA = 1.1;
private Text fpsDisplay = new Text();
private Polygon raceBorder = new CourseBoundary();
private Group raceBorder = new Group();
/* Note that if either of these is null then values for it have not been added and the other
should be used as the limits of the map. */
@@ -112,16 +107,18 @@ public class GameView3D {
public GameView3D () {
// camera = new PerspectiveCamera(true);
camera = new ParallelCamera();
camera = new PerspectiveCamera(true);
// camera = new ParallelCamera();
// gameObjects.getTransforms().add(new Scale(4,4,4));
// camera.setLayoutX(camera.getLayoutX()-400);
// camera.setLayoutY(camera.getLayoutY()-400);
camera.getTransforms().addAll(
new Translate(0,0, -DEFAULT_CAMERA_DEPTH)
);
camera.setFarClip(Double.MAX_VALUE);
camera.setNearClip(0.1);
// camera.setFieldOfView(FOV);
camera.setFieldOfView(FOV);
gameObjects = new Group();
gameObjects.getTransforms().add(new Scale(4,4,4));
root3D = new Group(camera, gameObjects);
view = new SubScene(
root3D, 1000, 1000, true, SceneAntialiasing.BALANCED
@@ -129,11 +126,11 @@ public class GameView3D {
view.setCamera(camera);
view.setFill(Color.SKYBLUE);
camera.getTransforms().add(new Rotate(30, new Point3D(1,0,0)));
camera.setLayoutX(camera.getLayoutX()-400);
camera.setLayoutY(camera.getLayoutX()-600);
// gameObjects.getChildren().addAll(raceBorder, markers, tokens);
gameObjects.getChildren().addAll(
ModelFactory.importModel(ModelType.OCEAN).getAssets(), markers
ModelFactory.importModel(ModelType.OCEAN).getAssets(),
raceBorder, markers
);
// Sphere s = new Sphere(1);
@@ -203,33 +200,33 @@ public class GameView3D {
);
}
final List<Gate> gates = new ArrayList<>();
Paint colour = Color.BLACK;
final List<Group> gates = new ArrayList<>();
//Creates new markers
for (CompoundMark cMark : newCourse) {
//Set start and end colour
// if (cMark.getId() == sequence.get(0).getCompoundMarkID()) {
// colour = Color.GREEN;
// } else if (cMark.getId() == sequence.get(sequence.size() - 1).getCompoundMarkID()) {
// colour = Color.RED;
// }
//Create mark dots
for (Mark mark : cMark.getMarks()) {
makeAndBindMarker(mark);
if (cMark.getId() == sequence.get(0).getCompoundMarkID()) {
makeAndBindMarker(mark, ModelType.START_MARKER);
} else if (cMark.getId() == sequence.get(sequence.size() - 1).getCompoundMarkID()) {
makeAndBindMarker(mark, ModelType.FINISH_MARKER);
} else {
makeAndBindMarker(mark, ModelType.PLAIN_MARKER);
}
}
//Create gate line
if (cMark.isGate()) {
ModelType gateType;
if (cMark.getId() == sequence.get(0).getCompoundMarkID()) {
gateType = ModelType.START_LINE;
} else if (cMark.getId() == sequence.get(sequence.size() - 1).getCompoundMarkID()) {
gateType = ModelType.FINISH_LINE;
} else {
gateType = ModelType.GATE_LINE;
}
gates.add(makeAndBindGate(
cMark.getSubMark(1), cMark.getSubMark(2), gateType
));
}
// //Create gate line
// if (cMark.isGate()) {
// for (int i = 1; i < cMark.getMarks().size(); i++) {
// gates.add(
// makeAndBindGate(
// markerObjects.get(cMark.getSubMark(i)),
// markerObjects.get(cMark.getSubMark(i + 1)),
// colour
// )
// );
// }
// }
// colour = Color.BLACK;
}
//Scale race to markers if there is no border.
@@ -254,10 +251,11 @@ public class GameView3D {
* Creates a new Marker and binds it's position to the given Mark.
*
* @param observableMark The mark to bind the marker to.
* @param markerType the type of marker as a ModelType. Should be PLAIN_MARKER, START_MARKER or END_MARKER
*/
private void makeAndBindMarker(Mark observableMark) {
private void makeAndBindMarker(Mark observableMark, ModelType markerType) {
Group marker = ModelFactory.importModel(ModelType.PLAIN_MARKER).getAssets();
Group marker = ModelFactory.importModel(markerType).getAssets();
markerObjects.put(observableMark, marker);
observableMark.addPositionListener((mark, lat, lon) -> {
@@ -267,6 +265,35 @@ public class GameView3D {
});
}
/**
* Creates a new gate connecting the given marks.
*
* @param m1 The first Mark of the gate.
* @param m2 The second Mark of the gate.
* @param gateType The type of model for the gate.
* @return the new gate.
*/
private Group makeAndBindGate(Mark m1, Mark m2, ModelType gateType) {
Point2D m1Location = findScaledXY(m1);
Point2D m2Location = findScaledXY(m2);
Group barrier = ModelFactory.importModel(gateType).getAssets();
barrier.getTransforms().addAll(
new Rotate(
Math.toDegrees(
Math.atan2(m2Location.getY() - m1Location.getY(), m2Location.getX() - m1Location.getX())
) + 90,
new Point3D(0,1,0)
),
new Scale(1, 1, m1Location.distance(m2Location) / 10)
);
Point2D midPoint = m2Location.midpoint(m1Location);
barrier.setLayoutX(midPoint.getX());
barrier.setLayoutY(midPoint.getY());
return barrier;
}
/**
* Sets the class variables minLatPoint, maxLatPoint, minLonPoint, maxLonPoint to the point with
@@ -417,16 +444,16 @@ public class GameView3D {
public void cameraMovement(KeyEvent event) {
switch (event.getCode()) {
case UP:
case NUMPAD8:
camera.getTransforms().addAll(new Rotate(0.5, new Point3D(1,0,0)));
break;
case DOWN:
case NUMPAD2:
camera.getTransforms().addAll(new Rotate(-0.5, new Point3D(1,0,0)));
break;
case LEFT:
case NUMPAD4:
camera.getTransforms().addAll(new Rotate(-0.5, new Point3D(0,1,0)));
break;
case RIGHT:
case NUMPAD6:
camera.getTransforms().addAll(new Rotate(0.5, new Point3D(0,1,0)));
break;
case X:
@@ -436,10 +463,10 @@ public class GameView3D {
camera.getTransforms().addAll(new Translate(0, 0, -1.5));
break;
case W:
camera.getTransforms().addAll(new Translate(0, 1, 0));
camera.getTransforms().addAll(new Translate(0, -1, 0));
break;
case S:
camera.getTransforms().addAll(new Translate(0, -1, 0));
camera.getTransforms().addAll(new Translate(0, 1, 0));
break;
case A:
camera.getTransforms().addAll(new Translate(-1, 0, 0));
@@ -507,4 +534,70 @@ public class GameView3D {
public Node getAssets () {
return view;
}
/**
* Adds a border to the GameView and rescales to the size of the border, does not rescale if a
* border already exists. Assumes the border is larger than the course.
*
* @param border the race border to be drawn.
*/
public void updateBorder(List<Limit> border) {
if (borderPoints == null) {
borderPoints = border;
rescaleRace(new ArrayList<>(borderPoints));
}
List<Node> boundaryAssets = new ArrayList<>();
Point2D lastLocation = findScaledXY(border.get(0).getLat(), border.get(0).getLng());
Group pylon = ModelFactory.importModel(ModelType.BORDER_PYLON).getAssets();
pylon.setLayoutX(lastLocation.getX());
pylon.setLayoutY(lastLocation.getY());
boundaryAssets.add(pylon);
for (int i=1; i<border.size(); i++) {
Point2D location = findScaledXY(border.get(i).getLat(), border.get(i).getLng());
pylon = ModelFactory.importModel(ModelType.BORDER_PYLON).getAssets();
pylon.setLayoutX(location.getX());
pylon.setLayoutY(location.getY());
Group barrier = ModelFactory.importModel(ModelType.BORDER_BARRIER).getAssets();
barrier.getTransforms().addAll(
new Rotate(
Math.toDegrees(
Math.atan2(location.getY() - lastLocation.getY(), location.getX() - lastLocation.getX())
),
new Point3D(0,1,0)
),
new Scale((lastLocation.distance(location) / 15)-0.2, 1, 1)
);
Point2D midPoint = location.midpoint(lastLocation);
barrier.setLayoutX(midPoint.getX());
barrier.setLayoutY(midPoint.getY());
lastLocation = location;
boundaryAssets.add(barrier);
boundaryAssets.add(pylon);
}
Point2D firstLocation = findScaledXY(border.get(0).getLat(), border.get(0).getLng());
Group barrier = ModelFactory.importModel(ModelType.BORDER_BARRIER).getAssets();
barrier.getTransforms().addAll(
new Rotate(
Math.toDegrees(
Math.atan2(lastLocation.getY() - firstLocation.getY(), lastLocation.getX() - firstLocation.getX())
),
new Point3D(0,1,0)
),
new Scale((firstLocation.distance(lastLocation) / 15)-0.2, 1, 1)
);
Point2D midPoint = lastLocation.midpoint(firstLocation);
barrier.setLayoutX(midPoint.getX());
barrier.setLayoutY(midPoint.getY());
boundaryAssets.add(barrier);
Platform.runLater(() -> raceBorder.getChildren().setAll(boundaryAssets));
}
}
@@ -112,6 +112,7 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel
windArrowHolder.getChildren().addAll(windArrow);
windArrow.setLayoutX(windArrowHolder.getWidth() / 2);
windArrow.setLayoutY(windArrowHolder.getHeight() / 2);
}
public void loadRace (
@@ -143,7 +144,7 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel
// gameView.setFrameRateFXText(fpsDisplay);
Platform.runLater(() -> contentAnchorPane.getChildren().add(0, gameView.getAssets()));
gameView.setBoats(new ArrayList<>(participants.values()));
// gameView.updateBorder(raceData.getCourseLimit());
gameView.updateBorder(raceData.getCourseLimit());
// gameView.updateTokens(raceData.getTokens());
gameView.updateCourse(
new ArrayList<>(raceData.getCompoundMarks().values()), raceData.getMarkSequence()
@@ -12,6 +12,7 @@ import javafx.scene.shape.Circle;
import javafx.scene.shape.MeshView;
import javafx.scene.transform.Rotate;
import javafx.scene.transform.Scale;
import javafx.scene.transform.Translate;
/**
* Factory class for creating 3D models of boats.
@@ -55,7 +56,7 @@ public class ModelFactory {
Group boatAssets = getUnmodifiedBoatModel(boatType, primaryColour);
boatAssets.getTransforms().setAll(
new Rotate(-90, new Point3D(0,0,1)),
new Scale(0.2, 0.2, 0.2)
new Scale(0.05, 0.05, 0.05)
);
return new BoatModel(boatAssets, null, boatType);
}
@@ -96,6 +97,13 @@ public class ModelFactory {
return makeMarker(assets);
case OCEAN:
return makeOcean(assets);
case BORDER_PYLON:
case BORDER_BARRIER:
return makeBarrier(assets);
case FINISH_LINE:
case START_LINE:
case GATE_LINE:
return makeGate(assets);
default:
return new Model(assets, null);
}
@@ -138,4 +146,19 @@ public class ModelFactory {
group.getChildren().add(ocean);
return new Model(group, null);
}
private static Model makeBarrier(Group assets) {
assets.getTransforms().addAll(
new Rotate(90, new Point3D(1,0,0)),
new Scale(1.5,1.5,1.5)
);
return new Model(assets, null);
}
private static Model makeGate(Group assets) {
assets.getTransforms().addAll(
new Rotate(90, new Point3D(1,0,0))
);
return new Model(assets, null);
}
}
@@ -12,8 +12,11 @@ public enum ModelType {
PLAIN_MARKER ("plain_marker.dae"),
MARK_AREA ("mark_area.dae"),
OCEAN (null),
BORDER_PYLON (null),
BORDER_BARRIER (null);
BORDER_PYLON ("barrier_pole.dae"),
BORDER_BARRIER ("barrier_segment.dae"),
FINISH_LINE ("finish_line.dae"),
START_LINE ("start_line.dae"),
GATE_LINE ("gate_line.dae");
final String filename;
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+100
View File
@@ -0,0 +1,100 @@
<?xml version="1.0" encoding="utf-8"?>
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
<asset>
<contributor>
<author>Blender User</author>
<authoring_tool>Blender 2.78.0 commit date:2017-02-24, commit time:14:33, hash:e92f235283</authoring_tool>
</contributor>
<created>2017-09-11T02:11:56</created>
<modified>2017-09-11T02:11:56</modified>
<unit name="meter" meter="1"/>
<up_axis>Z_UP</up_axis>
</asset>
<library_images/>
<library_effects>
<effect id="Material_001-effect">
<profile_COMMON>
<technique sid="common">
<phong>
<emission>
<color sid="emission">0 0 0 1</color>
</emission>
<ambient>
<color sid="ambient">0 0 0 1</color>
</ambient>
<diffuse>
<color sid="diffuse">0.64 0 0.01304383 1</color>
</diffuse>
<specular>
<color sid="specular">0.5 0.5 0.5 1</color>
</specular>
<shininess>
<float sid="shininess">50</float>
</shininess>
<index_of_refraction>
<float sid="index_of_refraction">1</float>
</index_of_refraction>
</phong>
</technique>
</profile_COMMON>
</effect>
</library_effects>
<library_materials>
<material id="Material_001-material" name="Material_001">
<instance_effect url="#Material_001-effect"/>
</material>
</library_materials>
<library_geometries>
<geometry id="Plane-mesh" name="Plane">
<mesh>
<source id="Plane-mesh-positions">
<float_array id="Plane-mesh-positions-array" count="192">-1 1 0 1 1 0 -1 0 0 1 0 0 -1 -0.5 0 1 0.5 0 -1 0.5 0 1 -0.5 0 -1 -0.75 0 1 0.75 0 -1 0.25 0 1 -0.25 0 -1 -0.25 0 1 0.25 0 -1 0.75 0 1 -0.75 0 -1 -0.875 0 1 0.875 0 -1 0.125 0 1 -0.125 0 -1 -0.375 0 1 0.375 0 -1 0.625 0 1 -0.625 0 -1 -0.625 0 1 0.625 0 -1 0.375 0 1 -0.375 0 -1 -0.125 0 1 0.125 0 -1 0.875 0 1 -0.875 0 1 0.875 0.04037594 1 1 0.04037594 -1 1 0.04037594 1 -0.125 0.04037594 1 0 0.04037594 -1 0 0.04037594 1 0.375 0.04037594 1 0.5 0.04037594 1 -0.625 0.04037594 1 -0.5 0.04037594 -1 -0.5 0.04037594 -1 0.5 0.04037594 1 0.625 0.04037594 1 0.75 0.04037594 1 -0.375 0.04037594 1 -0.25 0.04037594 1 0.125 0.04037594 1 0.25 0.04037594 1 -0.875 0.04037594 1 -0.75 0.04037594 -1 0.25 0.04037594 -1 -0.75 0.04037594 -1 -0.25 0.04037594 -1 0.75 0.04037594 -1 -0.875 0.04037594 -1 0.125 0.04037594 -1 -0.375 0.04037594 -1 0.625 0.04037594 -1 -0.625 0.04037594 -1 0.375 0.04037594 -1 -0.125 0.04037594 -1 0.875 0.04037594</float_array>
<technique_common>
<accessor source="#Plane-mesh-positions-array" count="64" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-mesh-normals">
<float_array id="Plane-mesh-normals-array" count="18">0 0 -1 0 0 1 0 -1 0 0 1 0 1 0 0 -1 0 0</float_array>
<technique_common>
<accessor source="#Plane-mesh-normals-array" count="6" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-mesh-vertices">
<input semantic="POSITION" source="#Plane-mesh-positions"/>
</vertices>
<polylist material="Material_001-material" count="96">
<input semantic="VERTEX" source="#Plane-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Plane-mesh-normals" offset="1"/>
<vcount>3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 </vcount>
<p>0 0 17 0 30 0 2 0 19 0 28 0 4 0 23 0 24 0 6 0 21 0 26 0 10 0 29 0 18 0 8 0 31 0 16 0 12 0 27 0 20 0 14 0 25 0 22 0 32 1 34 1 63 1 35 1 37 1 62 1 40 1 42 1 60 1 38 1 43 1 61 1 48 1 52 1 57 1 50 1 53 1 56 1 46 1 54 1 58 1 44 1 55 1 59 1 27 2 58 2 20 2 10 3 49 3 13 3 31 2 56 2 16 2 8 3 51 3 15 3 1 4 32 4 17 4 29 2 57 2 18 2 12 3 47 3 11 3 0 3 33 3 1 3 21 2 61 2 26 2 14 3 45 3 9 3 3 4 35 4 19 4 23 2 60 2 24 2 16 5 53 5 8 5 2 3 36 3 3 3 19 2 62 2 28 2 18 5 52 5 10 5 5 4 38 4 21 4 17 2 63 2 30 2 20 5 54 5 12 5 7 4 40 4 23 4 22 5 55 5 14 5 4 3 41 3 7 3 24 5 42 5 4 5 6 3 39 3 5 3 26 5 43 5 6 5 9 4 44 4 25 4 28 5 37 5 2 5 11 4 46 4 27 4 30 5 34 5 0 5 13 4 48 4 29 4 25 2 59 2 22 2 15 4 50 4 31 4 0 0 1 0 17 0 2 0 3 0 19 0 4 0 7 0 23 0 6 0 5 0 21 0 10 0 13 0 29 0 8 0 15 0 31 0 12 0 11 0 27 0 14 0 9 0 25 0 32 1 33 1 34 1 35 1 36 1 37 1 40 1 41 1 42 1 38 1 39 1 43 1 48 1 49 1 52 1 50 1 51 1 53 1 46 1 47 1 54 1 44 1 45 1 55 1 27 2 46 2 58 2 10 3 52 3 49 3 31 2 50 2 56 2 8 3 53 3 51 3 1 4 33 4 32 4 29 2 48 2 57 2 12 3 54 3 47 3 0 3 34 3 33 3 21 2 38 2 61 2 14 3 55 3 45 3 3 4 36 4 35 4 23 2 40 2 60 2 16 5 56 5 53 5 2 3 37 3 36 3 19 2 35 2 62 2 18 5 57 5 52 5 5 4 39 4 38 4 17 2 32 2 63 2 20 5 58 5 54 5 7 4 41 4 40 4 22 5 59 5 55 5 4 3 42 3 41 3 24 5 60 5 42 5 6 3 43 3 39 3 26 5 61 5 43 5 9 4 45 4 44 4 28 5 62 5 37 5 11 4 47 4 46 4 30 5 63 5 34 5 13 4 49 4 48 4 25 2 44 2 59 2 15 4 51 4 50 4</p>
</polylist>
</mesh>
</geometry>
</library_geometries>
<library_controllers/>
<library_visual_scenes>
<visual_scene id="Scene" name="Scene">
<node id="Plane" name="Plane" type="NODE">
<matrix sid="transform">0.125 0 0 0 0 5.333333 0 -0.3333333 0 0 1 0.01986987 0 0 0 1</matrix>
<instance_geometry url="#Plane-mesh" name="Plane">
<bind_material>
<technique_common>
<instance_material symbol="Material_001-material" target="#Material_001-material"/>
</technique_common>
</bind_material>
</instance_geometry>
</node>
</visual_scene>
</library_visual_scenes>
<scene>
<instance_visual_scene url="#Scene"/>
</scene>
</COLLADA>
+100
View File
@@ -0,0 +1,100 @@
<?xml version="1.0" encoding="utf-8"?>
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
<asset>
<contributor>
<author>Blender User</author>
<authoring_tool>Blender 2.78.0 commit date:2017-02-24, commit time:14:33, hash:e92f235283</authoring_tool>
</contributor>
<created>2017-09-11T02:18:04</created>
<modified>2017-09-11T02:18:04</modified>
<unit name="meter" meter="1"/>
<up_axis>Z_UP</up_axis>
</asset>
<library_images/>
<library_effects>
<effect id="Material_001-effect">
<profile_COMMON>
<technique sid="common">
<phong>
<emission>
<color sid="emission">0 0 0 1</color>
</emission>
<ambient>
<color sid="ambient">0 0 0 1</color>
</ambient>
<diffuse>
<color sid="diffuse">0.09194811 0.08404596 0.08642986 1</color>
</diffuse>
<specular>
<color sid="specular">0.5 0.5 0.5 1</color>
</specular>
<shininess>
<float sid="shininess">50</float>
</shininess>
<index_of_refraction>
<float sid="index_of_refraction">1</float>
</index_of_refraction>
</phong>
</technique>
</profile_COMMON>
</effect>
</library_effects>
<library_materials>
<material id="Material_001-material" name="Material_001">
<instance_effect url="#Material_001-effect"/>
</material>
</library_materials>
<library_geometries>
<geometry id="Plane-mesh" name="Plane">
<mesh>
<source id="Plane-mesh-positions">
<float_array id="Plane-mesh-positions-array" count="192">-1 1 0 1 1 0 -1 0 0 1 0 0 -1 -0.5 0 1 0.5 0 -1 0.5 0 1 -0.5 0 -1 -0.75 0 1 0.75 0 -1 0.25 0 1 -0.25 0 -1 -0.25 0 1 0.25 0 -1 0.75 0 1 -0.75 0 -1 -0.875 0 1 0.875 0 -1 0.125 0 1 -0.125 0 -1 -0.375 0 1 0.375 0 -1 0.625 0 1 -0.625 0 -1 -0.625 0 1 0.625 0 -1 0.375 0 1 -0.375 0 -1 -0.125 0 1 0.125 0 -1 0.875 0 1 -0.875 0 1 0.875 0.04037594 1 1 0.04037594 -1 1 0.04037594 1 -0.125 0.04037594 1 0 0.04037594 -1 0 0.04037594 1 0.375 0.04037594 1 0.5 0.04037594 1 -0.625 0.04037594 1 -0.5 0.04037594 -1 -0.5 0.04037594 -1 0.5 0.04037594 1 0.625 0.04037594 1 0.75 0.04037594 1 -0.375 0.04037594 1 -0.25 0.04037594 1 0.125 0.04037594 1 0.25 0.04037594 1 -0.875 0.04037594 1 -0.75 0.04037594 -1 0.25 0.04037594 -1 -0.75 0.04037594 -1 -0.25 0.04037594 -1 0.75 0.04037594 -1 -0.875 0.04037594 -1 0.125 0.04037594 -1 -0.375 0.04037594 -1 0.625 0.04037594 -1 -0.625 0.04037594 -1 0.375 0.04037594 -1 -0.125 0.04037594 -1 0.875 0.04037594</float_array>
<technique_common>
<accessor source="#Plane-mesh-positions-array" count="64" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-mesh-normals">
<float_array id="Plane-mesh-normals-array" count="18">0 0 -1 0 0 1 0 -1 0 0 1 0 1 0 0 -1 0 0</float_array>
<technique_common>
<accessor source="#Plane-mesh-normals-array" count="6" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-mesh-vertices">
<input semantic="POSITION" source="#Plane-mesh-positions"/>
</vertices>
<polylist material="Material_001-material" count="96">
<input semantic="VERTEX" source="#Plane-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Plane-mesh-normals" offset="1"/>
<vcount>3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 </vcount>
<p>0 0 17 0 30 0 2 0 19 0 28 0 4 0 23 0 24 0 6 0 21 0 26 0 10 0 29 0 18 0 8 0 31 0 16 0 12 0 27 0 20 0 14 0 25 0 22 0 32 1 34 1 63 1 35 1 37 1 62 1 40 1 42 1 60 1 38 1 43 1 61 1 48 1 52 1 57 1 50 1 53 1 56 1 46 1 54 1 58 1 44 1 55 1 59 1 27 2 58 2 20 2 10 3 49 3 13 3 31 2 56 2 16 2 8 3 51 3 15 3 1 4 32 4 17 4 29 2 57 2 18 2 12 3 47 3 11 3 0 3 33 3 1 3 21 2 61 2 26 2 14 3 45 3 9 3 3 4 35 4 19 4 23 2 60 2 24 2 16 5 53 5 8 5 2 3 36 3 3 3 19 2 62 2 28 2 18 5 52 5 10 5 5 4 38 4 21 4 17 2 63 2 30 2 20 5 54 5 12 5 7 4 40 4 23 4 22 5 55 5 14 5 4 3 41 3 7 3 24 5 42 5 4 5 6 3 39 3 5 3 26 5 43 5 6 5 9 4 44 4 25 4 28 5 37 5 2 5 11 4 46 4 27 4 30 5 34 5 0 5 13 4 48 4 29 4 25 2 59 2 22 2 15 4 50 4 31 4 0 0 1 0 17 0 2 0 3 0 19 0 4 0 7 0 23 0 6 0 5 0 21 0 10 0 13 0 29 0 8 0 15 0 31 0 12 0 11 0 27 0 14 0 9 0 25 0 32 1 33 1 34 1 35 1 36 1 37 1 40 1 41 1 42 1 38 1 39 1 43 1 48 1 49 1 52 1 50 1 51 1 53 1 46 1 47 1 54 1 44 1 45 1 55 1 27 2 46 2 58 2 10 3 52 3 49 3 31 2 50 2 56 2 8 3 53 3 51 3 1 4 33 4 32 4 29 2 48 2 57 2 12 3 54 3 47 3 0 3 34 3 33 3 21 2 38 2 61 2 14 3 55 3 45 3 3 4 36 4 35 4 23 2 40 2 60 2 16 5 56 5 53 5 2 3 37 3 36 3 19 2 35 2 62 2 18 5 57 5 52 5 5 4 39 4 38 4 17 2 32 2 63 2 20 5 58 5 54 5 7 4 41 4 40 4 22 5 59 5 55 5 4 3 42 3 41 3 24 5 60 5 42 5 6 3 43 3 39 3 26 5 61 5 43 5 9 4 45 4 44 4 28 5 62 5 37 5 11 4 47 4 46 4 30 5 63 5 34 5 13 4 49 4 48 4 25 2 44 2 59 2 15 4 51 4 50 4</p>
</polylist>
</mesh>
</geometry>
</library_geometries>
<library_controllers/>
<library_visual_scenes>
<visual_scene id="Scene" name="Scene">
<node id="Plane" name="Plane" type="NODE">
<matrix sid="transform">0.125 0 0 0 0 5.333333 0 -0.3333333 0 0 1 0.01986987 0 0 0 1</matrix>
<instance_geometry url="#Plane-mesh" name="Plane">
<bind_material>
<technique_common>
<instance_material symbol="Material_001-material" target="#Material_001-material"/>
</technique_common>
</bind_material>
</instance_geometry>
</node>
</visual_scene>
</library_visual_scenes>
<scene>
<instance_visual_scene url="#Scene"/>
</scene>
</COLLADA>
File diff suppressed because one or more lines are too long
+100
View File
@@ -0,0 +1,100 @@
<?xml version="1.0" encoding="utf-8"?>
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
<asset>
<contributor>
<author>Blender User</author>
<authoring_tool>Blender 2.78.0 commit date:2017-02-24, commit time:14:33, hash:e92f235283</authoring_tool>
</contributor>
<created>2017-09-11T02:12:19</created>
<modified>2017-09-11T02:12:19</modified>
<unit name="meter" meter="1"/>
<up_axis>Z_UP</up_axis>
</asset>
<library_images/>
<library_effects>
<effect id="Material_001-effect">
<profile_COMMON>
<technique sid="common">
<phong>
<emission>
<color sid="emission">0 0 0 1</color>
</emission>
<ambient>
<color sid="ambient">0 0 0 1</color>
</ambient>
<diffuse>
<color sid="diffuse">0 0.2611 7.78272e-5 1</color>
</diffuse>
<specular>
<color sid="specular">0.5 0.5 0.5 1</color>
</specular>
<shininess>
<float sid="shininess">50</float>
</shininess>
<index_of_refraction>
<float sid="index_of_refraction">1</float>
</index_of_refraction>
</phong>
</technique>
</profile_COMMON>
</effect>
</library_effects>
<library_materials>
<material id="Material_001-material" name="Material_001">
<instance_effect url="#Material_001-effect"/>
</material>
</library_materials>
<library_geometries>
<geometry id="Plane-mesh" name="Plane">
<mesh>
<source id="Plane-mesh-positions">
<float_array id="Plane-mesh-positions-array" count="192">-1 1 0 1 1 0 -1 0 0 1 0 0 -1 -0.5 0 1 0.5 0 -1 0.5 0 1 -0.5 0 -1 -0.75 0 1 0.75 0 -1 0.25 0 1 -0.25 0 -1 -0.25 0 1 0.25 0 -1 0.75 0 1 -0.75 0 -1 -0.875 0 1 0.875 0 -1 0.125 0 1 -0.125 0 -1 -0.375 0 1 0.375 0 -1 0.625 0 1 -0.625 0 -1 -0.625 0 1 0.625 0 -1 0.375 0 1 -0.375 0 -1 -0.125 0 1 0.125 0 -1 0.875 0 1 -0.875 0 1 0.875 0.04037594 1 1 0.04037594 -1 1 0.04037594 1 -0.125 0.04037594 1 0 0.04037594 -1 0 0.04037594 1 0.375 0.04037594 1 0.5 0.04037594 1 -0.625 0.04037594 1 -0.5 0.04037594 -1 -0.5 0.04037594 -1 0.5 0.04037594 1 0.625 0.04037594 1 0.75 0.04037594 1 -0.375 0.04037594 1 -0.25 0.04037594 1 0.125 0.04037594 1 0.25 0.04037594 1 -0.875 0.04037594 1 -0.75 0.04037594 -1 0.25 0.04037594 -1 -0.75 0.04037594 -1 -0.25 0.04037594 -1 0.75 0.04037594 -1 -0.875 0.04037594 -1 0.125 0.04037594 -1 -0.375 0.04037594 -1 0.625 0.04037594 -1 -0.625 0.04037594 -1 0.375 0.04037594 -1 -0.125 0.04037594 -1 0.875 0.04037594</float_array>
<technique_common>
<accessor source="#Plane-mesh-positions-array" count="64" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-mesh-normals">
<float_array id="Plane-mesh-normals-array" count="18">0 0 -1 0 0 1 0 -1 0 0 1 0 1 0 0 -1 0 0</float_array>
<technique_common>
<accessor source="#Plane-mesh-normals-array" count="6" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-mesh-vertices">
<input semantic="POSITION" source="#Plane-mesh-positions"/>
</vertices>
<polylist material="Material_001-material" count="96">
<input semantic="VERTEX" source="#Plane-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Plane-mesh-normals" offset="1"/>
<vcount>3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 </vcount>
<p>0 0 17 0 30 0 2 0 19 0 28 0 4 0 23 0 24 0 6 0 21 0 26 0 10 0 29 0 18 0 8 0 31 0 16 0 12 0 27 0 20 0 14 0 25 0 22 0 32 1 34 1 63 1 35 1 37 1 62 1 40 1 42 1 60 1 38 1 43 1 61 1 48 1 52 1 57 1 50 1 53 1 56 1 46 1 54 1 58 1 44 1 55 1 59 1 27 2 58 2 20 2 10 3 49 3 13 3 31 2 56 2 16 2 8 3 51 3 15 3 1 4 32 4 17 4 29 2 57 2 18 2 12 3 47 3 11 3 0 3 33 3 1 3 21 2 61 2 26 2 14 3 45 3 9 3 3 4 35 4 19 4 23 2 60 2 24 2 16 5 53 5 8 5 2 3 36 3 3 3 19 2 62 2 28 2 18 5 52 5 10 5 5 4 38 4 21 4 17 2 63 2 30 2 20 5 54 5 12 5 7 4 40 4 23 4 22 5 55 5 14 5 4 3 41 3 7 3 24 5 42 5 4 5 6 3 39 3 5 3 26 5 43 5 6 5 9 4 44 4 25 4 28 5 37 5 2 5 11 4 46 4 27 4 30 5 34 5 0 5 13 4 48 4 29 4 25 2 59 2 22 2 15 4 50 4 31 4 0 0 1 0 17 0 2 0 3 0 19 0 4 0 7 0 23 0 6 0 5 0 21 0 10 0 13 0 29 0 8 0 15 0 31 0 12 0 11 0 27 0 14 0 9 0 25 0 32 1 33 1 34 1 35 1 36 1 37 1 40 1 41 1 42 1 38 1 39 1 43 1 48 1 49 1 52 1 50 1 51 1 53 1 46 1 47 1 54 1 44 1 45 1 55 1 27 2 46 2 58 2 10 3 52 3 49 3 31 2 50 2 56 2 8 3 53 3 51 3 1 4 33 4 32 4 29 2 48 2 57 2 12 3 54 3 47 3 0 3 34 3 33 3 21 2 38 2 61 2 14 3 55 3 45 3 3 4 36 4 35 4 23 2 40 2 60 2 16 5 56 5 53 5 2 3 37 3 36 3 19 2 35 2 62 2 18 5 57 5 52 5 5 4 39 4 38 4 17 2 32 2 63 2 20 5 58 5 54 5 7 4 41 4 40 4 22 5 59 5 55 5 4 3 42 3 41 3 24 5 60 5 42 5 6 3 43 3 39 3 26 5 61 5 43 5 9 4 45 4 44 4 28 5 62 5 37 5 11 4 47 4 46 4 30 5 63 5 34 5 13 4 49 4 48 4 25 2 44 2 59 2 15 4 51 4 50 4</p>
</polylist>
</mesh>
</geometry>
</library_geometries>
<library_controllers/>
<library_visual_scenes>
<visual_scene id="Scene" name="Scene">
<node id="Plane" name="Plane" type="NODE">
<matrix sid="transform">0.125 0 0 0 0 5.333333 0 -0.3333333 0 0 1 0.01986987 0 0 0 1</matrix>
<instance_geometry url="#Plane-mesh" name="Plane">
<bind_material>
<technique_common>
<instance_material symbol="Material_001-material" target="#Material_001-material"/>
</technique_common>
</bind_material>
</instance_geometry>
</node>
</visual_scene>
</library_visual_scenes>
<scene>
<instance_visual_scene url="#Scene"/>
</scene>
</COLLADA>