Модераторы: Snowy, Alexeis, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 3D Поверхность по точкам (X,Y,Z), любые советы, примеры, исходники...  
:(
    Опции темы
Mixasik
Дата 20.7.2008, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Little Delphi monstr
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 4.10.2006
Где: Волгоград

Репутация: нет
Всего: нет



Нужна помощь как по точкам (X,Y,Z) построить поверхность в Delphi. Я решил использовать OpenGL, но вот проблема нигде не могу найти примера, совета... Просмотрел весь форум по 2-3 ответа, но все равно ничего не ясно. Мне бы для начала понять саму идею как это делается... Как мне показалось, облазил весь интернет, поэтому буду рад абсолютно любому совету, примеру...  smile 
Строить нужно имеено по точка, поверхность заведомо не известная.. и точки могут лежать как внутри нее так и на границе... Поверхность должна быть сеткой, то есть прозрачная отчасти...  smile 
PM MAIL ICQ   Вверх
Mixasik
Дата 21.7.2008, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Little Delphi monstr
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 4.10.2006
Где: Волгоград

Репутация: нет
Всего: нет



Что-то никто на эту тему не хочет говорить, даже идей)))  smile 
PM MAIL ICQ   Вверх
Alexeis
Дата 21.7.2008, 16:20 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



  Есть идеи, времени нет smile . Нужно сделать обход точек по 3 штуки, посчитать нормали и загнать все это в опенгл, остальное он сам нарисует.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Mixasik
Дата 21.7.2008, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Little Delphi monstr
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 4.10.2006
Где: Волгоград

Репутация: нет
Всего: нет



Благодарю. Вот хоть что-то... немножко бы подробнее было бы вообще чудесно smile Точки три это ясно, а вот как нормали к ним найти(это как я понял по уравнению плоскости в пространстве?), и еще вопрос если в массиве точек находятся те точки, которые не лежат на поверхности, а находятся внтри них, так как я понял, что при расчете некоторой функции 2-х переменных результатами будут точки не только на поверхности, но и внутри... Или не так?


Это сообщение отредактировал(а) Mixasik - 21.7.2008, 16:39
PM MAIL ICQ   Вверх
Alexeis
Дата 21.7.2008, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Любой паре X, Y должно соответствовать уникальное значение Z по определению. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Mixasik
Дата 21.7.2008, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Little Delphi monstr
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 4.10.2006
Где: Волгоград

Репутация: нет
Всего: нет



Цитата(Alexeis @ 21.7.2008,  16:45)
Любой паре X, Y должно соответствовать уникальное значение Z по определению.

С пространственным мышлением у меня что-то плохо... То есть надо выделить три точки через которые можно провести плоскость, то есть они не должны лежать на одной прямой потом найти к ним нормаль... и вызвать некую функцию OpeGL? (Какую? Нужно чтобы поверхность как бы была обтянута сеткой и было видно поверхности за ней и т.д)

PM MAIL ICQ   Вверх
Alexeis
Дата 21.7.2008, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Mixasik, на счет нормалей и добавления точек все уже было, нуна тока поиском воспользоваться. Эту задачу уже решали много раз.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Mixasik
Дата 21.7.2008, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Little Delphi monstr
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 4.10.2006
Где: Волгоград

Репутация: нет
Всего: нет



А насчет сетки и видимости дальних поверхностей? smile
PM MAIL ICQ   Вверх
Alexeis
Дата 21.7.2008, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Цитата(Mixasik @  21.7.2008,  16:46 Найти цитируемый пост)
А насчет сетки и видимости дальних поверхностей?

  Нинаю чего ето. В Опенгл работает отсечение полигонов по нормалям + z-buffer. Этого хватает пока что, тем более что реализовано аппаратно в видеокартах.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Mixasik
Дата 21.7.2008, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Little Delphi monstr
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 4.10.2006
Где: Волгоград

Репутация: нет
Всего: нет



То есть поверхность с меньшим числом z итак будет на заднем фоне? Я вот не понял одного - мне потребуется найти вершинные точки поверхности, а потом брав их по три находить нормаль?
И в итоге передавать в какую функцию?)
p.s Может как-нибудь я напишу по icq? smile 

Это сообщение отредактировал(а) Mixasik - 21.7.2008, 20:21
PM MAIL ICQ   Вверх
Alexeis
Дата 21.7.2008, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459





--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Mixasik
Дата 21.7.2008, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Little Delphi monstr
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 4.10.2006
Где: Волгоград

Репутация: нет
Всего: нет



Спасибо... буду копать в той стороне. Этот метод называется методом четверок?)
PM MAIL ICQ   Вверх
Bitter
Дата 21.7.2008, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 6
Всего: 27



А точки у тебя задаются сразу все или надо получать поверхность полсе каждой следующей точки?
Ну в любом случае это задача триангуляции. То есть разбиение набора точек на группы из 3-х точек...
После триангуляции у тебя будет n-2 треугольников, где n - кол-во точек.

А функция, возвращающая нормаль выглядит примерно так (но пример привожу для DirectX):

Код


type
  TD3DVector = packed record
    x,y,z : Single;
  end;
...........
function D3DVector(x, y, z: Single): TD3DVector;
begin
  Result.x := x;
  Result.y := y;
  Result.z := z;
end;

function VectorCrossProduct(const v1, v2: TD3DVector) : TD3DVector;
begin
  result.x := (v1.y*v2.z) - (v1.z*v2.y);
  result.y := (v1.z*v2.x) - (v1.x*v2.z);
  result.z := (v1.x*v2.y) - (v1.y*v2.x);
end;

function VectorDivS(const v: TD3DVector; s: Single) : TD3DVector;
begin
  result.x := v.x/s;
  result.y := v.y/s;
  result.z := v.z/s;
end;

function VectorMagnitude(v: TD3DVector) : Single;
begin
  result := sqrt((v.x*v.x) + (v.y*v.y) + (v.z*v.z));
end;

function VectorNormalize(const v: TD3DVector) : TD3DVector;
begin
  result := VectorDivS(v,VectorMagnitude(v));
end;

function GetNormal( P1,P2,P3:TD3DVector ) : TD3DVector;;
var b,a:TD3DVector;
begin
  a:=D3DVector( P2.x-P1.x , P2.y-P1.y , P2.z-P1.z);
  b:=D3DVector( P3.x-P1.x , P3.y-P1.y , P3.z-P1.z);
  Result:=VectorNormalize(VectorCrossProduct(a,b));
end;


Так что копай в сторону триангуляции

Это сообщение отредактировал(а) Bitter - 21.7.2008, 21:37
PM MAIL ICQ Skype   Вверх
Mixasik
Дата 21.7.2008, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Little Delphi monstr
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 4.10.2006
Где: Волгоград

Репутация: нет
Всего: нет



Благодарю... ТАк и сделаю... а точки задаются все сразу они считаются отдельно и потом передаются в компонент smile
PM MAIL ICQ   Вверх
Mixasik
Дата 22.7.2008, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Little Delphi monstr
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 4.10.2006
Где: Волгоград

Репутация: нет
Всего: нет



Допустим я всзял по три точки, нашел нормаль, а как дальше в openGL нарисовать поверхность(то есть обтянуть сеткой)?  smile 
PM MAIL ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0563 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.