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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.06.2011, 04:34
alexandra alexandra вне форума
Прохожий
 
Регистрация: 19.06.2011
Сообщения: 9
Версия Delphi: 7
Репутация: 10
Смущение создание Параллелепипед из 3х параллелограммов, нужна помощь

Ребята, очень нужна помощь и к сожалению чем раньше тем лучше

Нужно создать Параллелепипед, он должен собираться из трех параллелограммов. Я частично сделала, а точнее: сделала форму, на которой выводиться размеры объекта, начальное положение, НО это всё для одного параллелограмма, а не для Параллелепипед! не выходит создать все 3 параллелограмма, чтобы они соединялись и образовали Параллелепипед.

вот более точное задание:
Размеры и положение объекта указываются пользователем (в ходе выполнения программы). Объект (по команде пользователя) должен вращаться вокруг одной из осей координат. Скорость вращения объекта является одним из свойств класса (не обязательно, но если знаете как буду очень признательна ). При создании объекта пользователь должен иметь возможность задавать:
• размеры объекта;
• начальное положение;
• цвет объекта;
• скорость вращения;
• выбирать ось, относительно которой будет вращаться объект.
Разработать программу с использованием этого класса.
Вложения
Тип файла: zip параллелепипед.zip (212.6 Кбайт, 13 просмотров)
Ответить с цитированием
  #2  
Старый 19.06.2011, 04:49
alexandra alexandra вне форума
Прохожий
 
Регистрация: 19.06.2011
Сообщения: 9
Версия Delphi: 7
Репутация: 10
Смущение

я блондинка попытаюсь на пальцах объяснить как это должно выглядеть

выводиться размеры объекта, начальное положение
|
V
рисуется параллелепипед (а они рисуются из 3х параллелограммов)
|
V
и под формой начальных данных X, Y, R
указывается угол на который поворачивается параллелепипед (то есть три параллелограмма соединяются в один объект)
я сама пыталась разобраться и сюда решила написать в последний момент, мне после выходных сдавать

буду рада любой помощи!!!! Заранее спасибо!!!
Ответить с цитированием
  #3  
Старый 19.06.2011, 05:24
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

Сашенька, мог бы Вам помочь, но слишком пьян)))
Ответить с цитированием
  #4  
Старый 19.06.2011, 05:43
alexandra alexandra вне форума
Прохожий
 
Регистрация: 19.06.2011
Сообщения: 9
Версия Delphi: 7
Репутация: 10
По умолчанию

ну вы "выздоравливайте"
если будет возможность сегодня (в воскресенье) вечером-ночью помочь, буду очень рада!!

Последний раз редактировалось alexandra, 19.06.2011 в 05:48.
Ответить с цитированием
  #5  
Старый 26.06.2011, 16:55
alexandra alexandra вне форума
Прохожий
 
Регистрация: 19.06.2011
Сообщения: 9
Версия Delphi: 7
Репутация: 10
Лампочка обновления темы =), что то получилось, но не до конца

Ребята! с большей частью задачи справилась, уже рисуется куб по заданным параметрам. Я сама вижу что в коде много "мусора", не могли бы вы мне помочь, как то оптимизировать.

На данный момент, я не разобралась и не получается исправить следующие проблемы:
1) рисуется фигура, потом если задаем новые координаты и размеры, фигура перерисовывается, но не стирает прошлые линии
Первую проблему решила вот так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
 PatBlt(Form1.Canvas.Handle,
 0,
 0,
 Form1.ClientWidth,
 Form1.ClientHeight - Shape1.ClientHeight - 6,
 WHITENESS);
end;
2) и то что я задавала серый цвет заливки, он не заливает фигуру
3 и наверное самое сложное, я не могу доделать перерисовку фигуры в зависимости заданного градуса

Буду рада,если подскажите решение хоть одной проблемки
Вложения
Тип файла: zip _куб.zip (217.4 Кбайт, 9 просмотров)

Последний раз редактировалось alexandra, 26.06.2011 в 19:00. Причина: up
Ответить с цитированием
  #6  
Старый 26.06.2011, 21:57
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от alexandra
2) и то что я задавала серый цвет заливки, он не заливает фигуру
Странно, у меня серый куб.
Ответить с цитированием
  #7  
Старый 26.06.2011, 23:16
alexandra alexandra вне форума
Прохожий
 
Регистрация: 19.06.2011
Сообщения: 9
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Странно, у меня серый куб.
только контур серый, нужно чтоб грани куба заливались цветом, допустим серым, и контур черный
у меня пере наследование и тп.. всё перепутано и нормально уже не работает
Ответить с цитированием
  #8  
Старый 26.06.2011, 23:26
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Так и рисуется. Я сейчас ковыряюсь в исходниках, но пока стараюсь отойти от наследования для упрощения. А там видно будет.
Изображения
Тип файла: png cub.png (15.2 Кбайт, 11 просмотров)

Последний раз редактировалось angvelem, 26.06.2011 в 23:59.
Ответить с цитированием
  #9  
Старый 27.06.2011, 00:17
alexandra alexandra вне форума
Прохожий
 
Регистрация: 19.06.2011
Сообщения: 9
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Так и рисуется. Я сейчас ковыряюсь в исходниках, но пока стараюсь отойти от наследования для упрощения. А там видно будет.

столько раз исправляла, сперва рисовало всё нормально (серый куб с черными гранями) но после перерисовки, оставался след фигуры..
пока избавлялась, пришлось это дело убрать))
в общем.. проблема решена)))

осталось самое сложное! чтоб поворачивалось на заданный градус

если это как то упростит задачу.. прикрепляю исходники не моего куда.. там тоже не используется openGL
там фигура поворачивается по x, y, z стрелочками клавиатуры
я оттуда вырвала кусочек, можно заметить:
Код:
procedure TCube.RotateY(a: single; var x, y, z: single);
var
  xx,zz,c,s:single;
begin
  a:=30;
  c:=cos(a*pi/180);     // матрица поворота имеет вид
  s:=sin(a*pi/180);
  xx:=x*c+z*s;
  zz:=-x*s+z*c;         //      |CosX  0  -sinX |
  x:=xx;                //   Ry=|  0   1    0   |
  y:=y;                 //      |SinX  0    CosX|
  z:=zz;
end;
вот мне его нормально пристроить так и не удалось
Вложения
Тип файла: zip куб_не_мой.zip (226.7 Кбайт, 8 просмотров)
Ответить с цитированием
  #10  
Старый 27.06.2011, 00:32
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Тогда, посмотри этот проект, может подойдёт
Вложения
Тип файла: rar cub.rar (6.5 Кбайт, 11 просмотров)
Ответить с цитированием
  #11  
Старый 27.06.2011, 00:53
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

друзья-товарищи, если куб должен быть залитым, не забудьте позаботиться об удалении не видимых граней, используя при этом метод отброса не лицевых граней. Проверка на то, повернута ли вам грань передом или задом происходит следующим способом:

дана грань с вершинами V1,V2,V3. Соответственно каждая вершина состоит из координат x,y,z.

находим некоторые коэффициенты.

A=(V2.y-V1.y)*(v3.z-V1.z)-(V2.z-V1.z)*(v3.y-V1.y)
B=(V2.z-V1.z)*(v3.x-V1.x)-(V2.x-V1.x)*(v3.z-V1.z)
C=(V2.x-V1.x)*(v3.y-V1.y)-(V2.y-V1.y)*(v3.x-V1.x)


далее проверяем

если c*focus_kamera+A*V1.x+B*V1.y+C*V1.z<0 то рисуем грань.

focus_kamera это фокусное расстояние, значение которого используется при проекции трехмерных координат на двухмерную плоскость, т.е. на ваш монитор. В основном я его беру равным 250-300
Если грань не нарисуется то поменяйте знак < на >, т.к. там имеет значение то, в каком порядке у вас идет обход граней, либо по часовой стрелке , либо против...
вот собственно нахождение двухмерных координат зная трехмерные

X2D:=(WindowWidth/2+FOCUS_KAMERA*(V.X3D) /(FOCUS_KAMERA+V.Z3DP));
Y2D:=(WindowHeight/2-FOCUS_KAMERA*(V.Y3DP) /(FOCUS_KAMERA+V.Z3DP));
Ответить с цитированием
  #12  
Старый 27.06.2011, 00:57
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

В приложенном последнем архиве это и сделано, мог бы и посмотреть перед ответом.
Ответить с цитированием
  #13  
Старый 27.06.2011, 00:58
alexandra alexandra вне форума
Прохожий
 
Регистрация: 19.06.2011
Сообщения: 9
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Тогда, посмотри этот проект, может подойдёт

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

Можно от туда попробовать вытащить нужные части кода, но боюсь, что в мой проект не получиться вставить это со всей запутанностью моего проекта
Ответить с цитированием
  #14  
Старый 27.06.2011, 01:04
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

В твоём проекте, как раз и не заложена возможность сокрытия невидимых граней. При повороте такого куба (а куба как такового нет) возникнет масса проблем с перерисовкой. И, если преподователь помогал, он не мог этого не понимать.
Ответить с цитированием
  #15  
Старый 27.06.2011, 01:12
alexandra alexandra вне форума
Прохожий
 
Регистрация: 19.06.2011
Сообщения: 9
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
В твоём проекте, как раз и не заложена возможность сокрытия невидимых граней. При повороте такого куба (а куба как такового нет) возникнет масса проблем с перерисовкой. И, если преподователь помогал, он не мог этого не понимать.

Значит, в моем проекте это сделать будет сложно, и легче делать новый, на основе предложенных вариантов?
видимо у него свое видение и по думал, что дальше сама справлюсь =\
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter