Задавайте вопросы по Houdini!
- Автор темы stass3d
- Дата создания
Методом тыка определил что переключается Display As
http://take.ms/OV1iB
А настройки, вроде, в Display Options(горячая клавиша D), Geometry/Level Of Detail
http://take.ms/OV1iB
А настройки, вроде, в Display Options(горячая клавиша D), Geometry/Level Of Detail
Методом тыка определил что переключается Display As
http://take.ms/OV1iB
А настройки, вроде, в Display Options(горячая клавиша D), Geometry/Level Of Detail
http://take.ms/OV1iB
А настройки, вроде, в Display Options(горячая клавиша D), Geometry/Level Of Detail
Добрый день! вот такой кодик, не могу понять что и куда нужно прописать чтобы в итоге в функцию добавилось значение позволяющее смещать segment по оси Z ?((
#define TAO 6.28318530718
#define PI 3.14159265359
//build one segment
int segment (float rad_min;
float rad_max;
float start_theta;
float end_theta;
int resolution {
float theta;
int pt;
int prim = addprim(geoself(), "poly");
float theta_step = (end_theta - start_theta) / (float)resolution;
// inner radius
for(int step=0; step<resolution+1; step++){
theta = start_theta + (theta_step * step);
pt = addpoint(geoself(), set(cos(theta)*rad_min, sin(theta)*rad_min, 0));
addvertex(geoself(), prim, pt);
}
// outer radius
for(int step=0; step<resolution+1; step++){
theta = end_theta - (theta_step * step);
pt = addpoint(geoself(), set(cos(theta)*rad_max, sin(theta)*rad_max, 0));
addvertex(geoself(), prim, pt);
}
return prim;
}
segment(0.9, 1.25, 0, 0.5, 10);
#define TAO 6.28318530718
#define PI 3.14159265359
//build one segment
int segment (float rad_min;
float rad_max;
float start_theta;
float end_theta;
int resolution {
float theta;
int pt;
int prim = addprim(geoself(), "poly");
float theta_step = (end_theta - start_theta) / (float)resolution;
// inner radius
for(int step=0; step<resolution+1; step++){
theta = start_theta + (theta_step * step);
pt = addpoint(geoself(), set(cos(theta)*rad_min, sin(theta)*rad_min, 0));
addvertex(geoself(), prim, pt);
}
// outer radius
for(int step=0; step<resolution+1; step++){
theta = end_theta - (theta_step * step);
pt = addpoint(geoself(), set(cos(theta)*rad_max, sin(theta)*rad_max, 0));
addvertex(geoself(), prim, pt);
}
return prim;
}
segment(0.9, 1.25, 0, 0.5, 10);
И не думал смеяться.
Вот для смещения по z, если я все правильно понял.
#define TAO 6.28318530718
#define PI 3.14159265359
//build one segment
int segment (float rad_min;
float rad_max;
float start_theta;
float end_theta;
int resolution;
float trans_z {
float theta;
int pt;
int prim = addprim(geoself(), "poly");
float theta_step = (end_theta - start_theta) / (float)resolution;
// inner radius
for(int step=0; step<resolution+1; step++){
theta = start_theta + (theta_step * step);
pt = addpoint(geoself(), set(cos(theta)*rad_min, sin(theta)*rad_min, trans_z));
addvertex(geoself(), prim, pt);
}
// outer radius
for(int step=0; step<resolution+1; step++){
theta = end_theta - (theta_step * step);
pt = addpoint(geoself(), set(cos(theta)*rad_max, sin(theta)*rad_max, trans_z));
addvertex(geoself(), prim, pt);
}
return prim;
}
segment(0.9, 1.25, 0, 1, 10, 5);
Вот для смещения по z, если я все правильно понял.
#define TAO 6.28318530718
#define PI 3.14159265359
//build one segment
int segment (float rad_min;
float rad_max;
float start_theta;
float end_theta;
int resolution;
float trans_z {
float theta;
int pt;
int prim = addprim(geoself(), "poly");
float theta_step = (end_theta - start_theta) / (float)resolution;
// inner radius
for(int step=0; step<resolution+1; step++){
theta = start_theta + (theta_step * step);
pt = addpoint(geoself(), set(cos(theta)*rad_min, sin(theta)*rad_min, trans_z));
addvertex(geoself(), prim, pt);
}
// outer radius
for(int step=0; step<resolution+1; step++){
theta = end_theta - (theta_step * step);
pt = addpoint(geoself(), set(cos(theta)*rad_max, sin(theta)*rad_max, trans_z));
addvertex(geoself(), prim, pt);
}
return prim;
}
segment(0.9, 1.25, 0, 1, 10, 5);
Я бы попробовал использовать кривые по ним пускать нужный профиль и в вбд комбинировать с вычитанием, но это так(мысли вслух)
Извините за неточность(( как я говорил все чуть сложнее)) хочу получить возможность крутить "кольца" рандомно вокруг оси Z.
#define TAO 6.28318530718
#define PI 3.14159265359
//build one segment
int segment (float rad_min;
float rad_max;
float start_theta;
float end_theta;
int resolution;
float pos_z {
float theta;
int pt;
int prim = addprim(geoself(), "poly");
float theta_step = (end_theta - start_theta) / (float)resolution;
// inner radius
for(int step=0; step<resolution+1; step++){
theta = start_theta + (theta_step * step);
pt = addpoint(geoself(), set(cos(theta)*rad_min, sin(theta)*rad_min, pos_z));
addvertex(geoself(), prim, pt);
}
// outer radius
for(int step=0; step<resolution+1; step++){
theta = end_theta - (theta_step * step);
pt = addpoint(geoself(), set(cos(theta)*rad_max, sin(theta)*rad_max, pos_z));
addvertex(geoself(), prim, pt);
}
return prim;
}
//segment(0.9, 1.25, 0, 0.5, 10);
int ring (float min_arc ;
float max_arc ;
float rads_min ;
float rads_max ;
float skip_chance;
int rings_id;
float ring_seed {
float theta = 0;
float rand_step;
int seg_num = rings_id;
// circle logik
while (1) {
rand_step = fit(rand(seg_num+ring_seed), 0, 1, min_arc, max_arc);
if (rand(seg_num+9385+ring_seed) > skip_chance) {
segment(rads_min, rads_max, theta, theta+rand_step, 30, fit01(rand(seg_num), 1, 2));
}
theta += rand_step;
seg_num += 1;
if (theta >= TAO)
break;
}
return 1;
}
int num_rings = 10;
float start_rad = 0.5;
float end_rad = 10;
float ring_step = (start_rad - end_rad) / (float)num_rings;
float ring_radius = start_rad;
float rand_seed = 1145;
for(int i=0; i<num_rings; i++) {
ring(0.04, 1, ring_radius, ring_radius * 1.1, 0.7, i, rand_seed);
ring_radius += ring_step;
}
#define TAO 6.28318530718
#define PI 3.14159265359
//build one segment
int segment (float rad_min;
float rad_max;
float start_theta;
float end_theta;
int resolution;
float pos_z {
float theta;
int pt;
int prim = addprim(geoself(), "poly");
float theta_step = (end_theta - start_theta) / (float)resolution;
// inner radius
for(int step=0; step<resolution+1; step++){
theta = start_theta + (theta_step * step);
pt = addpoint(geoself(), set(cos(theta)*rad_min, sin(theta)*rad_min, pos_z));
addvertex(geoself(), prim, pt);
}
// outer radius
for(int step=0; step<resolution+1; step++){
theta = end_theta - (theta_step * step);
pt = addpoint(geoself(), set(cos(theta)*rad_max, sin(theta)*rad_max, pos_z));
addvertex(geoself(), prim, pt);
}
return prim;
}
//segment(0.9, 1.25, 0, 0.5, 10);
int ring (float min_arc ;
float max_arc ;
float rads_min ;
float rads_max ;
float skip_chance;
int rings_id;
float ring_seed {
float theta = 0;
float rand_step;
int seg_num = rings_id;
// circle logik
while (1) {
rand_step = fit(rand(seg_num+ring_seed), 0, 1, min_arc, max_arc);
if (rand(seg_num+9385+ring_seed) > skip_chance) {
segment(rads_min, rads_max, theta, theta+rand_step, 30, fit01(rand(seg_num), 1, 2));
}
theta += rand_step;
seg_num += 1;
if (theta >= TAO)
break;
}
return 1;
}
int num_rings = 10;
float start_rad = 0.5;
float end_rad = 10;
float ring_step = (start_rad - end_rad) / (float)num_rings;
float ring_radius = start_rad;
float rand_seed = 1145;
for(int i=0; i<num_rings; i++) {
ring(0.04, 1, ring_radius, ring_radius * 1.1, 0.7, i, rand_seed);
ring_radius += ring_step;
}