Не знаю много о том, как люди программируют трехмерные вещи, поэтому я просто приведу чистую математику и надеюсь, что это полезно.
Сфера радиуса 1 с центром в начале координат - это множество точек, удовлетворяющих:
x 2 + y 2 + z 2 = 1
Мы хотим, чтобыТрехмерные координаты точки на сфере, где известны x и y.Итак, просто решите для z:
z = ± sqrt (1 - x 2 - y 2 ).
Теперь давайте рассмотрим единичный вектор, направленный наружу из сферы.Это единичная сфера, поэтому мы можем просто использовать вектор от начала координат до (x, y, z), что, конечно,.
Теперь нам нужно уравнение касательной плоскости к сфере в точке (x, y, z), но для этого будут использоваться собственные переменные x, y и z, поэтому вместо этого я сделаю этокасательная к сфере в (х 0 , у 0 , z 0 ).Это просто:
x 0 x + y 0 y + z 0 z = 1
Надеюсь, это поможет.
(OP):
Вы имеете в виду что-то вроде:
const int R = 31, SZ = power_of_two(R*2);
std::vector<vec4_t> p;
for(int y=0; y<SZ; y++) {
for(int x=0; x<SZ; x++) {
const float rx = (float)(x-R)/R, ry = (float)(y-R)/R;
if(rx*rx+ry*ry > 1) { // outside sphere
p.push_back(vec4_t(0,0,0,0));
} else {
vec3_t normal(rx,sqrt(1.-rx*rx-ry*ry),ry);
p.push_back(vec4_t(normal,1));
}
}
}
Это делает хорошую сферическую штриховкуесли я буду относиться к нормам как к цветам и притворять их;это правильно?
(TZ)
Извините, я не знаком с этими аспектами C ++.Я не очень часто использовал этот язык в последнее время.