Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.04.2011, 18:35
AlexSoft AlexSoft вне форума
Прохожий
 
Регистрация: 03.04.2010
Сообщения: 14
Репутация: 10
По умолчанию как нарисовать Объёмный шар

Можно ли нарисовать Объёмный шар в дельфи с помощью конвы? Если можно, то как?
Ответить с цитированием
  #2  
Старый 06.04.2011, 18:41
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

Встроенных делфовских функций нет для отрисовки объемных изображений
Используй OpenGL или DelphiX. ну или на худой конец можешь сам написать функции рендеринга 3D изображений))
Ответить с цитированием
  #3  
Старый 06.04.2011, 19:53
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Цитата:
Сообщение от AlexSoft
Можно ли нарисовать Объёмный шар в дельфи с помощью конвы? Если можно, то как?
Проекция шара это окружность. Видимо стоит задача освещённости?
ball.jpg
Ответить с цитированием
  #4  
Старый 06.04.2011, 20:18
AlexSoft AlexSoft вне форума
Прохожий
 
Регистрация: 03.04.2010
Сообщения: 14
Репутация: 10
По умолчанию

Цитата:
Сообщение от AlexSku
Проекция шара это окружность. Видимо стоит задача освещённости?
Вложение 2033

ДА. Как сделать нужную освещенность?
Ответить с цитированием
  #5  
Старый 06.04.2011, 22:14
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

А я просто использую DirectX, он сам ведёт расчёты. При желании можно найти формулы (типа "угол падения равен углу отражения"), но это будут не формулы реальной сцены, а описывающие модели освещённости в DirectX. Шар же представлен сетью треугольников (mesh), у каждой вершины задаётся нормаль.
Ещё объёмность можно передать рисунком (примеры: земной шар, футбольный мяч). В DirectX это также делается просто: плоский рисунок (текстура) "натягивается" на сферу.
Ответить с цитированием
  #6  
Старый 06.04.2011, 22:33
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Первое что в голову пришло :
Код:
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  
Старый 07.04.2011, 10:42
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Оригинально. Правда, очень медленно - несколько секунд (в 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  
Старый 07.04.2011, 14:14
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

можно в принципе и так
Код:
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  
Старый 07.04.2011, 19:14
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Цитата:
Сообщение от Pilot_Red
Дальше пойдут вопросы типа, а как изображениенатянуть на шар, а как от него тени сделать, а как прозрачность и.т.д.
Так мы по простому так и текстуры сделаем и освещение пару строк кода без DX и GL
__________________
If end Then begin;
Ответить с цитированием
  #10  
Старый 07.04.2011, 19:21
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

Цитата:
Сообщение от AND_REY
Так мы по простому так и текстуры сделаем и освещение пару строк кода без DX и GL
Ага, Кармак в свое время тоже все по простому делал...
Эх чувствую революцию в графике
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:40.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter