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

Версия Minecraft
1.7+
318
12
Всем доброго времени суток!
Я пытаюсь отрендерить 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. Используй .obj для самой модельки
2. Для анимации можешь либо ручками через код вращать (что будет ущербно на все 102%), либо использовать самописные/сторонние библиотеки, по типу вот этой (*тык*)

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

Ускорить можно хотя бы используя тесселятор. Если модель статическая, то обернуть в glList. Если нужна анимация, то все нужно совсем по-другому.
 
vmd то? писец, я это просто не прочёл, но блин, он не просто юзал косячную модель для ммд (просто со стороны геометрии, практически все модели для ммд- косячные), так ещё её не портировал в obj
 
Отображение работает как надо, поменял верткесы на тесселятор, но особо прироста не было.
Один человек предложил мне это сделать на VAO. Но я вообще не знаю как это работает и как это пилить, есть мб у кого-то туторы заныканы или кто поможет за денюжку?
П.с Если запилить этот "вао" будет работать передвижение вертексов по ходу игры? Т.е я активирую анимацию и корды у определенных вертексов начинают передвигаться(это ведь так работает?)
 
Анимацию можно сбоку прикрутить, она совсем не влияет на данные вершин.
Но кому такой геморой нужен, когда есть коллада, фбх и т.п. форматы. Хотя если для нормального проекта, то можно и свой придумать формат, но опять же, зачем.
 
Они не только модель содержат, а сцену. Освещение и пр. Вспомни блендер. Я бы использовал свой формат, либо формат, который нашел на гите.
Да, точно, можно подзапариться и написать небольшую программу/плагин(для блендера) чтобы из формата убиралось всё не нужное. Но всё же соглашусь с отдельным форматом. Хотя даже тот же обж+анимация было б достаточно, просто в двух файлах хранить, да даже в том же txt, только тут уже вопрос встанет как туда перенести анимацию(писать плагин или использовать то что есть в других форматах)
 
Один человек предложил мне это сделать на VAO. Но я вообще не знаю как это работает и как это пилить, есть мб у кого-то туторы заныканы или кто поможет за денюжку?
Про вао в интернете статей навалом, даже тот же opengl-tutorial.org.
П.с Если запилить этот "вао" будет работать передвижение вертексов по ходу игры? Т.е я активирую анимацию и корды у определенных вертексов начинают передвигаться(это ведь так работает?)
Нет не так работает, у тебя анимация состоит из кадров, соответственно тебе нужно пропарсить файл с анимацией, достать её(анимацию) и разделить на кадры, затем менять их.
 
Назад
Сверху