155 lines
3.1 KiB
C++
Executable File
155 lines
3.1 KiB
C++
Executable File
#include "DeerRender/LightVoxel.h"
|
|
|
|
#include <iostream>
|
|
#include <string>
|
|
|
|
namespace Deer {
|
|
VoxelLight lightVoxel(255);
|
|
|
|
int lightPropagationComplexDir[12 * 2] = {
|
|
NORMAL_LEFT, NORMAL_DOWN,
|
|
NORMAL_RIGHT, NORMAL_DOWN,
|
|
NORMAL_LEFT, NORMAL_UP,
|
|
NORMAL_RIGHT, NORMAL_UP,
|
|
NORMAL_LEFT, NORMAL_BACK,
|
|
NORMAL_RIGHT, NORMAL_BACK,
|
|
NORMAL_LEFT, NORMAL_FRONT,
|
|
NORMAL_RIGHT, NORMAL_FRONT,
|
|
NORMAL_DOWN, NORMAL_BACK,
|
|
NORMAL_UP, NORMAL_BACK,
|
|
NORMAL_DOWN, NORMAL_FRONT,
|
|
NORMAL_UP, NORMAL_FRONT
|
|
};
|
|
|
|
int normalFacePositions[3 * 4 * 6] = {
|
|
// Left
|
|
0, 0, 1,
|
|
0, 0, 0,
|
|
0, 1, 1,
|
|
0, 1, 0,
|
|
// Right
|
|
1, 0, 0,
|
|
1, 0, 1,
|
|
1, 1, 0,
|
|
1, 1, 1,
|
|
// Down
|
|
0, 0, 1,
|
|
1, 0, 1,
|
|
0, 0, 0,
|
|
1, 0, 0,
|
|
// Up
|
|
0, 1, 0,
|
|
1, 1, 0,
|
|
0, 1, 1,
|
|
1, 1, 1,
|
|
// Back
|
|
0, 0, 0,
|
|
1, 0, 0,
|
|
0, 1, 0,
|
|
1, 1, 0,
|
|
// Front
|
|
1, 0, 1,
|
|
0, 0, 1,
|
|
1, 1, 1,
|
|
0, 1, 1
|
|
};
|
|
|
|
int uvFace[2 * 4] = {
|
|
0, 0,
|
|
1, 0,
|
|
0, 1,
|
|
1, 1
|
|
};
|
|
|
|
int ambientOcclusionVertex[6 * 2 * 4 * 3]{
|
|
0, -1, 0, 0, 0, 1,
|
|
0, -1, 0, 0, 0, -1,
|
|
0, 1, 0, 0, 0, 1,
|
|
0, 1, 0, 0, 0, -1,
|
|
0, -1, 0, 0, 0, -1,
|
|
0, -1, 0, 0, 0, 1,
|
|
0, 1, 0, 0, 0, -1,
|
|
0, 1, 0, 0, 0, 1,
|
|
-1, 0, 0, 0, 0, 1,
|
|
1, 0, 0, 0, 0, 1,
|
|
-1, 0, 0, 0, 0, -1,
|
|
1, 0, 0, 0, 0, -1,
|
|
-1, 0, 0, 0, 0, -1,
|
|
1, 0, 0, 0, 0, -1,
|
|
-1, 0, 0, 0, 0, 1,
|
|
1, 0, 0, 0, 0, 1,
|
|
-1, 0, 0, 0, -1, 0,
|
|
1, 0, 0, 0, -1, 0,
|
|
-1, 0, 0, 0, 1, 0,
|
|
1, 0, 0, 0, 1, 0,
|
|
1, 0, 0, 0, -1, 0,
|
|
-1, 0, 0, 0, -1, 0,
|
|
1, 0, 0, 0, 1, 0,
|
|
-1, 0, 0, 0, 1, 0
|
|
};
|
|
|
|
int layerCheckDirections[2 * 8]{
|
|
-1, 0,
|
|
-1, 1,
|
|
0, 1,
|
|
1, 1,
|
|
1, 0,
|
|
1, -1,
|
|
0, -1,
|
|
-1, -1
|
|
};
|
|
|
|
void calcFaces() {
|
|
std::string out;
|
|
|
|
for (int f = 0; f < 6; f++) {
|
|
int normalDirX = NORMAL_DIR(X_AXIS, f);
|
|
int normalDirY = NORMAL_DIR(Y_AXIS, f);
|
|
int normalDirZ = NORMAL_DIR(Z_AXIS, f);
|
|
|
|
for (int vertex = 0; vertex < 4; vertex++) {
|
|
int xPos = NORMAL_VERTEX_POS(X_AXIS, vertex, f);
|
|
int yPos = NORMAL_VERTEX_POS(Y_AXIS, vertex, f);
|
|
int zPos = NORMAL_VERTEX_POS(Z_AXIS, vertex, f);
|
|
|
|
int sideX = (xPos == 1) ? 1 : -1;
|
|
int sideY = (yPos == 1) ? 1 : -1;
|
|
int sideZ = (zPos == 1) ? 1 : -1;
|
|
|
|
if (normalDirX == 1 || normalDirX == -1) {
|
|
out += std::to_string(0) + ", ";
|
|
out += std::to_string(sideY) + ", ";
|
|
out += std::to_string(0) + ",\t";
|
|
|
|
out += std::to_string(0) + ", ";
|
|
out += std::to_string(0) + ", ";
|
|
out += std::to_string(sideZ) + ",\n";
|
|
}
|
|
|
|
if (normalDirY == 1 || normalDirY == -1) {
|
|
out += std::to_string(sideX) + ", ";
|
|
out += std::to_string(0) + ", ";
|
|
out += std::to_string(0) + ",\t";
|
|
|
|
out += std::to_string(0) + ", ";
|
|
out += std::to_string(0) + ", ";
|
|
out += std::to_string(sideZ) + ",\n";
|
|
|
|
}
|
|
|
|
if (normalDirZ == 1 || normalDirZ == -1) {
|
|
out += std::to_string(sideX) + ", ";
|
|
out += std::to_string(0) + ", ";
|
|
out += std::to_string(0) + ",\t";
|
|
|
|
out += std::to_string(0) + ", ";
|
|
out += std::to_string(sideY) + ", ";
|
|
out += std::to_string(0) + ",\n";
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
std::cout << out;
|
|
}/**/
|
|
} |