ボクセル エンジンの 16x16 キューブ チャンクに法線を追加しようとしています。すべてをレンダリングすると、奇妙な結果が得られます。法線を間違って配置したのか、照明を使用して単純な影を実装してもうまくいかないのかはわかりません。
以下は、各立方体の頂点とそれぞれの法線です。
public void putVertices(float tx, float ty, float tz, FloatBuffer vertexPositionData) {
float l_length = Constants.BLOCK_SIZE;
float l_height = Constants.BLOCK_SIZE;
float l_width = Constants.BLOCK_SIZE;
vertexPositionData.put(new float[]{
xOffset + l_length + tx, -l_height + ty, zOffset + -l_width + tz,
xOffset + -l_length + tx, -l_height + ty, zOffset + -l_width + tz,
xOffset + -l_length + tx, l_height + ty, zOffset + -l_width + tz,
xOffset + l_length + tx, l_height + ty, zOffset + -l_width + tz,
xOffset + -l_length + tx, -l_height + ty, zOffset + l_width + tz,
xOffset + l_length + tx, -l_height + ty, zOffset + l_width + tz,
xOffset + l_length + tx, l_height + ty, zOffset + l_width + tz,
xOffset + -l_length + tx, l_height + ty, zOffset + l_width + tz,
xOffset + l_length + tx, -l_height + ty, zOffset + l_width + tz,
xOffset + l_length + tx, -l_height + ty,zOffset + -l_width + tz,
xOffset + l_length + tx, l_height + ty,zOffset + -l_width + tz,
xOffset + l_length + tx, l_height + ty, zOffset + l_width + tz,
xOffset + -l_length + tx, -l_height + ty, zOffset + -l_width + tz,
xOffset + -l_length + tx, -l_height + ty,zOffset + l_width + tz,
xOffset + -l_length + tx, l_height + ty, zOffset + l_width + tz,
xOffset + -l_length + tx, l_height + ty, zOffset + -l_width + tz,
xOffset + -l_length + tx, -l_height + ty, zOffset + -l_width + tz,
xOffset + l_length + tx, -l_height + ty, zOffset + -l_width + tz,
xOffset + l_length + tx, -l_height + ty, zOffset + l_width + tz,
xOffset + -l_length + tx, -l_height + ty,zOffset + l_width + tz,
xOffset + l_length + tx, l_height + ty,zOffset + -l_width + tz,
xOffset + -l_length + tx, l_height + ty, zOffset + -l_width + tz,
xOffset + -l_length + tx, l_height + ty, zOffset + l_width + tz,
xOffset + l_length + tx, l_height + ty, zOffset + l_width + tz
});
}
public void putNormals(FloatBuffer vertexNormalData) {
float[] normals = new float[] {
0.0f, 0.0f, -1.0f,
0.0f, 0.0f, 1.0f,
1.0f, 0.0f, 0.0f,
-1.0f, 0.0f, 0.0f,
0.0f, -1.0f, 0.0f,
0.0f, 1.0f, 0.0f,
};
これは、プログラムを実行すると次のようになります。
光は、周囲の各ブロックが存在しないかのように計算されているようです。どうすればこれを修正できますか? ブロックが図のように平らな場合、結果はシームレスに見えるはずです。