forked from bartvdbraak/blender
Another fix for off-by-one hair grid resolution errors.
This commit is contained in:
parent
9c660f18ac
commit
a754c0af40
@ -5255,22 +5255,22 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
|
|||||||
UI_ThemeColorShadeAlpha(TH_WIRE, 0, -100);
|
UI_ThemeColorShadeAlpha(TH_WIRE, 0, -100);
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBegin(GL_LINES);
|
glBegin(GL_LINES);
|
||||||
for (i = 1; i < res[0]; ++i) {
|
for (i = 1; i < res[0]-1; ++i) {
|
||||||
float f = interpf(b[0], a[0], (float)i / (float)(res[0]));
|
float f = interpf(b[0], a[0], (float)i / (float)(res[0]-1));
|
||||||
glVertex3f(f, a[1], a[2]); glVertex3f(f, b[1], a[2]);
|
glVertex3f(f, a[1], a[2]); glVertex3f(f, b[1], a[2]);
|
||||||
glVertex3f(f, b[1], a[2]); glVertex3f(f, b[1], b[2]);
|
glVertex3f(f, b[1], a[2]); glVertex3f(f, b[1], b[2]);
|
||||||
glVertex3f(f, b[1], b[2]); glVertex3f(f, a[1], b[2]);
|
glVertex3f(f, b[1], b[2]); glVertex3f(f, a[1], b[2]);
|
||||||
glVertex3f(f, a[1], b[2]); glVertex3f(f, a[1], a[2]);
|
glVertex3f(f, a[1], b[2]); glVertex3f(f, a[1], a[2]);
|
||||||
}
|
}
|
||||||
for (i = 1; i < res[1]; ++i) {
|
for (i = 1; i < res[1]-1; ++i) {
|
||||||
float f = interpf(b[1], a[1], (float)i / (float)(res[1]));
|
float f = interpf(b[1], a[1], (float)i / (float)(res[1]-1));
|
||||||
glVertex3f(a[0], f, a[2]); glVertex3f(b[0], f, a[2]);
|
glVertex3f(a[0], f, a[2]); glVertex3f(b[0], f, a[2]);
|
||||||
glVertex3f(b[0], f, a[2]); glVertex3f(b[0], f, b[2]);
|
glVertex3f(b[0], f, a[2]); glVertex3f(b[0], f, b[2]);
|
||||||
glVertex3f(b[0], f, b[2]); glVertex3f(a[0], f, b[2]);
|
glVertex3f(b[0], f, b[2]); glVertex3f(a[0], f, b[2]);
|
||||||
glVertex3f(a[0], f, b[2]); glVertex3f(a[0], f, a[2]);
|
glVertex3f(a[0], f, b[2]); glVertex3f(a[0], f, a[2]);
|
||||||
}
|
}
|
||||||
for (i = 1; i < res[2]; ++i) {
|
for (i = 1; i < res[2]-1; ++i) {
|
||||||
float f = interpf(b[2], a[2], (float)i / (float)(res[2]));
|
float f = interpf(b[2], a[2], (float)i / (float)(res[2]-1));
|
||||||
glVertex3f(a[0], a[1], f); glVertex3f(b[0], a[1], f);
|
glVertex3f(a[0], a[1], f); glVertex3f(b[0], a[1], f);
|
||||||
glVertex3f(b[0], a[1], f); glVertex3f(b[0], b[1], f);
|
glVertex3f(b[0], a[1], f); glVertex3f(b[0], b[1], f);
|
||||||
glVertex3f(b[0], b[1], f); glVertex3f(a[0], b[1], f);
|
glVertex3f(b[0], b[1], f); glVertex3f(a[0], b[1], f);
|
||||||
|
@ -794,18 +794,18 @@ HairGrid *BPH_hair_volume_create_vertex_grid(float cellsize, const float gmin[3]
|
|||||||
|
|
||||||
sub_v3_v3v3(extent, gmax, gmin);
|
sub_v3_v3v3(extent, gmax, gmin);
|
||||||
for (i = 0; i < 3; ++i) {
|
for (i = 0; i < 3; ++i) {
|
||||||
resmin[i] = (int)(gmin[i] * scale);
|
resmin[i] = floor_int(gmin[i] * scale);
|
||||||
resmax[i] = (int)(gmax[i] * scale) + 1;
|
resmax[i] = floor_int(gmax[i] * scale) + 1;
|
||||||
|
|
||||||
/* add margin of 1 cell */
|
/* add margin of 1 cell */
|
||||||
resmin[i] -= 1;
|
resmin[i] -= 1;
|
||||||
resmax[i] += 1;
|
resmax[i] += 1;
|
||||||
|
|
||||||
res[i] = resmax[i] - resmin[i];
|
res[i] = resmax[i] - resmin[i] + 1;
|
||||||
/* sanity check: avoid null-sized grid */
|
/* sanity check: avoid null-sized grid */
|
||||||
if (res[i] < 3) {
|
if (res[i] < 4) {
|
||||||
res[i] = 3;
|
res[i] = 4;
|
||||||
resmax[i] = resmin[i] + 3;
|
resmax[i] = resmin[i] + 4;
|
||||||
}
|
}
|
||||||
/* sanity check: avoid too large grid size */
|
/* sanity check: avoid too large grid size */
|
||||||
if (res[i] > MAX_HAIR_GRID_RES) {
|
if (res[i] > MAX_HAIR_GRID_RES) {
|
||||||
|
Loading…
Reference in New Issue
Block a user