1
0
Fork 0
mirror of https://git.coom.tech/drummyfish/small3dlib.git synced 2024-11-21 20:39:57 +01:00

Fix index overflows

This commit is contained in:
Miloslav Číž 2019-06-28 01:25:32 +02:00
parent 010f5b3e59
commit 41caa6030d
2 changed files with 11 additions and 9 deletions

View file

@ -82,19 +82,21 @@ void drawPixel(S3L_PixelInfo *p)
S3L_normalizeVec3(&normal); S3L_normalizeVec3(&normal);
uint8_t shading = S3L_Unit shading =
S3L_clamp((S3L_dotProductVec3(normal,toLight) + S3L_FRACTIONS_PER_UNIT) / 4,0,255); (S3L_dotProductVec3(normal,toLight) + S3L_FRACTIONS_PER_UNIT) / 2;
shading = S3L_interpolate(shading,0,p->depth,32 * S3L_FRACTIONS_PER_UNIT);
int index = (p->y * S3L_RESOLUTION_X + p->x) * 3; int index = (p->y * S3L_RESOLUTION_X + p->x) * 3;
frameBuffer[index] = shading; frameBuffer[index] = S3L_clamp(S3L_interpolateByUnitFrom0(200,shading),0,255);
frameBuffer[index + 1] = shading; frameBuffer[index + 1] = S3L_clamp(S3L_interpolateByUnitFrom0(255,shading),0,255);
frameBuffer[index + 2] = shading; frameBuffer[index + 2] = S3L_clamp(S3L_interpolateByUnitFrom0(150,shading),0,255);
} }
int main() int main()
{ {
S3L_setVec4(&toLight,10,10,10,0); S3L_setVec4(&toLight,10,-10,-10,0);
S3L_normalizeVec3(&toLight); S3L_normalizeVec3(&toLight);

View file

@ -982,7 +982,7 @@ void S3L_getIndexedTriangleValues(
S3L_Vec4 *v1, S3L_Vec4 *v1,
S3L_Vec4 *v2) S3L_Vec4 *v2)
{ {
S3L_Index i0, i1; uint32_t i0, i1;
S3L_Unit *value; S3L_Unit *value;
i0 = triangleIndex * 3; i0 = triangleIndex * 3;
@ -1046,7 +1046,7 @@ void S3L_computeModelNormals(S3L_Model3D model, S3L_Unit *dst,
(model.triangles[j + 2] == i)) (model.triangles[j + 2] == i))
{ {
S3L_Vec4 t0, t1, t2; S3L_Vec4 t0, t1, t2;
S3L_Index vIndex; uint32_t vIndex;
#define getVertex(n)\ #define getVertex(n)\
vIndex = model.triangles[j + n] * 3;\ vIndex = model.triangles[j + n] * 3;\
@ -2437,7 +2437,7 @@ void _S3L_projectVertex(
S3L_Vec4 *result, S3L_Vec4 *result,
S3L_Unit focalLength) S3L_Unit focalLength)
{ {
S3L_Index vertexIndex = model->triangles[triangleIndex * 3 + vertex] * 3; uint32_t vertexIndex = model->triangles[triangleIndex * 3 + vertex] * 3;
result->x = model->vertices[vertexIndex]; result->x = model->vertices[vertexIndex];
result->y = model->vertices[vertexIndex + 1]; result->y = model->vertices[vertexIndex + 1];