Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import peasy.*;
- int MODEL_SPHERE = 1;
- int MODEL_CUBE = 2;
- boolean lights = false;
- PeasyCam cam;
- ArrayList<Model> view;
- ArrayList<Material> materials;
- void setup() {
- view = new ArrayList<Model>();
- materials = new ArrayList<Material>();
- cam = new PeasyCam(this, 800);
- noStroke();
- view.add(new Model(MODEL_SPHERE));
- materials.add(new Material(loadImage("data/earth.jpg")));
- view.get(0).wrap(materials.get(0));
- }
- void settings() {
- size(800, 600, P3D);
- }
- void draw() {
- background(51);
- if(lights) {
- lights();
- }
- fill(255);
- for(Model m: view) {
- m.show();
- }
- }
- void keyPressed() {
- if(key == 'a') {
- lights = !lights;
- }
- if(key == 'l') {
- view = new ArrayList<Model>();
- materials = new ArrayList<Material>();
- String[] data;
- data = loadStrings("save.mso");
- boolean ino = false;
- int type = 0;
- PVector[] vertexes = new PVector[0];
- color[] image;
- Model t_model = new Model();
- for(int i = 0; i < data.length; i++) {
- if(data[i].equals("Model")) {
- ino = true;
- type = 1;
- }
- if(data[i].equals("end_model")) {
- t_model.vector_construct(vertexes);
- view.add(t_model);
- vertexes = new PVector[0];
- }
- if(ino && data[i].equals("vertex") && type == 1) {
- vertexes = (PVector[]) append(vertexes, new PVector(float(data[i+1]), float(data[i+2]), float(data[i+3])));
- }
- if(data[i].equals("use_material")) {
- if(getMaterial(data[i+1]) != null) {
- t_model.wrap(getMaterial(data[i+1]));
- } else {
- }
- }
- }
- }
- if(key == 'c') {
- view = new ArrayList<Model>();
- materials = new ArrayList<Material>();
- }
- if(key == 's') {
- PrintWriter file = createWriter("save.mso");
- for(Material m: materials) {
- file.println("Material");
- file.println(m.label);
- file.println("Size");
- PImage im = m.img;
- file.println(im.width);
- file.println(im.height);
- im.loadPixels();
- for(int i = 0; i < im.pixels.length; i++) {
- file.println("Pixel");
- file.println(red(im.pixels[i]));
- file.println(blue(im.pixels[i]));
- file.println(green(im.pixels[i]));
- }
- file.println("End Material");
- }
- for(Model m: view) {
- PShape obj = m.object;
- file.println("Model");
- if(m.m != null) {
- file.println("use_material");
- file.println(m.m.label);
- }
- for(int i = 0; i < obj.getVertexCount(); i++) {
- PVector v = obj.getVertex(i);
- file.println("vertex");
- file.println(v.x);
- file.println(v.y);
- file.println(v.z);
- }
- file.println("End Model");
- }
- }
- }
- String generateRandomString() {
- String s = "";
- for(int i = 0; i < 16; i++) {
- char c = (char) int(random(33, 127));
- s += c;
- }
- return s;
- }
- Material getMaterial(String l) {
- Material m = null;
- for(Material mi: materials) {
- if(mi.label.equals(l)) {
- m = mi;
- }
- }
- return m;
- }
- class Material {
- PImage img;
- String label;
- Material(PImage i) {
- img = i;
- label = generateRandomString();
- }
- Material(PImage i, String l) {
- img = i;
- label = l;
- }
- }
- class Model {
- PVector pos;
- PShape object;
- Material m = null;
- Model() {
- }
- Model(int type) {
- pos = new PVector(0, 0, 0);
- object = new PShape();
- if(type == 1) {
- object = createShape(SPHERE, 100);
- } else if(type == 2) {
- object = createShape(BOX, 100);
- }
- }
- Model(PVector[] vectors) {
- pos = new PVector(0, 0, 0);
- object = new PShape();
- object.beginShape();
- for(int i = 0; i < vectors.length; i++) {
- object.vertex(vectors[i].x, vectors[i].y, vectors[i].z);
- }
- object.endShape();
- }
- void show() {
- pushMatrix();
- translate(pos.x, pos.y, pos.z);
- shape(object);
- popMatrix();
- }
- void wrap(Material m) {
- object.setTexture(m.img);
- this.m = m;
- }
- void vector_construct(PVector[] vectors) {
- pos = new PVector(0, 0, 0);
- object = new PShape();
- PShape temp = new PShape();
- object.beginShape();
- for(int i = 0; i < vectors.length; i++) {
- object.vertex(vectors[i].x, vectors[i].y, vectors[i].z);
- }
- object.endShape();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement