Hey there! I wrote an obj reader in java, i think it works properly, but my textures on my object are backfaced. I exported the obj file from 3ds max. How can i fix this? Here’s my obj reading class:
package szakdoga_real;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Mesh {
private Vector<Float[]> vertices;
private Vector<Float[]> normals;
private Vector<Float[]> textures;
private Vector<Integer[]> vIndex;
private Vector<Integer[]> tIndex;
private Vector<Integer[]> nIndex;
public Mesh(String filePath){
Scanner scanner;
String line;
vertices = new Vector<Float[]>();
normals = new Vector<Float[]>();
textures = new Vector<Float[]>();
vIndex = new Vector<Integer[]>();
tIndex = new Vector<Integer[]>();
nIndex = new Vector<Integer[]>();
try {
scanner = new Scanner(new File(filePath));
while(scanner.hasNext()){
line = scanner.nextLine();
String tempStrAr1[] = line.split("\\s+");
if(tempStrAr1[0].equals("v")){
Float[] tempFloatAr = new Float[3];
for(int i = 1; i < 4; ++i){
tempFloatAr[i-1] = Float.parseFloat(tempStrAr1[i]);
}
vertices.add(tempFloatAr);
}
else if(tempStrAr1[0].equals("vn")){
Float[] tempFloatAr = new Float[3];
for(int i = 1; i < 4; ++i){
tempFloatAr[i-1] = Float.parseFloat(tempStrAr1[i]);
}
normals.add(tempFloatAr);
}
else if(tempStrAr1[0].equals("vt")){
Float[] tempFloatAr = new Float[3];
for(int i = 1; i < 4; ++i){
tempFloatAr[i-1] = Float.parseFloat(tempStrAr1[i]);
}
textures.add(tempFloatAr);
}
else if(tempStrAr1[0].equals("f")){
Integer tempIntVAr[] = new Integer[3];
Integer tempIntTAr[] = new Integer[3];
Integer tempIntNAr[] = new Integer[3];
for(int i = 0; i < 3; ++i){
String tempStrAr2[] = tempStrAr1[i+1].split("/");
tempIntVAr[i] = Integer.parseInt(tempStrAr2[0]);
tempIntTAr[i] = Integer.parseInt(tempStrAr2[1]);
tempIntNAr[i] = Integer.parseInt(tempStrAr2[2]);
}
Integer[] strar = new Integer[3];
for(int i=0; i < 3; ++i){
strar[i] = tempIntTAr[i];
}
//tempIntTAr[0] = strar[2];
//tempIntTAr[1] = strar[1];
// tempIntTAr[2] = strar[0];
vIndex.add(tempIntVAr);
tIndex.add(tempIntTAr);
nIndex.add(tempIntNAr);
}
}
} catch (FileNotFoundException ex) {
Logger.getLogger(Szakdoga_real.class.getName()).log(Level.SEVERE, null, ex);
}
}