mirror of
https://git.coom.tech/drummyfish/small3dlib.git
synced 2024-11-21 20:39:57 +01:00
Fix cos function
This commit is contained in:
parent
a7657c0951
commit
b3951684d3
4 changed files with 25 additions and 21 deletions
|
@ -487,13 +487,13 @@ int main()
|
||||||
|
|
||||||
char fileName[] = "test00.ppm";
|
char fileName[] = "test00.ppm";
|
||||||
|
|
||||||
for (int i = 0; i < 50; ++i) // render the frames
|
for (int i = 0; i < 100; ++i) // render the frames
|
||||||
{
|
{
|
||||||
animateWater();
|
animateWater();
|
||||||
|
|
||||||
scene.camera.transform.translation.x = S3L_sin(i * 5) * 3;
|
scene.camera.transform.translation.x = 2000;
|
||||||
scene.camera.transform.translation.y = 5 * S3L_FRACTIONS_PER_UNIT + S3L_cos(i * 6) * 2;
|
scene.camera.transform.translation.y = 3000;
|
||||||
scene.camera.transform.translation.z = S3L_cos(i * 4) * 10;
|
scene.camera.transform.translation.z = -S3L_FRACTIONS_PER_UNIT * 8;
|
||||||
|
|
||||||
S3L_Vec4 target;
|
S3L_Vec4 target;
|
||||||
|
|
||||||
|
|
|
@ -133,12 +133,6 @@ void houseTex(int32_t u, int32_t v, uint8_t *r, uint8_t *g, uint8_t *b)
|
||||||
|
|
||||||
void drawPixel(S3L_PixelInfo *p)
|
void drawPixel(S3L_PixelInfo *p)
|
||||||
{
|
{
|
||||||
|
|
||||||
//setPixel(p->x,p->y,p->triangleIndex,p->triangleIndex,p->triangleIndex);
|
|
||||||
setPixel(p->x,p->y,0,0,0);
|
|
||||||
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (p->x < 0 || p ->x >= S3L_RESOLUTION_X || p->y < 0 || p->y >= S3L_RESOLUTION_Y)
|
if (p->x < 0 || p ->x >= S3L_RESOLUTION_X || p->y < 0 || p->y >= S3L_RESOLUTION_Y)
|
||||||
{
|
{
|
||||||
offScreenPixels++;
|
offScreenPixels++;
|
||||||
|
@ -183,13 +177,13 @@ if (p->modelIndex != 0)
|
||||||
uv0[0],
|
uv0[0],
|
||||||
uv1[0],
|
uv1[0],
|
||||||
uv2[0],
|
uv2[0],
|
||||||
p->barycentric[0], p->barycentric[1], p->barycentric[2]);
|
p->barycentric);
|
||||||
|
|
||||||
v = S3L_interpolateBarycentric(
|
v = S3L_interpolateBarycentric(
|
||||||
uv0[1],
|
uv0[1],
|
||||||
uv1[1],
|
uv1[1],
|
||||||
uv2[1],
|
uv2[1],
|
||||||
p->barycentric[0], p->barycentric[1], p->barycentric[2]);
|
p->barycentric);
|
||||||
|
|
||||||
uint8_t r,g,b;
|
uint8_t r,g,b;
|
||||||
houseTex(
|
houseTex(
|
||||||
|
@ -211,9 +205,9 @@ n2.x = houseNormals[scene.models[p->modelIndex].triangles[p->triangleIndex * 3 +
|
||||||
n2.y = houseNormals[scene.models[p->modelIndex].triangles[p->triangleIndex * 3 + 2] * 3 + 1];
|
n2.y = houseNormals[scene.models[p->modelIndex].triangles[p->triangleIndex * 3 + 2] * 3 + 1];
|
||||||
n2.z = houseNormals[scene.models[p->modelIndex].triangles[p->triangleIndex * 3 + 2] * 3 + 2];
|
n2.z = houseNormals[scene.models[p->modelIndex].triangles[p->triangleIndex * 3 + 2] * 3 + 2];
|
||||||
|
|
||||||
n.x = S3L_interpolateBarycentric(n0.x,n1.x,n2.x,p->barycentric[0],p->barycentric[1],p->barycentric[2]);
|
n.x = S3L_interpolateBarycentric(n0.x,n1.x,n2.x,p->barycentric);
|
||||||
n.y = S3L_interpolateBarycentric(n0.y,n1.y,n2.y,p->barycentric[0],p->barycentric[1],p->barycentric[2]);
|
n.y = S3L_interpolateBarycentric(n0.y,n1.y,n2.y,p->barycentric);
|
||||||
n.z = S3L_interpolateBarycentric(n0.z,n1.z,n2.z,p->barycentric[0],p->barycentric[1],p->barycentric[2]);
|
n.z = S3L_interpolateBarycentric(n0.z,n1.z,n2.z,p->barycentric);
|
||||||
|
|
||||||
S3L_Vec4 V;
|
S3L_Vec4 V;
|
||||||
|
|
||||||
|
@ -239,13 +233,13 @@ else
|
||||||
coords[0],
|
coords[0],
|
||||||
coords[2],
|
coords[2],
|
||||||
coords[4],
|
coords[4],
|
||||||
p->barycentric[0], p->barycentric[1], p->barycentric[2]);
|
p->barycentric);
|
||||||
|
|
||||||
v = S3L_interpolateBarycentric(
|
v = S3L_interpolateBarycentric(
|
||||||
coords[1],
|
coords[1],
|
||||||
coords[3],
|
coords[3],
|
||||||
coords[5],
|
coords[5],
|
||||||
p->barycentric[0], p->barycentric[1], p->barycentric[2]);
|
p->barycentric);
|
||||||
|
|
||||||
uint8_t col = texturePixel(u,v);
|
uint8_t col = texturePixel(u,v);
|
||||||
setPixel(p->x,p->y,col,col * 30,(2 - col) * 120);
|
setPixel(p->x,p->y,col,col * 30,(2 - col) * 120);
|
||||||
|
|
13
small3dlib.h
13
small3dlib.h
|
@ -73,7 +73,8 @@
|
||||||
|
|
|
|
||||||
|
|
||||||
Rotations use Euler angles and are generally in the extinsic Euler angles in
|
Rotations use Euler angles and are generally in the extinsic Euler angles in
|
||||||
ZXY order (by Z, then by X, then by Y).
|
ZXY order (by Z, then by X, then by Y). Positive rotation about an axis
|
||||||
|
rotates CW (clock-wise) when looking in the direction of the axis.
|
||||||
|
|
||||||
Coordinates of pixels on screen start typically at the top left, from [0,0].
|
Coordinates of pixels on screen start typically at the top left, from [0,0].
|
||||||
|
|
||||||
|
@ -1178,7 +1179,7 @@ S3L_Unit S3L_asin(S3L_Unit x)
|
||||||
|
|
||||||
S3L_Unit S3L_cos(S3L_Unit x)
|
S3L_Unit S3L_cos(S3L_Unit x)
|
||||||
{
|
{
|
||||||
return S3L_sin(x - S3L_FRACTIONS_PER_UNIT / 4);
|
return S3L_sin(x + S3L_FRACTIONS_PER_UNIT / 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
void S3L_correctBarycentricCoords(S3L_Unit barycentric[3])
|
void S3L_correctBarycentricCoords(S3L_Unit barycentric[3])
|
||||||
|
@ -1237,6 +1238,10 @@ void S3L_makeRotationMatrixZXY(
|
||||||
S3L_Unit byZ,
|
S3L_Unit byZ,
|
||||||
S3L_Mat4 *m)
|
S3L_Mat4 *m)
|
||||||
{
|
{
|
||||||
|
byX *= -1;
|
||||||
|
byY *= -1;
|
||||||
|
byZ *= -1;
|
||||||
|
|
||||||
S3L_Unit sx = S3L_sin(byX);
|
S3L_Unit sx = S3L_sin(byX);
|
||||||
S3L_Unit sy = S3L_sin(byY);
|
S3L_Unit sy = S3L_sin(byY);
|
||||||
S3L_Unit sz = S3L_sin(byZ);
|
S3L_Unit sz = S3L_sin(byZ);
|
||||||
|
@ -1344,6 +1349,7 @@ void S3L_initTransoform3D(S3L_Transform3D *t)
|
||||||
t->scale.x = S3L_FRACTIONS_PER_UNIT;
|
t->scale.x = S3L_FRACTIONS_PER_UNIT;
|
||||||
t->scale.y = S3L_FRACTIONS_PER_UNIT;
|
t->scale.y = S3L_FRACTIONS_PER_UNIT;
|
||||||
t->scale.z = S3L_FRACTIONS_PER_UNIT;
|
t->scale.z = S3L_FRACTIONS_PER_UNIT;
|
||||||
|
t->scale.w = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void S3L_lookAt(S3L_Vec4 pointFrom, S3L_Vec4 pointTo, S3L_Transform3D *t)
|
void S3L_lookAt(S3L_Vec4 pointFrom, S3L_Vec4 pointTo, S3L_Transform3D *t)
|
||||||
|
@ -1370,7 +1376,8 @@ void S3L_lookAt(S3L_Vec4 pointFrom, S3L_Vec4 pointTo, S3L_Transform3D *t)
|
||||||
|
|
||||||
dx = (v.x * S3L_FRACTIONS_PER_UNIT) / S3L_nonZero(l);
|
dx = (v.x * S3L_FRACTIONS_PER_UNIT) / S3L_nonZero(l);
|
||||||
|
|
||||||
t->rotation.x = S3L_asin(dx);
|
t->rotation.x = -1 * S3L_asin(dx);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void S3L_setTransform3D(
|
void S3L_setTransform3D(
|
||||||
|
|
3
todo.txt
3
todo.txt
|
@ -24,6 +24,9 @@ features:
|
||||||
interpolation -- it will randomly picky one of three values, with greater
|
interpolation -- it will randomly picky one of three values, with greater
|
||||||
probabilities at greater coords
|
probabilities at greater coords
|
||||||
|
|
||||||
|
- change the default backface culling to the other one (and edit the obj tool
|
||||||
|
accordingly)
|
||||||
|
|
||||||
- option to disable baycentric coordinates computing DONE
|
- option to disable baycentric coordinates computing DONE
|
||||||
|
|
||||||
- Z-buffer:
|
- Z-buffer:
|
||||||
|
|
Loading…
Reference in a new issue