mirror of
https://git.coom.tech/drummyfish/small3dlib.git
synced 2024-11-24 21:09:57 +01:00
Add near clamping
This commit is contained in:
parent
bfff51d4d0
commit
240119353e
2 changed files with 34 additions and 22 deletions
19
small3dlib.h
19
small3dlib.h
|
@ -122,9 +122,17 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef S3L_COMPUTE_DEPTH
|
#ifndef S3L_COMPUTE_DEPTH
|
||||||
#define S3L_COMPUTE_DEPTH 0 /**< Whether to compute depth for each pixel
|
#define S3L_COMPUTE_DEPTH 0 /**< Whether to compute depth for each pixel
|
||||||
(fragment). Some other options may turn this
|
(fragment). Some other options may turn this
|
||||||
on. */
|
on. */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef S3L_NEAR_CLAMPING
|
||||||
|
#define S3L_NEAR_CLAMPING 0 /**< Whether to use depth clamping for the near
|
||||||
|
plane. Only works with S3L_COMPUTE_DEPTH
|
||||||
|
enabled! This may be a bit slower, but can
|
||||||
|
prevent errorneous rendering in specific cases
|
||||||
|
and is closer to traditional 3D engines. */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef S3L_PERSPECTIVE_CORRECTION
|
#ifndef S3L_PERSPECTIVE_CORRECTION
|
||||||
|
@ -1599,6 +1607,11 @@ void _S3L_drawFilledTriangle(
|
||||||
p->depth = S3L_getFastLerpValue(depthFLS);
|
p->depth = S3L_getFastLerpValue(depthFLS);
|
||||||
S3L_stepFastLerp(depthFLS);
|
S3L_stepFastLerp(depthFLS);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if S3L_NEAR_CLAMPING
|
||||||
|
if (p->depth < S3L_NEAR)
|
||||||
|
continue;
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if S3L_Z_BUFFER
|
#if S3L_Z_BUFFER
|
||||||
|
|
37
testSDL.c
37
testSDL.c
|
@ -19,26 +19,14 @@
|
||||||
#define S3L_RESOLUTION_Y 480
|
#define S3L_RESOLUTION_Y 480
|
||||||
|
|
||||||
#define S3L_COMPUTE_DEPTH 1
|
#define S3L_COMPUTE_DEPTH 1
|
||||||
#define S3L_PERSPECTIVE_CORRECTION 0
|
#define S3L_PERSPECTIVE_CORRECTION 1
|
||||||
|
#define S3L_NEAR_CLAMPING 1
|
||||||
|
|
||||||
#include "small3dlib.h"
|
#include "small3dlib.h"
|
||||||
|
|
||||||
#include "house.h"
|
#include "house.h"
|
||||||
|
|
||||||
int32_t offScreenPixels = 0;
|
int32_t offScreenPixels = 0;
|
||||||
|
|
||||||
const int16_t test_coords[] =
|
|
||||||
{
|
|
||||||
100,100, 99,101, 101,101, // 0, small triangle
|
|
||||||
190,50, 200,10, 400,80, // 1, arbitrary
|
|
||||||
40,80, 60,50, 100,30, // 2, arbitrary
|
|
||||||
350,270, 440,200, 490,220, // 3, arbitrary
|
|
||||||
150,300, 290,400, 450,400, // 4, regular
|
|
||||||
105,200, 120,200, 201,200, // 5, horizontal line
|
|
||||||
300,200, 300,250, 300,220, // 6, vertical line
|
|
||||||
496,15, 613,131, 552,203
|
|
||||||
};
|
|
||||||
|
|
||||||
const S3L_Unit ver[] = { S3L_CUBE_VERTICES };
|
const S3L_Unit ver[] = { S3L_CUBE_VERTICES };
|
||||||
const S3L_Index tri[] = { S3L_CUBE_TRIANGLES };
|
const S3L_Index tri[] = { S3L_CUBE_TRIANGLES };
|
||||||
const S3L_Unit tex_coords[] = { S3L_CUBE_TEXCOORDS(16) };
|
const S3L_Unit tex_coords[] = { S3L_CUBE_TEXCOORDS(16) };
|
||||||
|
@ -114,6 +102,18 @@ void drawPixel(S3L_PixelInfo *p)
|
||||||
const S3L_Unit *coords;
|
const S3L_Unit *coords;
|
||||||
|
|
||||||
coords = tex_coords + p->triangleID * 6;
|
coords = tex_coords + p->triangleID * 6;
|
||||||
|
|
||||||
|
u = S3L_interpolateBarycentric(
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
15,
|
||||||
|
p->barycentric0, p->barycentric1, p->barycentric2);
|
||||||
|
|
||||||
|
v = S3L_interpolateBarycentric(
|
||||||
|
0,
|
||||||
|
15,
|
||||||
|
0,
|
||||||
|
p->barycentric0, p->barycentric1, p->barycentric2);
|
||||||
/*
|
/*
|
||||||
u = S3L_interpolateBarycentric(
|
u = S3L_interpolateBarycentric(
|
||||||
coords[0],
|
coords[0],
|
||||||
|
@ -127,13 +127,12 @@ void drawPixel(S3L_PixelInfo *p)
|
||||||
coords[5],
|
coords[5],
|
||||||
p->barycentric0, p->barycentric1, p->barycentric2);
|
p->barycentric0, p->barycentric1, p->barycentric2);
|
||||||
*/
|
*/
|
||||||
// uint8_t col = texturePixel(u,v);
|
uint8_t col = texturePixel(u,v);
|
||||||
|
uint8_t dep = (p->depth / 5000.0) * 255;
|
||||||
|
|
||||||
// setPixel(p->x,p->y,col * 120,20,(2 - col) * 120);
|
setPixel(p->x,p->y,col * 120,dep,(2 - col) * 120);
|
||||||
|
|
||||||
uint8_t sss = (p->depth / 5000.0) * 255 ;
|
//setPixel(p->x,p->y,sss, (p->triangleID * 37) % 255 ,128);
|
||||||
|
|
||||||
setPixel(p->x,p->y,sss, (p->triangleID * 37) % 255 ,128);
|
|
||||||
|
|
||||||
//setPixel(p->x,p->y,p->modelID * 64,p->modelID * 128,255);
|
//setPixel(p->x,p->y,p->modelID * 64,p->modelID * 128,255);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue