|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
как нарисовать Объёмный шар
Можно ли нарисовать Объёмный шар в дельфи с помощью конвы? Если можно, то как?
|
#2
|
||||
|
||||
Встроенных делфовских функций нет для отрисовки объемных изображений
Используй OpenGL или DelphiX. ну или на худой конец можешь сам написать функции рендеринга 3D изображений)) |
#4
|
|||
|
|||
Цитата:
ДА. Как сделать нужную освещенность? |
#5
|
|||
|
|||
А я просто использую DirectX, он сам ведёт расчёты. При желании можно найти формулы (типа "угол падения равен углу отражения"), но это будут не формулы реальной сцены, а описывающие модели освещённости в DirectX. Шар же представлен сетью треугольников (mesh), у каждой вершины задаётся нормаль.
Ещё объёмность можно передать рисунком (примеры: земной шар, футбольный мяч). В DirectX это также делается просто: плоский рисунок (текстура) "натягивается" на сферу. |
#6
|
||||
|
||||
Первое что в голову пришло :
Код:
Var x,y: Integer; t: Real; c: Byte; begin t:= -350; While t < 350 Do begin For c:= 255 DownTo 0 Do begin x:= Round(255+c*Sin(t)); y:= Round(255+c*Cos(t)); Form1.Canvas.Pixels[x,y]:= RGB(255-c,0,0); end; t:= t + 0.1; end; end; If end Then begin; |
#7
|
|||
|
|||
Оригинально. Правда, очень медленно - несколько секунд (в DirectX за секунду можно перерисовать буфер и несколько тысяч раз).
Я тоже думал над формулами. Я бы сделал несколько этапов. 1. (как у вас). Берётся убывающая ф-ия. Это яркость для R, G, B. Причём, если мы хотим в центре светлое пятно, то внутри пятна R=G=B. А за границами пятна G и B становятся 0, а R плавно убывает до некой константы. 2. Параметр убывающей ф-ции это сферические координаты широта и долгота. У широты диапазон -pi/2 .. pi/2 (северное и южное полушарие), а у долготы 0..pi (так любят математики) или -pi/2 .. pi/2 (так люди обозначают западное и восточное полушария). Сразу надо сделать поправку в функцию: половина полушария не освещена (или, как часто делают в DirectX, добавить небольшую константу). 3. Написать функцию поворота шара. Для сферических координат это просто смещение. 4. Наконец сделать проекцию. Это синусы и косинусы. |
#8
|
||||
|
||||
можно в принципе и так
Код:
var i,j:integer; lx,ly:integer;\\координаты блика на сфере ; begin lx:=100 ; ly:=100 ; for i:=1 to 300 do for j:=1 to 300 do begin if sqrt(sqr(i-150)+sqr(j-150))<150 then form1.Canvas.Pixels[i,j]:=255-round(sqrt(sqr(i-lx)+sqr(j-ly))); end; end; По-этому рекомендую DirectX или OpenGL |
#9
|
||||
|
||||
Цитата:
If end Then begin; |
#10
|
||||
|
||||
Цитата:
Эх чувствую революцию в графике |