OBJ File reader implementation.
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
baec7c6f38
commit
8f7d77dfa8
@ -115,9 +115,9 @@ public class Panel extends JPanel implements Runnable {
|
||||
|
||||
|
||||
triTranslated = (Triangle)triRotatedZX.clone();
|
||||
triTranslated.A.z=triRotatedZX.A.z+3f;
|
||||
triTranslated.B.z=triRotatedZX.B.z+3f;
|
||||
triTranslated.C.z=triRotatedZX.C.z+3f;
|
||||
triTranslated.A.z=triRotatedZX.A.z+6f;
|
||||
triTranslated.B.z=triRotatedZX.B.z+6f;
|
||||
triTranslated.C.z=triRotatedZX.C.z+6f;
|
||||
|
||||
Vector3f normal=new Vector3f(),line1=new Vector3f(),line2=new Vector3f();
|
||||
line1.x=triTranslated.B.x-triTranslated.A.x;
|
||||
@ -142,7 +142,7 @@ public class Panel extends JPanel implements Runnable {
|
||||
l = (float)Math.sqrt(lightDir.x*lightDir.x+lightDir.y*lightDir.y+lightDir.z*lightDir.z);
|
||||
lightDir.x/=l; lightDir.y/=l; lightDir.z/=l;
|
||||
|
||||
float dp = normal.x*lightDir.x+normal.y*lightDir.y+normal.z*lightDir.z;
|
||||
float dp = Math.abs(normal.x*lightDir.x+normal.y*lightDir.y+normal.z*lightDir.z);
|
||||
|
||||
Matrix.MultiplyMatrixVector(triTranslated.A, triProjected.A, SigRenderer.matProj);
|
||||
Matrix.MultiplyMatrixVector(triTranslated.B, triProjected.B, SigRenderer.matProj);
|
||||
|
@ -6,10 +6,12 @@ import javax.vecmath.Tuple3d;
|
||||
import javax.vecmath.Vector3f;
|
||||
|
||||
import sig.utils.DrawUtils;
|
||||
import sig.utils.OBJReader;
|
||||
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;
|
||||
import java.awt.event.MouseMotionListener;
|
||||
import java.io.File;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.awt.event.KeyListener;
|
||||
import java.util.ArrayList;
|
||||
@ -57,21 +59,7 @@ public class SigRenderer implements KeyListener,MouseListener,MouseMotionListene
|
||||
}
|
||||
|
||||
SigRenderer(JFrame f) {
|
||||
cube = new Mesh(Arrays.asList(
|
||||
new Triangle[]{
|
||||
new Triangle(new Vector3f(),new Vector3f(0,1,0),new Vector3f(1,1,0)),
|
||||
new Triangle(new Vector3f(),new Vector3f(1,1,0),new Vector3f(1,0,0)),
|
||||
new Triangle(new Vector3f(1,0,0),new Vector3f(1,1,0),new Vector3f(1,1,1)),
|
||||
new Triangle(new Vector3f(1,0,0),new Vector3f(1,1,1),new Vector3f(1,0,1)),
|
||||
new Triangle(new Vector3f(1,0,1),new Vector3f(1,1,1),new Vector3f(0,1,1)),
|
||||
new Triangle(new Vector3f(1,0,1),new Vector3f(0,1,1),new Vector3f(0,0,1)),
|
||||
new Triangle(new Vector3f(0,0,1),new Vector3f(0,1,1),new Vector3f(0,1,0)),
|
||||
new Triangle(new Vector3f(0,0,1),new Vector3f(0,1,0),new Vector3f(0,0,0)),
|
||||
new Triangle(new Vector3f(0,1,0),new Vector3f(0,1,1),new Vector3f(1,1,1)),
|
||||
new Triangle(new Vector3f(0,1,0),new Vector3f(1,1,1),new Vector3f(1,1,0)),
|
||||
new Triangle(new Vector3f(1,0,1),new Vector3f(0,0,1),new Vector3f(0,0,0)),
|
||||
new Triangle(new Vector3f(1,0,1),new Vector3f(0,0,0),new Vector3f(1,0,0)),
|
||||
}));
|
||||
cube = new Mesh(OBJReader.ReadOBJFile("teapot.obj"));
|
||||
|
||||
Panel p = new Panel();
|
||||
|
||||
|
@ -5,7 +5,7 @@ import java.awt.Color;
|
||||
public class Triangle {
|
||||
Vector3f A,B,C;
|
||||
Color col = Color.WHITE;
|
||||
Triangle(Vector3f A,Vector3f B,Vector3f C) {
|
||||
public Triangle(Vector3f A,Vector3f B,Vector3f C) {
|
||||
this.A=A;
|
||||
this.B=B;
|
||||
this.C=C;
|
||||
|
35
src/sig/utils/FileUtils.java
Normal file
35
src/sig/utils/FileUtils.java
Normal file
@ -0,0 +1,35 @@
|
||||
package sig.utils;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class FileUtils {
|
||||
public static String[] readFromFile(String filename) {
|
||||
File file = new File(filename);
|
||||
//System.out.println(file.getAbsolutePath());
|
||||
List<String> contents= new ArrayList<String>();
|
||||
if (file.exists()) {
|
||||
try(
|
||||
FileReader fw = new FileReader(filename);
|
||||
BufferedReader bw = new BufferedReader(fw);)
|
||||
{
|
||||
String readline = bw.readLine();
|
||||
do {
|
||||
if (readline!=null) {
|
||||
//System.out.println(readline);
|
||||
contents.add(readline);
|
||||
readline = bw.readLine();
|
||||
}} while (readline!=null);
|
||||
fw.close();
|
||||
bw.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return contents.toArray(new String[contents.size()]);
|
||||
}
|
||||
}
|
40
src/sig/utils/OBJReader.java
Normal file
40
src/sig/utils/OBJReader.java
Normal file
@ -0,0 +1,40 @@
|
||||
package sig.utils;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import javax.vecmath.Vector3f;
|
||||
|
||||
import sig.Triangle;
|
||||
|
||||
public class OBJReader {
|
||||
public static List<Triangle> ReadOBJFile(String f) {
|
||||
String[] data = FileUtils.readFromFile(f);
|
||||
List<float[]> vertices = new ArrayList<>();
|
||||
List<Triangle> tris = new ArrayList<>();
|
||||
for (String s : data) {
|
||||
String[] split = s.split(Pattern.quote(" "));
|
||||
if (split[0].equalsIgnoreCase("v")) {
|
||||
vertices.add(new float[]{Float.parseFloat(split[1]),Float.parseFloat(split[2]),Float.parseFloat(split[3])});
|
||||
} else
|
||||
if (split[0].equalsIgnoreCase("f")) {
|
||||
tris.add(new Triangle(
|
||||
new Vector3f(
|
||||
vertices.get(Integer.parseInt(split[1])-1)[0],
|
||||
vertices.get(Integer.parseInt(split[1])-1)[1],
|
||||
vertices.get(Integer.parseInt(split[1])-1)[2]),
|
||||
new Vector3f(
|
||||
vertices.get(Integer.parseInt(split[2])-1)[0],
|
||||
vertices.get(Integer.parseInt(split[2])-1)[1],
|
||||
vertices.get(Integer.parseInt(split[2])-1)[2]),
|
||||
new Vector3f(
|
||||
vertices.get(Integer.parseInt(split[3])-1)[0],
|
||||
vertices.get(Integer.parseInt(split[3])-1)[1],
|
||||
vertices.get(Integer.parseInt(split[3])-1)[2])));
|
||||
}
|
||||
}
|
||||
return tris;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user