私自身のバイナリをコンパイルしてASSIMP 4.0.1を使用しています。法線が正しく読み込まれません。私は自分のcube.objをただ一つの三角形に縮小しました...そして、それが間違っていることを確認したい、そして私が気違いではないことを確認したいと思います。最後に、どのように修正することもできますか?ここでOBJファイルは次のようになります。今、最後の行を与えASSIMPによるOBJロードの理解
mtllib cube.mtl
g cube Mesh
usemtl cube Mesh_cube
v -0.500000 -0.500000 0.500000
v 0.500000 -0.500000 0.500000
v -0.500000 0.500000 0.500000
v 0.500000 0.500000 0.500000
v -0.500000 0.500000 -0.500000
v 0.500000 0.500000 -0.500000
v -0.500000 -0.500000 -0.500000
v 0.500000 -0.500000 -0.500000
vn 0.000000 0.000000 1.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 -1.000000 0.000000
vn 1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 0.000000 1.000000
vt 1.000000 1.000000
f 1/1/1 2/2/1 3/3/1
、私は属性を持つ単一の三角形をロードしています:
私が描いてる何ことの正常な動作です三角形とこれは明白にそれが(0.0,1.0,0.0)であると言います。それは緑色をRGBとしているからです。三角形は、x軸の原点から-30.0f離れたオフセット(平行移動)で作成され、頂点シェーダーからフラグメントシェーダーに渡された法線で直接陰影付けされます。この時点で、私はこのobjファイルが間違っている疑いがありますか?最後の法線(3の番号)、それはなぜ(0.0、0.0、-1.0)かを確認します。これは(0.0、0.0、1.0)ではないはずです(画面から外側を指しています)?最後に、なぜこの緑は頂点1から赤の代わりに、緑は頂点2に、頂点2では緑になるのですか?私は、次の頂点とフラグメントシェーダ使用しています:
#version 430
in vec3 POSITION;
in vec4 NORMAL;
in vec2 TEXCOORD0;
out vec4 normal;
out vec2 uv0;
uniform mat4 ModelMatrix;
uniform mat4 ViewProjectionMatrix;
uniform mat4 NormalMatrix;
uniform vec3 CameraPosition;
void main()
{
//normal = normalize(ModelMatrix * NORMAL);
normal = normalize(NORMAL);
uv0 = TEXCOORD0;
vec4 worldPosition = ModelMatrix * vec4(POSITION, 1.0);
//toCamera = normalize(CameraPosition - worldPosition.xyz);
gl_Position = ViewProjectionMatrix * worldPosition;
}
- この時点で
#version 430
in vec4 normal;
in vec2 uv0;
out vec4 outFragColor;
uniform sampler2D TEXTURE_0;
uniform vec3 DirectionalLightDirection;
uniform vec4 DiffuseReflectance;
uniform float Shininess;
//Blinn-Phong lighting ... TODO make this a macro
float calculateDiffuseTerm(vec3 N, vec3 L)
{
return clamp(dot(N, L), 0.0, 1.0);
}
float calculateSpecularTermWithHalfVector(vec3 N, vec3 L, vec3 V)
{
float term = 0.0;
if(dot(N, L) > 0.0)
{
vec3 H = normalize(L+V);
term = pow(dot(N, H), Shininess);
}
return term;
}
void main()
{
//Calculate diffuse
vec4 textureColor = texture(TEXTURE_0, uv0);
vec3 directionalLight = -1.0 * DirectionalLightDirection;
float diffuseTerm = calculateDiffuseTerm(normalize(normal.xyz), directionalLight);
outFragColor = normalize(normal);// diffuseTerm * DiffuseReflectance;
}
正直、顔に使われているアドレススキーマが間違っていたので、投稿を削除しました。私が何年も前に実装したことを忘れてしまいました。 – KimKulling
あなたが言うことは正しかったですが、ASSIMPは、そうしてはならないときに頂点を結合するように見えます。だから、削除重複頂点フラグを削除した後、今は問題ありません。 – ChaoSXDemon
どの頂点が誤って結合するのですか? – derhass