forked from bartvdbraak/blender
Paint system:
Random texture mapping * Support for 2d painting. * Better random generation and useof the result.
This commit is contained in:
parent
974d73bfbf
commit
1942452ce5
@ -67,6 +67,7 @@ int BKE_brush_clone_image_delete(struct Brush *brush);
|
||||
/* jitter */
|
||||
void BKE_brush_jitter_pos(const struct Scene *scene, struct Brush *brush,
|
||||
const float pos[2], float jitterpos[2]);
|
||||
void BKE_brush_randomize_texture_coordinates(struct UnifiedPaintSettings *ups);
|
||||
|
||||
/* brush curve */
|
||||
void BKE_brush_curve_preset(struct Brush *b, int preset);
|
||||
|
@ -525,21 +525,17 @@ float BKE_brush_sample_tex_3D(const Scene *scene, Brush *br,
|
||||
float radius = 1.0f; /* Quite warnings */
|
||||
float co[3];
|
||||
|
||||
if (mtex->brush_map_mode == MTEX_MAP_MODE_VIEW ||
|
||||
mtex->brush_map_mode == MTEX_MAP_MODE_RANDOM)
|
||||
if (mtex->brush_map_mode == MTEX_MAP_MODE_VIEW)
|
||||
{
|
||||
/* keep coordinates relative to mouse */
|
||||
|
||||
rotation += ups->brush_rotation;
|
||||
|
||||
point_2d[0] -= ups->tex_mouse[0];
|
||||
point_2d[1] -= ups->tex_mouse[1];
|
||||
x = point_2d[0] - ups->tex_mouse[0];
|
||||
y = point_2d[1] - ups->tex_mouse[1];
|
||||
|
||||
/* use pressure adjusted size for fixed mode */
|
||||
radius = ups->pixel_radius;
|
||||
|
||||
x = point_2d[0];
|
||||
y = point_2d[1];
|
||||
}
|
||||
else if (mtex->brush_map_mode == MTEX_MAP_MODE_TILED) {
|
||||
/* leave the coordinates relative to the screen */
|
||||
@ -549,6 +545,13 @@ float BKE_brush_sample_tex_3D(const Scene *scene, Brush *br,
|
||||
|
||||
x = point_2d[0];
|
||||
y = point_2d[1];
|
||||
} else if (mtex->brush_map_mode == MTEX_MAP_MODE_RANDOM) {
|
||||
rotation += ups->brush_rotation;
|
||||
/* these contain a random coordinate */
|
||||
x = point_2d[0] - ups->tex_mouse[0];
|
||||
y = point_2d[1] - ups->tex_mouse[1];
|
||||
|
||||
radius = ups->pixel_radius;
|
||||
}
|
||||
|
||||
x /= radius;
|
||||
@ -661,6 +664,14 @@ float BKE_brush_sample_tex_2D(const Scene *scene, Brush *brush, const float xy[2
|
||||
rotation += ups->brush_rotation;
|
||||
radius = ups->pixel_radius;
|
||||
}
|
||||
else if (mtex->brush_map_mode == MTEX_MAP_MODE_RANDOM) {
|
||||
rotation += ups->brush_rotation;
|
||||
/* these contain a random coordinate */
|
||||
x -= ups->tex_mouse[0];
|
||||
y -= ups->tex_mouse[1];
|
||||
|
||||
radius = ups->pixel_radius;
|
||||
}
|
||||
|
||||
x /= radius;
|
||||
y /= radius;
|
||||
@ -981,6 +992,13 @@ void BKE_brush_jitter_pos(const Scene *scene, Brush *brush, const float pos[2],
|
||||
}
|
||||
}
|
||||
|
||||
void BKE_brush_randomize_texture_coordinates(UnifiedPaintSettings *ups) {
|
||||
/* we multiply with brush radius as an optimization for the brush
|
||||
* texture sampling functions */
|
||||
ups->tex_mouse[0] = BLI_rng_get_float(brush_rng)*ups->pixel_radius;
|
||||
ups->tex_mouse[1] = BLI_rng_get_float(brush_rng)*ups->pixel_radius;
|
||||
}
|
||||
|
||||
/* Uses the brush curve control to find a strength value between 0 and 1 */
|
||||
float BKE_brush_curve_strength_clamp(Brush *br, float p, const float len)
|
||||
{
|
||||
|
@ -345,6 +345,7 @@ static void brush_painter_2d_refresh_cache(BrushPainter *painter, const float po
|
||||
const int diameter = 2 * BKE_brush_size_get(scene, brush);
|
||||
const float alpha = BKE_brush_alpha_get(scene, brush);
|
||||
const bool do_tiled = ELEM(brush->mtex.brush_map_mode, MTEX_MAP_MODE_TILED, MTEX_MAP_MODE_3D);
|
||||
const bool do_random = brush->mtex.brush_map_mode == MTEX_MAP_MODE_RANDOM;
|
||||
float rotation = -mtex->rot;
|
||||
|
||||
if (mtex->brush_map_mode == MTEX_MAP_MODE_VIEW) {
|
||||
@ -354,7 +355,8 @@ static void brush_painter_2d_refresh_cache(BrushPainter *painter, const float po
|
||||
if (diameter != cache->lastsize ||
|
||||
alpha != cache->lastalpha ||
|
||||
brush->jitter != cache->lastjitter ||
|
||||
rotation != cache->last_rotation)
|
||||
rotation != cache->last_rotation ||
|
||||
do_random)
|
||||
{
|
||||
if (cache->ibuf) {
|
||||
IMB_freeImBuf(cache->ibuf);
|
||||
|
@ -188,13 +188,10 @@ static void paint_brush_update(bContext *C, Brush *brush, PaintMode mode,
|
||||
ups->brush_rotation = 0.0f;
|
||||
}
|
||||
|
||||
if ((brush->mtex.brush_map_mode == MTEX_MAP_MODE_RANDOM)) {
|
||||
ups->tex_mouse[0] = BLI_frand() * stroke->vc.ar->sizex;
|
||||
ups->tex_mouse[1] = BLI_frand() * stroke->vc.ar->sizey;;
|
||||
}
|
||||
else {
|
||||
if ((brush->mtex.brush_map_mode == MTEX_MAP_MODE_RANDOM))
|
||||
BKE_brush_randomize_texture_coordinates(ups);
|
||||
else
|
||||
copy_v2_v2(ups->tex_mouse, mouse);
|
||||
}
|
||||
}
|
||||
|
||||
if (brush->flag & BRUSH_ANCHORED) {
|
||||
|
Loading…
Reference in New Issue
Block a user