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 = (Triangle)triRotatedZX.clone();
|
||||||
triTranslated.A.z=triRotatedZX.A.z+3f;
|
triTranslated.A.z=triRotatedZX.A.z+6f;
|
||||||
triTranslated.B.z=triRotatedZX.B.z+3f;
|
triTranslated.B.z=triRotatedZX.B.z+6f;
|
||||||
triTranslated.C.z=triRotatedZX.C.z+3f;
|
triTranslated.C.z=triRotatedZX.C.z+6f;
|
||||||
|
|
||||||
Vector3f normal=new Vector3f(),line1=new Vector3f(),line2=new Vector3f();
|
Vector3f normal=new Vector3f(),line1=new Vector3f(),line2=new Vector3f();
|
||||||
line1.x=triTranslated.B.x-triTranslated.A.x;
|
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);
|
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;
|
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.A, triProjected.A, SigRenderer.matProj);
|
||||||
Matrix.MultiplyMatrixVector(triTranslated.B, triProjected.B, SigRenderer.matProj);
|
Matrix.MultiplyMatrixVector(triTranslated.B, triProjected.B, SigRenderer.matProj);
|
||||||
|
@ -6,10 +6,12 @@ import javax.vecmath.Tuple3d;
|
|||||||
import javax.vecmath.Vector3f;
|
import javax.vecmath.Vector3f;
|
||||||
|
|
||||||
import sig.utils.DrawUtils;
|
import sig.utils.DrawUtils;
|
||||||
|
import sig.utils.OBJReader;
|
||||||
|
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
import java.awt.event.MouseListener;
|
import java.awt.event.MouseListener;
|
||||||
import java.awt.event.MouseMotionListener;
|
import java.awt.event.MouseMotionListener;
|
||||||
|
import java.io.File;
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
import java.awt.event.KeyListener;
|
import java.awt.event.KeyListener;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -57,21 +59,7 @@ public class SigRenderer implements KeyListener,MouseListener,MouseMotionListene
|
|||||||
}
|
}
|
||||||
|
|
||||||
SigRenderer(JFrame f) {
|
SigRenderer(JFrame f) {
|
||||||
cube = new Mesh(Arrays.asList(
|
cube = new Mesh(OBJReader.ReadOBJFile("teapot.obj"));
|
||||||
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)),
|
|
||||||
}));
|
|
||||||
|
|
||||||
Panel p = new Panel();
|
Panel p = new Panel();
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ import java.awt.Color;
|
|||||||
public class Triangle {
|
public class Triangle {
|
||||||
Vector3f A,B,C;
|
Vector3f A,B,C;
|
||||||
Color col = Color.WHITE;
|
Color col = Color.WHITE;
|
||||||
Triangle(Vector3f A,Vector3f B,Vector3f C) {
|
public Triangle(Vector3f A,Vector3f B,Vector3f C) {
|
||||||
this.A=A;
|
this.A=A;
|
||||||
this.B=B;
|
this.B=B;
|
||||||
this.C=C;
|
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