[Vertex, Gl] Не корректный рендер модели (pmx)

Версия Minecraft
1.7+
317
10
Всем доброго времени суток!
Я пытаюсь отрендерить pmx модель. Вроде работает, но криво. Сам баг видно на этих скринах:
Screenshot
Screenshot
Все меняется, когда меняю значение в этой строке. GL11.glBegin(2);
Вот так должно быть: Screenshot

С гл я не особо знаком, очень надеюсь на Вашу помощь. (даже если и платно)
p.s Так-же, если Вы знаете, как сделать анимацию этих моделей с помощью .vmd анимаций - отпишите, пожалуйста, и оставьте какой-то способ связаться с Вами.

Java:
try {
            if(data==null)data = Reader.read(new File("Izayoi_Sakuya_Ver2.10.pmx"));
            XVertex[] vs = data.getVertices();
            Face[] fs = data.getFaces();
            XMaterial[] ms = data.getMaterials();
          
            GL11.glPushMatrix();
            glEnable(GL_TEXTURE_2D);
            GL11.glTranslatef(this.width/2, this.height-1, 1);
            float scale = 12;
            GL11.glScalef(scale, scale, 1);
            GL11.glRotatef(180, 1, 0, 0);
            GL11.glRotatef(System.currentTimeMillis()/10%360, 0, 1, 0);
            GL11.glColor4f(1, 1, 1, 1);
            glEnable(GL11.GL_BLEND);
            GL11.glBlendFunc(770, 771);
          
            for (int i = 0, v = 0; i < ms.length; i++) {
                XMaterial m = ms[i];
                GL11.glPushMatrix();
                int id = 0;
                if(!map.containsKey(data.getTextures()[m.getTexture()])) {
                    String form = data.getTextures()[m.getTexture()].endsWith(".png") ? "PNG" : "BMP";
                    Texture t2 = TextureLoader.getTexture(form, new FileInputStream("Izayoi_Sakuya_Ver2.10/"+data.getTextures()[m.getTexture()]));
                    id = t2.getTextureID();
                    map.put(data.getTextures()[m.getTexture()], id);
                } else {
                    id = map.get(data.getTextures()[m.getTexture()]);
                }
                glBindTexture(GL_TEXTURE_2D, id);
              
                for (int j = 0; j < m.getBoundFace() / 3; j++, v++) {
                    GL11.glBegin(2);
                    Face f = fs[v];
                    GL11.glTexCoord2f(vs[(int) f.getV1()].getU(), vs[(int) f.getV1()].getV());
                    GL11.glVertex3d(vs[(int) f.getV1()].getX(), vs[(int) f.getV1()].getY(),vs[(int) f.getV1()].getZ());
                    GL11.glTexCoord2f(vs[(int) f.getV2()].getU(), vs[(int) f.getV2()].getV());
                    GL11.glVertex3d(vs[(int) f.getV2()].getX(), vs[(int) f.getV2()].getY(),vs[(int) f.getV2()].getZ());
                    GL11.glTexCoord2f(vs[(int) f.getV3()].getU(), vs[(int) f.getV3()].getV());
                    GL11.glVertex3d(vs[(int) f.getV3()].getX(), vs[(int) f.getV3()].getY(),vs[(int) f.getV3()].getZ());
                    GL11.glEnd();
                }
                GL11.glPopMatrix();
            }
            GL11.glPopMatrix();
        } catch(Exception ex) {
            ex.printStackTrace();
        }
 
Последнее редактирование:
1,976
68
220
Ты где такое извращение надыбал и на кой оно тебе?
Очень сомневаюсь, что кто-то такое в майн вообще суёт, соответственно, и помочь мало кто сможет.
Совет как смогут помочь:
1. Используй .obj для самой модельки
2. Для анимации можешь либо ручками через код вращать (что будет ущербно на все 102%), либо использовать самописные/сторонние библиотеки, по типу вот этой (*тык*)

Возможно поможет: триангулируй свою модель, если эта твоя .pmx вообще умеет в такую вещь ._.
 
317
10
Проблема с отображением была исправлена, просто поменял вертексы местами, но есть еще одна трабла.
Из-за того что в моделе около 43 тысячи вертексов - просадка сильная идет при рендере 10-15 моделей. Как можно оптимизировать?..
 

mod

156
2
12
я походу знаю, скорее всего это из mmd, а на скринах проблема, которой и mmd просто трындец как страдает - постоянно нормали в шашечку, вот ща сам вали к примеру в blender, или как ты там портал это в obj, и в ручную переворачивай нормали
 

mod

156
2
12
про оптимизацию: иди в 3д редактор, и ОПТИМИЗИРУЙ! у тебя 43к БЛЭТ ПОЛИГОНОВ, для аниме девочек и 10к хватит, а главное - это всё рассчитано на костную анимацию симуляцию ткани и гуд рендер, ты считай мопед танком буксуешь, а ещё жалуешься
 
2,505
81
397
Во-первых, он же уже решил проблемы с отображением, как я понял. Во-вторых, причем тут нормали? В-третьих, он их вообще не использует. И причем тут obj модель?

Ускорить можно хотя бы используя тесселятор. Если модель статическая, то обернуть в glList. Если нужна анимация, то все нужно совсем по-другому.
 

mod

156
2
12
vmd то? писец, я это просто не прочёл, но блин, он не просто юзал косячную модель для ммд (просто со стороны геометрии, практически все модели для ммд- косячные), так ещё её не портировал в obj
 
317
10
Отображение работает как надо, поменял верткесы на тесселятор, но особо прироста не было.
Один человек предложил мне это сделать на VAO. Но я вообще не знаю как это работает и как это пилить, есть мб у кого-то туторы заныканы или кто поможет за денюжку?
П.с Если запилить этот "вао" будет работать передвижение вертексов по ходу игры? Т.е я активирую анимацию и корды у определенных вертексов начинают передвигаться(это ведь так работает?)
 

Icosider

Kotliner
Администратор
3,603
99
664
Анимацию можно сбоку прикрутить, она совсем не влияет на данные вершин.
Но кому такой геморой нужен, когда есть коллада, фбх и т.п. форматы. Хотя если для нормального проекта, то можно и свой придумать формат, но опять же, зачем.
 

Icosider

Kotliner
Администратор
3,603
99
664
Они не только модель содержат, а сцену. Освещение и пр. Вспомни блендер. Я бы использовал свой формат, либо формат, который нашел на гите.
Да, точно, можно подзапариться и написать небольшую программу/плагин(для блендера) чтобы из формата убиралось всё не нужное. Но всё же соглашусь с отдельным форматом. Хотя даже тот же обж+анимация было б достаточно, просто в двух файлах хранить, да даже в том же txt, только тут уже вопрос встанет как туда перенести анимацию(писать плагин или использовать то что есть в других форматах)
 

Icosider

Kotliner
Администратор
3,603
99
664
Один человек предложил мне это сделать на VAO. Но я вообще не знаю как это работает и как это пилить, есть мб у кого-то туторы заныканы или кто поможет за денюжку?
Про вао в интернете статей навалом, даже тот же opengl-tutorial.org.
П.с Если запилить этот "вао" будет работать передвижение вертексов по ходу игры? Т.е я активирую анимацию и корды у определенных вертексов начинают передвигаться(это ведь так работает?)
Нет не так работает, у тебя анимация состоит из кадров, соответственно тебе нужно пропарсить файл с анимацией, достать её(анимацию) и разделить на кадры, затем менять их.
 
Сверху