問題タブ [vertex-array]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - wavefront .obj データを最小サイズの要素配列と頂点配列に組み立てる方法は?
Wavefront .obj ファイル内のデータをまとめるのに問題があります。
これらはvec3
とのvec2
定義です
ベクトルで使用:
どこ:
v_vec_index
std::vector<vec3<float>> v_vec
頂点の x、y、z 座標を含むフィールドを持つのインデックスですvt_vec_index
std::vector<vec2<float>> vt_vec
含まれているテクスチャの u および v 座標のインデックスですvn_vec_index
std::vector<vec3<float>> vn_vec
通常の x、y、z 座標のインデックスです
すべてf_vec
のフィールドは、 内に一連のvert_x, vert_y, vert_z, tex_u, tex_v, norm_x, norm_y, norm_z
float 値を作成するために使用されますstd::vector<float> vertex_array
。
また、 のフィールドのすべてのインデックスf_vec
は、デフォルトで - の値です。つまり、 からまでstd::vector<uint32_t>> element_array
の整数の範囲が含まれています。0
f_vec.size() - 1
問題は、vec3
内部のフィールドf_vec
が繰り返される可能性があることです。したがって、上記のユニークなシーケンスのみを組み立てるために、次のように変更することを計画しました。
これに:
の要素が " "f_vec
に挿入されるたびにwhatever container
一意であるかどうかがチェックされます
そうである場合、
container
そのキーは最大のキーの次の自然数であり、 の最後にプッシュされます。キーの値は にプッシュされ、element_array
新しい頂点が内部に作成されます。vertex_array
- そうでない場合、
container
そのキーはその複製のキーと同じで、の最後にプッシュされます。キーの値はにプッシュされますが、element_array
変更vertex_array
されません。
どうすればいいですか?
c++ - 頂点シェーダー アトリビュートの場所の破損したデータ
頂点シェーダー属性の場所のデータが破損しているため、モデルが引き伸ばされているように見える
頂点シェーダー コードは次のとおりです。
問題は、boneIDs の破損したデータのようです(boneIDs データは CPU では問題ありませんが、シェーダーで破損したデータが取得されます)。シェーダーで boneIDs データをハードコーディングしてみましたが、うまくいきました。
VAO のコードは次のとおりです。
BoneVertex 構造:
最初の 3 つの属性データは問題ないように見えるため、これは奇妙です。問題は、boneIDs と boneWeights にあります。これは何らかの形でパディングに関連しており、データが構造内でどのように配置されているのでしょうか? それとも、他に何か不足していますか?
ありがとう