質問編集履歴

1

1部を変更

2017/03/23 14:06

投稿

gochuumonha
gochuumonha

スコア74

test CHANGED
File without changes
test CHANGED
@@ -1,147 +1,5 @@
1
- [こちら](http://nakasis.com/)で配布されているFBXファイルを読み込みOpenGLを使って表示するプログラムを作成しています。(タグにDirectX等を入れさせていただいたのは今回の質問の内容がOpenGLに依存したものではないと考えたからです。)
2
-
3
- ![イメージ説明](83617c2265755c79934f60b312e315e0.jpeg)
1
+ https://teratail.com/questions/69684
4
-
5
- データの1部がマルチテクスチャというか、上の図のオレンジで囲った部分がひとまとまりの頂点配列になっているのですが、ここに使われているテクスチャファイルが2つに分かれていまして、それをどう貼り付けたらよいのかわかりませんので、教えてください。以下に詳しく説明いたします。
6
2
 
7
3
 
8
4
 
9
- データ構造は以下のようになっていす。(ちみにglmを使用
5
+ わかりにくい質問だったで、マルチポストにならないようにこちらにとめしました
10
-
11
- ```C++
12
-
13
- struct UV
14
-
15
- {
16
-
17
- std::vector<vec2> uvList;
18
-
19
- };
20
-
21
-
22
-
23
- struct ModelData
24
-
25
- {
26
-
27
- std::vector<GLuint> indexList;
28
-
29
- std::vector<vec3> positionList;
30
-
31
- std::vector<vec3> normalList;
32
-
33
- std::vector<UV> uvSet;
34
-
35
- };
36
-
37
-
38
-
39
- std::vector<ModelData> modelData;
40
-
41
- ```
42
-
43
-
44
-
45
- modelDataは大きさ11の配列で以下のように要素を持っています。
46
-
47
-
48
-
49
- ```
50
-
51
- modelData[0] Node = Kano2_model_chain
52
-
53
- Index Num = 192
54
-
55
- Position Num = 57
56
-
57
- Normal Num = 57
58
-
59
- UV Num = 57 Layer 0
60
-
61
- UV Num = 57 Layer 1
62
-
63
- modelData[1] Node = Kano2_model_eyeball
64
-
65
- Index Num = 138
66
-
67
- Position Num = 50
68
-
69
- Normal Num = 50
70
-
71
- UV Num = 50 Layer 0
72
-
73
- modelData[2] Node = Kano2_model_outline
74
-
75
- Index Num = 48
76
-
77
- Position Num = 12
78
-
79
- Normal Num = 12
80
-
81
- UV Num = 12 Layer 0
82
-
83
-
84
-
85
- ~省略~
86
-
87
-
88
-
89
- modelData[6] Node = Kano2_model_body
90
-
91
- Index Num = 22446
92
-
93
- Position Num = 7750
94
-
95
- Normal Num = 7750
96
-
97
- UV Num = 7750 Layer 0
98
-
99
- UV Num = 7750 Layer 1
100
-
101
-
102
-
103
- ~省略~
104
-
105
-
106
-
107
- modelData[10] Node = Kano2_model_hair
108
-
109
- Index Num = 3444
110
-
111
- Position Num = 1331
112
-
113
- Normal Num = 1331
114
-
115
- UV Num = 1331 Layer 0
116
-
117
- UV Num = 1331 Layer 1
118
-
119
- ```
120
-
121
- ここで僕が最も躓いたのはUVが複数あるパーツがあることです。modelData[6]に胴体、腕、手、足、服、靴などのデータが入っています(最初の図で示したオレンジで囲った部分です)。modelDataのそれぞれの要素のうちの1つ目のUV配列を用いて服のテクスチャを表示させると以下のようになりました。
122
-
123
-
124
-
125
- ![イメージ説明](4631cb92b8931be9a18dc8e405479786.png)
126
-
127
- しかし、当然服のデータしか読み込んでいないので以下に示す本来のデータとは異なります。特にmodelData[6]の足や首、肩回りがおかしくなっています。肌のテクスチャを読み込もうにも、シェーダーでどのように処理すればいいのかわかりません。
128
-
129
- ![引用:https://twitter.com/nakasis_/status/837249687404978176](47dba7b1afa4be9bb83c5ef0cf43dc80.jpeg)
130
-
131
- 引用:https://twitter.com/nakasis_/status/837249687404978176
132
-
133
-
134
-
135
- ここでやっと質問なのですが、このテクスチャの間違っている部分に正しいテクスチャを表示するにはどうすればよいのでしょうか?それぞれテクスチャファイルが以下のように分かれているので、張り方がわかりません。
136
-
137
-
138
-
139
- ![イメージ説明](ef64703eca2f9bb0ef034a056810c117.png)
140
-
141
-
142
-
143
- このようなデータを扱った経験が少なく複数のUVレイヤーをどう処理したらよいのかまったく見当もつかない状態です。また、最近はゲーム作成ならこんなことしなくてもUnityでできてしまうでしょうから、情報も少なくて困っています。
144
-
145
-
146
-
147
- 些細なことでもうれしいのでよろしくお願いいたします。