基本上你可以創造一些像class OBJModel
,然後有它加載波前obj文件並返回class OBJModel
實例的OBJModelLoader.load(final InputStream is);
。
內class OBJModel
,你會有些存儲陣列頂點,法線紋理座標,面,材料等
加載模型
如果你不知道什麼是所有裏面的那些事.OBJ文件的手段,那麼你可以閱讀所有關於它的Wikipedia click here
只給一個想法,你會怎麼做OBJModel load()
方法,這裏是一個想法:
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 "))
{
因爲我只是讓你知道如何製作它,你必須自己完成它。
渲染模型
當你想渲染模型,以及剛做,你會經常做的時候,你會渲染紋理座標頂點。
攪拌器提供所有正確的紋理座標,因此您需要做的唯一事情就是在渲染具有紋理座標的所有頂點之前綁定紋理。
我會推薦使用VAOs
來存儲和渲染模型,儘管它取決於您使用的OpenGL版本。如果您不能使用VAOs
,則只需使用gl*Pointer
調用即可使用常規VBOs
,但不要使用即時模式進行渲染。
那麼你有什麼嘗試? – Vallentin
@Vallentin我正在嘗試做與這個人完全相同的東西。我需要幫助將紋理加載到LWJGL中的.OBJ 3D模型中。到目前爲止,我已經嘗試過使用Slick-Util紋理加載器,但是(如問題中所述)似乎只適用於多維數據集:c Idk還有什麼其他的嘗試,我是一個新手,真的很掙扎。準備好現在拉我的頭髮D': – FreelanceCoder
@FreelanceCoder閱讀我的答案,它會給你如何去做的想法。 – Vallentin