기본적으로 당신은 class OBJModel
같은 것을 만들 수 다음 파면 된 .obj 파일을로드하고 class OBJModel
의 인스턴스를 반환하는 OBJModelLoader.load(final InputStream is);
있습니다. 당신이 내부의 어떤 모든 일을 알고하지 않으면 class OBJModel
내
, 당신은 모델
로드 등 정점, 법선, 텍스처 좌표,면, 재료,
를 저장하는 몇 가지 배열을 가질 것
:
.OBJ 파일 수단은, 당신은 당신이
OBJModel load()
방법을 얼마나 그냥 아이디어를 제공하기 위해
Wikipedia click here 에 대한 모든 것을 읽을 수 있습니다, 여기에 생각이다
public final static OBJModel load(final InputStream is)
{
final OBJModel model = new OBJModel();
try (final BufferedReader br = new BufferedReader(new InputStreamReader(is)))
{
String line;
while ((line = br.readLine()) != null)
{
if (line.isEmpty() || (line.charAt(0) == '#'))
{
continue;
}
if (line.contains("#"))
{
line = line.substring(0, line.indexOf('#'));
}
line = line.trim();
if (line.isEmpty())
{
continue;
}
if (line.startsWith("v "))
{
String[] xyz = line.split(" ");
float x = Float.parseFloat(xyz[1]);
float y = Float.parseFloat(xyz[2]);
float z = Float.parseFloat(xyz[3]);
model.addVertex(x, y, z);
continue;
}
else if (line.startsWith("vn "))
{
String[] xyz = line.split(" ");
float x = Float.parseFloat(xyz[1]);
float y = Float.parseFloat(xyz[2]);
float z = Float.parseFloat(xyz[3]);
model.addNormal(x, y, z);
continue;
}
else if (line.startsWith("vt "))
{
String[] uv = line.split(" ");
float u = Float.parseFloat(uv[1]);
float v = Float.parseFloat(uv[2]);
model.addTextureCoordinate(u, v);
continue;
}
else if (line.startsWith("f "))
{
나는 당신에게 당신이 그것을 어떻게 완성해야하는지에 대한 아이디어를주기 위해 이것을 만들었습니다. 당신은 텍스처 좌표 정점을 렌더링 할 때 정기적으로 할 것이다 당신이 모델을 렌더링 할 때 모델
렌더링
는
잘 단지를 않습니다.
블렌더는 모든 올바른 텍스처 좌표를 제공하므로 모든 꼭지점을 텍스처 좌표로 렌더링하기 전에 블렌드해야합니다.
사용중인 OpenGL의 버전에 따라 다르지만 모델 저장 및 렌더링에는 VAOs
을 사용하는 것이 좋습니다. VAOs
을 사용할 수없는 경우 gl*Pointer
호출을 사용하여 일반 VBOs
을 사용하고 렌더링에는 직접 모드를 사용하지 마십시오.
그래서 무엇을 시도 했습니까? – Vallentin
@Vallentin 나는이 사람과 똑같은 일을하려하고있다. LWJGL에서 내 .OBJ 3D 모델에 텍스처를로드하는 데 도움이 필요합니다. 지금까지 Slick-Util 텍스처 로더를 사용해 보았습니다.하지만 (질문에서 언급했듯이) 큐브에서만 작동하는 것 같습니다 : c Idk 다른 것을 시도해보십시오. 저는 여기 뉴비입니다. 정말로 힘들어합니다. 내 머리카락을 당길 준비가되었습니다. D ': – FreelanceCoder
@FreelanceCoder는 내 대답을 읽으면서 그것을하는 방법에 대한 아이디어를 줄 것입니다. – Vallentin