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

Use helper function in demos

This commit is contained in:
Miloslav Číž 2019-06-21 23:47:30 +02:00
parent c3ac9e96f7
commit 6f9e90dd60
4 changed files with 23 additions and 98 deletions

View file

@ -111,7 +111,7 @@ void sampleTexture(uint8_t *texture, int32_t u, int32_t v, uint8_t *r, uint8_t *
} }
uint32_t previousTriangle = -1; uint32_t previousTriangle = -1;
S3L_Unit uv0[2], uv1[2], uv2[2]; S3L_Vec4 uv0, uv1, uv2;
void drawPixel(S3L_PixelInfo *p) void drawPixel(S3L_PixelInfo *p)
{ {
@ -131,28 +131,7 @@ void drawPixel(S3L_PixelInfo *p)
uvs = carUVs; uvs = carUVs;
} }
int16_t index; S3L_getIndexedTriangleValues(p->triangleIndex,uvIndices,uvs,2,&uv0,&uv1,&uv2);
index = p->triangleIndex * 3;
int16_t i0 = uvIndices[index];
int16_t i1 = uvIndices[index + 1];
int16_t i2 = uvIndices[index + 2];
index = i0 * 2;
uv0[0] = uvs[index];
uv0[1] = uvs[index + 1];
index = i1 * 2;
uv1[0] = uvs[index];
uv1[1] = uvs[index + 1];
index = i2 * 2;
uv2[0] = uvs[index];
uv2[1] = uvs[index + 1];
previousTriangle = p->triangleID; previousTriangle = p->triangleID;
} }
@ -161,8 +140,8 @@ void drawPixel(S3L_PixelInfo *p)
S3L_Unit uv[2]; S3L_Unit uv[2];
uv[0] = S3L_interpolateBarycentric(uv0[0],uv1[0],uv2[0],p->barycentric); uv[0] = S3L_interpolateBarycentric(uv0.x,uv1.x,uv2.x,p->barycentric);
uv[1] = S3L_interpolateBarycentric(uv0[1],uv1[1],uv2[1],p->barycentric); uv[1] = S3L_interpolateBarycentric(uv0.y,uv1.y,uv2.y,p->barycentric);
sampleTexture(cityTexture,uv[0] / 2,uv[1] / 2,&r,&g,&b); sampleTexture(cityTexture,uv[0] / 2,uv[1] / 2,&r,&g,&b);

View file

@ -90,7 +90,7 @@ S3L_Vec4 toLightDirection;
S3L_Vec4 n0, n1, n2, v0, v1, v2; S3L_Vec4 n0, n1, n2, v0, v1, v2;
S3L_Unit uv0[2], uv1[2], uv2[2]; S3L_Vec4 uv0, uv1, uv2;
void sampleTexture(uint8_t *texture, int w, int h, float x, float y, uint8_t color[3]) void sampleTexture(uint8_t *texture, int w, int h, float x, float y, uint8_t color[3])
{ {
@ -170,59 +170,25 @@ void drawPixel(S3L_PixelInfo *p)
if (p->triangleID != previousTriangle) if (p->triangleID != previousTriangle)
{ {
int index = scene.models[p->modelIndex].triangles[p->triangleIndex * 3] * 3;
n0.x = normals[index]; S3L_getIndexedTriangleValues(
v0.x = scene.models[p->modelIndex].vertices[index]; p->triangleIndex,
index++; scene.models[p->modelIndex].triangles,
n0.y = normals[index]; normals,3,&n0,&n1,&n2);
v0.y = scene.models[p->modelIndex].vertices[index];
index++;
n0.z = normals[index];
v0.z = scene.models[p->modelIndex].vertices[index];
index = scene.models[p->modelIndex].triangles[p->triangleIndex * 3 + 1] * 3; S3L_getIndexedTriangleValues(
p->triangleIndex,
n1.x = normals[index]; scene.models[p->modelIndex].triangles,
v1.x = scene.models[p->modelIndex].vertices[index]; scene.models[p->modelIndex].vertices,3,&v0,&v1,&v2);
index++;
n1.y = normals[index];
v1.y = scene.models[p->modelIndex].vertices[index];
index++;
n1.z = normals[index];
v1.z = scene.models[p->modelIndex].vertices[index];
index = scene.models[p->modelIndex].triangles[p->triangleIndex * 3 + 2] * 3;
n2.x = normals[index];
v2.x = scene.models[p->modelIndex].vertices[index];
index++;
n2.y = normals[index];
v2.y = scene.models[p->modelIndex].vertices[index];
index++;
n2.z = normals[index];
v2.z = scene.models[p->modelIndex].vertices[index];
if (p->modelIndex != WATER_MODEL_INDEX && if (p->modelIndex != WATER_MODEL_INDEX &&
p->modelIndex != ISLAND_MODEL_INDEX) p->modelIndex != ISLAND_MODEL_INDEX)
{ {
index = treeUVIndices[p->triangleIndex * 3] * 2;
uv0[0] = treeUVs[index]; S3L_getIndexedTriangleValues(
index++; p->triangleIndex,
uv0[1] = treeUVs[index]; scene.models[p->modelIndex].triangles,
treeUVs,2,&uv0,&uv1,&uv2);
index = treeUVIndices[p->triangleIndex * 3 + 1] * 2;
uv1[0] = treeUVs[index];
index++;
uv1[1] = treeUVs[index];
index = treeUVIndices[p->triangleIndex * 3 + 2] * 2;
uv2[0] = treeUVs[index];
index++;
uv2[1] = treeUVs[index];
} }
previousTriangle = p->triangleID; previousTriangle = p->triangleID;
@ -297,8 +263,8 @@ void drawPixel(S3L_PixelInfo *p)
specularIntensity = 0.2; specularIntensity = 0.2;
specularPower = 20.0; specularPower = 20.0;
u = S3L_interpolateBarycentric(uv0[0],uv1[0],uv2[0],p->barycentric) / ((float) S3L_FRACTIONS_PER_UNIT); u = S3L_interpolateBarycentric(uv0.x,uv1.x,uv2.x,p->barycentric) / ((float) S3L_FRACTIONS_PER_UNIT);
v = S3L_interpolateBarycentric(uv0[1],uv1[1],uv2[1],p->barycentric) / ((float) S3L_FRACTIONS_PER_UNIT); v = S3L_interpolateBarycentric(uv0.y,uv1.y,uv2.y,p->barycentric) / ((float) S3L_FRACTIONS_PER_UNIT);
} }
S3L_normalizeVec3(&normal); S3L_normalizeVec3(&normal);

View file

@ -103,29 +103,7 @@ void drawPixel(S3L_PixelInfo *p)
texture = level3Texture; texture = level3Texture;
} }
int16_t index; S3L_getIndexedTriangleValues(p->triangleIndex,uvIndices,uvs,2,&uv0,&uv1,&uv2);
index = p->triangleIndex * 3;
int16_t i0 = uvIndices[index];
int16_t i1 = uvIndices[index + 1];
int16_t i2 = uvIndices[index + 2];
index = i0 * 2;
uv0.x = uvs[index];
uv0.y = uvs[index + 1];
index = i1 * 2;
uv1.x = uvs[index];
uv1.y = uvs[index + 1];
index = i2 * 2;
uv2.x = uvs[index];
uv2.y = uvs[index + 1];
previousTriangle = p->triangleID; previousTriangle = p->triangleID;
} }

View file

@ -521,7 +521,9 @@ void S3L_triangleNormal(S3L_Vec4 t0, S3L_Vec4 t1, S3L_Vec4 t2,
for each triangle, each index pointing into 'values' array, which contains for each triangle, each index pointing into 'values' array, which contains
the values, each one consisting of 'numComponents' components (e.g. 2 for the values, each one consisting of 'numComponents' components (e.g. 2 for
UV coordinates). The three values are retrieved into 'v0', 'v1' and 'v2' UV coordinates). The three values are retrieved into 'v0', 'v1' and 'v2'
vectors (into x, y, z and w, depending on 'numComponents'). */ vectors (into x, y, z and w, depending on 'numComponents'). This function is
meant to be used per-triangle (typically from a cache), NOT per-pixel, as it
is not as fast as possible! */
void S3L_getIndexedTriangleValues( void S3L_getIndexedTriangleValues(
S3L_Index triangleIndex, S3L_Index triangleIndex,