diff options
| author | johann nadalutti <[email protected]> | 2024-02-29 18:28:51 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-02-29 18:28:51 +0100 |
| commit | 53221eb799de037eaaae4accbfc5ef6f6c2fe1bb (patch) | |
| tree | 2f71f84d75ec63a36f1bdff8e03ecbe854db2189 /src | |
| parent | 077ab6d56bea4fc464cd5c07e02071e911eac64a (diff) | |
| download | raylib-53221eb799de037eaaae4accbfc5ef6f6c2fe1bb.tar.gz raylib-53221eb799de037eaaae4accbfc5ef6f6c2fe1bb.zip | |
feat: vox_loader normals and new voxels shader (#3843)
Diffstat (limited to 'src')
| -rw-r--r-- | src/external/vox_loader.h | 17 | ||||
| -rw-r--r-- | src/rmodels.c | 6 |
2 files changed, 23 insertions, 0 deletions
diff --git a/src/external/vox_loader.h b/src/external/vox_loader.h index 6df10b51..0d328c07 100644 --- a/src/external/vox_loader.h +++ b/src/external/vox_loader.h @@ -123,6 +123,7 @@ typedef struct { // Arrays for mesh build ArrayVector3 vertices; + ArrayVector3 normals; ArrayUShort indices; ArrayColor colors; @@ -292,6 +293,16 @@ const VoxVector3 SolidVertex[] = { {1, 1, 1} //7 }; +const VoxVector3 FacesPerSideNormal[] = { + { -1, 0, 0 }, //-X + {1, 0, 0 }, //+X + {0,-1, 0}, //-Y + {0, 1, 0}, //+Y + {0, 0, -1}, //-Z + {0, 0, 1}, //+Z +}; + + // Allocated VoxArray3D size static void Vox_AllocArray(VoxArray3D* pvoxarray, int _sx, int _sy, int _sz) { @@ -508,6 +519,11 @@ static void Vox_Build_Voxel(VoxArray3D* pvoxArray, int x, int y, int z, int matI insertArrayVector3(&pvoxArray->vertices, vertComputed[v2]); insertArrayVector3(&pvoxArray->vertices, vertComputed[v3]); + insertArrayVector3(&pvoxArray->normals, FacesPerSideNormal[i]); + insertArrayVector3(&pvoxArray->normals, FacesPerSideNormal[i]); + insertArrayVector3(&pvoxArray->normals, FacesPerSideNormal[i]); + insertArrayVector3(&pvoxArray->normals, FacesPerSideNormal[i]); + VoxColor col = pvoxArray->palette[matID]; insertArrayColor(&pvoxArray->colors, col); @@ -653,6 +669,7 @@ int Vox_LoadFromMemory(unsigned char* pvoxData, unsigned int voxDataSize, VoxArr // Init Arrays initArrayVector3(&pvoxarray->vertices, 3 * 1024); + initArrayVector3(&pvoxarray->normals, 3 * 1024); initArrayUShort(&pvoxarray->indices, 3 * 1024); initArrayColor(&pvoxarray->colors, 3 * 1024); diff --git a/src/rmodels.c b/src/rmodels.c index 4f634990..316b91d1 100644 --- a/src/rmodels.c +++ b/src/rmodels.c @@ -5641,6 +5641,7 @@ static Model LoadVOX(const char *fileName) // 6*4 = 12 vertices per voxel Vector3 *pvertices = (Vector3 *)voxarray.vertices.array; + Vector3* pnormals = (Vector3*)voxarray.normals.array; Color *pcolors = (Color *)voxarray.colors.array; unsigned short *pindices = voxarray.indices.array; // 5461*6*6 = 196596 indices max per mesh @@ -5659,6 +5660,10 @@ static Model LoadVOX(const char *fileName) pmesh->vertices = RL_MALLOC(size); memcpy(pmesh->vertices, pvertices, size); + // Copy normals + pmesh->normals = RL_MALLOC(size); //Rk. size as vertices + memcpy(pmesh->normals, pnormals, size); + // Copy indices size = voxarray.indices.used*sizeof(unsigned short); pmesh->indices = RL_MALLOC(size); @@ -5676,6 +5681,7 @@ static Model LoadVOX(const char *fileName) verticesRemain -= verticesMax; pvertices += verticesMax; + pnormals += verticesMax; pcolors += verticesMax; } |
