This is a read only copy without any forum functionality of the old Modcraft forum.
If there is anything that you would like to have removed, message me on Discord via Kaev#5208.
Big thanks to Alastor for making this copy!

Menu

Author Topic: [Solved][M2] What is the order of vertices ?  (Read 1454 times)

Unbreakables

  • Registred Member
  • GM Isle Explorer
  • *****
  • Posts: 21
    • View Profile
[Solved][M2] What is the order of vertices ?
« on: March 24, 2019, 07:17:03 am »
Hello everyone !

I'm working on display a M2 model (3.3.5) on a OpenGL/C++ program, and I have a problem with faces.


Vertices seem at the good place, but I don't understand what is the order of vertices (or if there is a order) to draw triangle faces. I tried several option of the draw function of OpenGL, but nothing seem working. I tried to extract vertices in sequence and in reverse.

I try to find some extra documentation but I'm very neophyte in 3D and I don't know what I must looking for exacly. If you have some hints on the problem, I'd greatly appreciate it.
« Last Edit: March 26, 2019, 05:22:02 pm by Unbreakables »

schlumpf

  • Administrator
  • Creator of Worlds
  • *****
  • Posts: 2967
    • View Profile
Re: [M2] What is the order of vertices ?
« Reply #1 on: March 24, 2019, 09:21:50 am »
I guess you missed the fact that there is an indices block? Vertices are used multiple times and the order in the vertices block is random.

https://wowdev.wiki/M2/.skin#Indices and the triangles block define the order.

Unbreakables

  • Registred Member
  • GM Isle Explorer
  • *****
  • Posts: 21
    • View Profile
Re: [M2] What is the order of vertices ?
« Reply #2 on: March 24, 2019, 09:54:04 am »
Ah okay, it works like this. It's exacly what I need, thanks !

Unbreakables

  • Registred Member
  • GM Isle Explorer
  • *****
  • Posts: 21
    • View Profile
Re: [M2] What is the order of vertices ?
« Reply #3 on: March 25, 2019, 05:46:34 pm »
For faces, it seem working. For each triangles, I put vertices coords in a array and use VertexAttribArray to send it to GL. I tried to do  the same thing with textures coords, but this make a true puzzle.


I surely do something in the wrong way but I don't see other mention of textures coords in the wiki.

schlumpf

  • Administrator
  • Creator of Worlds
  • *****
  • Posts: 2967
    • View Profile
Re: [M2] What is the order of vertices ?
« Reply #4 on: March 25, 2019, 06:31:02 pm »
Sorry, can’t really help there. If the vertices are correct the texcoords right next to them should be. After all it isn’t even a separate list.

Without code I’m not sure how we could help here.

Unbreakables

  • Registred Member
  • GM Isle Explorer
  • *****
  • Posts: 21
    • View Profile
Re: [M2] What is the order of vertices ?
« Reply #5 on: March 25, 2019, 08:13:38 pm »
Yes of course, here the source code (I translated in english all coms) : https://gitlab.com/Alizia/alkape (I put it in private, the time to finish it :p)

Some precisions :
- The project is only config for Release 64 mode (for the moment)
- m2/skin is in x64/Release/3Dmodel
- blp texture is in mpq folder (converted to png with BLP2PNG, sfml don't support blp texture)

- The function that get vertices and textures coords from triangles is M2Data::createOrderedVertices() in m2.cpp


A output of vertrices indices and textures coords... All looks consistant.
Code: [Select]
Triangles 0
i1 : 0
i2 : 1
i3 : 2

Triangles 1
i1 : 3
i2 : 4
i3 : 5

Triangles 2
i1 : 6
i2 : 5
i3 : 4

Triangles 3
i1 : 7
i2 : 8
i3 : 9

Triangles 4
i1 : 10
i2 : 9
i3 : 8

Triangles 5
i1 : 11
i2 : 12
i3 : 13

Triangles 6
i1 : 14
i2 : 11
i3 : 15

Triangles 7
i1 : 16
i2 : 15
i3 : 11

Triangles 8
i1 : 13
i2 : 16
i3 : 11

Triangles 9
i1 : 17
i2 : 18
i3 : 19

Triangles 10
i1 : 20
i2 : 19
i3 : 18

Triangles 11
i1 : 18
i2 : 21
i3 : 22

Triangles 12
i1 : 23
i2 : 22
i3 : 21

Triangles 13
i1 : 24
i2 : 25
i3 : 26

Triangles 14
i1 : 27
i2 : 26
i3 : 25

Triangles 15
i1 : 28
i2 : 29
i3 : 30

Triangles 16
i1 : 30
i2 : 31
i3 : 28

Triangles 17
i1 : 32
i2 : 33
i3 : 34

Triangles 18
i1 : 34
i2 : 35
i3 : 32

Triangles 19
i1 : 36
i2 : 37
i3 : 34

Triangles 20
i1 : 34
i2 : 31
i3 : 36

Triangles 21
i1 : 38
i2 : 39
i3 : 40

Triangles 22
i1 : 41
i2 : 40
i3 : 39

Triangles 23
i1 : 42
i2 : 43
i3 : 38

Triangles 24
i1 : 44
i2 : 38
i3 : 43

Triangles 25
i1 : 43
i2 : 45
i3 : 44

Triangles 26
i1 : 46
i2 : 44
i3 : 45

Triangles 27
i1 : 47
i2 : 48
i3 : 49

Triangles 28
i1 : 50
i2 : 49
i3 : 48

Triangles 29
i1 : 48
i2 : 51
i3 : 50

Triangles 30
i1 : 52
i2 : 50
i3 : 51

Triangles 31
i1 : 53
i2 : 54
i3 : 55

Triangles 32
i1 : 56
i2 : 55
i3 : 54

Triangles 33
i1 : 54
i2 : 57
i3 : 56

Triangles 34
i1 : 58
i2 : 56
i3 : 57

Triangles 35
i1 : 59
i2 : 60
i3 : 61

Triangles 36
i1 : 62
i2 : 61
i3 : 60

Triangles 37
i1 : 63
i2 : 64
i3 : 65

Triangles 38
i1 : 66
i2 : 65
i3 : 64

Triangles 39
i1 : 64
i2 : 62
i3 : 66

Triangles 40
i1 : 67
i2 : 66
i3 : 62

Triangles 41
i1 : 68
i2 : 69
i3 : 70

Triangles 42
i1 : 71
i2 : 70
i3 : 69

Triangles 43
i1 : 69
i2 : 72
i3 : 71

Triangles 44
i1 : 73
i2 : 71
i3 : 72

Triangles 45
i1 : 74
i2 : 75
i3 : 76

Triangles 46
i1 : 76
i2 : 77
i3 : 74

Triangles 47
i1 : 2
i2 : 78
i3 : 79

Triangles 48
i1 : 79
i2 : 80
i3 : 2

Triangles 49
i1 : 2
i2 : 75
i3 : 0
Code: [Select]
Triangles 0
C1 x : 0.015625 y :0.984375
C2 x : 0.984375 y :0.984375
C3 x : 0.984375 y :0.015625

Triangles 1
C1 x : 0.984375 y :0.984375
C2 x : 0.015625 y :0.984375
C3 x : 0.984375 y :0.015625

Triangles 2
C1 x : 0.015625 y :0.015625
C2 x : 0.984375 y :0.015625
C3 x : 0.015625 y :0.984375

Triangles 3
C1 x : 0.984375 y :0.984375
C2 x : 0.984375 y :0.015625
C3 x : 0.015625 y :0.984375

Triangles 4
C1 x : 0.015625 y :0.015625
C2 x : 0.015625 y :0.984375
C3 x : 0.984375 y :0.015625

Triangles 5
C1 x : 0.984375 y :0.984375
C2 x : 0.015625 y :0.984375
C3 x : 0.015625 y :0.015625

Triangles 6
C1 x : 0.015625 y :0.984375
C2 x : 0.984375 y :0.984375
C3 x : 0.015625 y :0.015625

Triangles 7
C1 x : 0.984375 y :0.015625
C2 x : 0.015625 y :0.015625
C3 x : 0.984375 y :0.984375

Triangles 8
C1 x : 0.015625 y :0.015625
C2 x : 0.984375 y :0.015625
C3 x : 0.984375 y :0.984375

Triangles 9
C1 x : 0.015625 y :0.984375
C2 x : 0.984375 y :0.984375
C3 x : 0.015625 y :0.015625

Triangles 10
C1 x : 0.984375 y :0.015625
C2 x : 0.015625 y :0.015625
C3 x : 0.984375 y :0.984375

Triangles 11
C1 x : 0.984375 y :0.984375
C2 x : 0.984375 y :0.015625
C3 x : 0.015625 y :0.984375

Triangles 12
C1 x : 0.015625 y :0.015625
C2 x : 0.015625 y :0.984375
C3 x : 0.984375 y :0.015625

Triangles 13
C1 x : 0.816585 y :0.816585
C2 x : 0.183415 y :0.816585
C3 x : 0.612337 y :0.183415

Triangles 14
C1 x : 0.387663 y :0.183415
C2 x : 0.612337 y :0.183415
C3 x : 0.183415 y :0.816585

Triangles 15
C1 x : 0.984375 y :0.015625
C2 x : 0.015625 y :0.015625
C3 x : 0.015625 y :0.984375

Triangles 16
C1 x : 0.015625 y :0.984375
C2 x : 0.984375 y :0.984375
C3 x : 0.984375 y :0.015625

Triangles 17
C1 x : 0.984375 y :0.015625
C2 x : 0.015625 y :0.015625
C3 x : 0.015625 y :0.984375

Triangles 18
C1 x : 0.015625 y :0.984375
C2 x : 0.984375 y :0.984375
C3 x : 0.984375 y :0.015625

Triangles 19
C1 x : 0.984375 y :0.015625
C2 x : 0.015625 y :0.015625
C3 x : 0.015625 y :0.984375

Triangles 20
C1 x : 0.015625 y :0.984375
C2 x : 0.984375 y :0.984375
C3 x : 0.984375 y :0.015625

Triangles 21
C1 x : 0.984375 y :0.984375
C2 x : 0.984375 y :0.015625
C3 x : 0.015625 y :0.984375

Triangles 22
C1 x : 0.015625 y :0.015625
C2 x : 0.015625 y :0.984375
C3 x : 0.984375 y :0.015625

Triangles 23
C1 x : 0.984375 y :0.015625
C2 x : 0.015625 y :0.015625
C3 x : 0.984375 y :0.984375

Triangles 24
C1 x : 0.015625 y :0.984375
C2 x : 0.984375 y :0.984375
C3 x : 0.015625 y :0.015625

Triangles 25
C1 x : 0.015625 y :0.015625
C2 x : 0.984375 y :0.015625
C3 x : 0.015625 y :0.984375

Triangles 26
C1 x : 0.984375 y :0.984375
C2 x : 0.015625 y :0.984375
C3 x : 0.984375 y :0.015625

Triangles 27
C1 x : 0.984375 y :0.453125
C2 x : 0.015625 y :0.453125
C3 x : 0.984375 y :0.984375

Triangles 28
C1 x : 0.015625 y :0.984375
C2 x : 0.984375 y :0.984375
C3 x : 0.015625 y :0.453125

Triangles 29
C1 x : 0.015625 y :0.453125
C2 x : 0.984375 y :0.453125
C3 x : 0.015625 y :0.984375

Triangles 30
C1 x : 0.984375 y :0.984375
C2 x : 0.015625 y :0.984375
C3 x : 0.984375 y :0.453125

Triangles 31
C1 x : 0.015625 y :0.453125
C2 x : 0.984375 y :0.453125
C3 x : 0.015625 y :0.984375

Triangles 32
C1 x : 0.984375 y :0.984375
C2 x : 0.015625 y :0.984375
C3 x : 0.984375 y :0.453125

Triangles 33
C1 x : 0.984375 y :0.453125
C2 x : 0.015625 y :0.453125
C3 x : 0.984375 y :0.984375

Triangles 34
C1 x : 0.015625 y :0.984375
C2 x : 0.984375 y :0.984375
C3 x : 0.015625 y :0.453125

Triangles 35
C1 x : 0.984375 y :0.984375
C2 x : 0.984375 y :0.015625
C3 x : 0.015625 y :0.984375

Triangles 36
C1 x : 0.015625 y :0.015625
C2 x : 0.015625 y :0.984375
C3 x : 0.984375 y :0.015625

Triangles 37
C1 x : 0.015625 y :0.015625
C2 x : 0.984375 y :0.015625
C3 x : 0.015625 y :0.984375

Triangles 38
C1 x : 0.984375 y :0.984375
C2 x : 0.015625 y :0.984375
C3 x : 0.984375 y :0.015625

Triangles 39
C1 x : 0.984375 y :0.015625
C2 x : 0.015625 y :0.015625
C3 x : 0.984375 y :0.984375

Triangles 40
C1 x : 0.015625 y :0.984375
C2 x : 0.984375 y :0.984375
C3 x : 0.015625 y :0.015625

Triangles 41
C1 x : 0.984375 y :0.015625
C2 x : 0.015625 y :0.015625
C3 x : 0.984375 y :0.984375

Triangles 42
C1 x : 0.015625 y :0.984375
C2 x : 0.984375 y :0.984375
C3 x : 0.015625 y :0.015625

Triangles 43
C1 x : 0.015625 y :0.015625
C2 x : 0.984375 y :0.015625
C3 x : 0.015625 y :0.984375

Triangles 44
C1 x : 0.984375 y :0.984375
C2 x : 0.015625 y :0.984375
C3 x : 0.984375 y :0.015625

Triangles 45
C1 x : 0.984375 y :0.015625
C2 x : 0.015625 y :0.015625
C3 x : 0.015625 y :0.984375

Triangles 46
C1 x : 0.015625 y :0.984375
C2 x : 0.984375 y :0.984375
C3 x : 0.984375 y :0.015625

Triangles 47
C1 x : 0.984375 y :0.015625
C2 x : 0.015625 y :0.015625
C3 x : 0.015625 y :0.984375

Triangles 48
C1 x : 0.015625 y :0.984375
C2 x : 0.984375 y :0.984375
C3 x : 0.984375 y :0.015625

Triangles 49
C1 x : 0.984375 y :0.015625
C2 x : 0.015625 y :0.015625
C3 x : 0.015625 y :0.984375
« Last Edit: March 26, 2019, 05:23:22 pm by Unbreakables »

Unbreakables

  • Registred Member
  • GM Isle Explorer
  • *****
  • Posts: 21
    • View Profile
Re: [M2] What is the order of vertices ?
« Reply #6 on: March 26, 2019, 05:19:17 pm »
Okay, I find the error... I put the size of texturesCoods in buffer_offset, instead of vertices. Stupid mistake.



And now it works perfectly. Thanks again schlumpf !