Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 288

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Хочется сделать что то типа 3D пазла. Это когда пазл собирается не на плоских фишках, а на кубиках. На каждой грани есть свой кусок картинки и передвигаются они(кубики) по полю как в пятнашках(есть одно свободное поле и туда перекатывается кубик, показывая соответственно свою другую грань).
Так вот, в чем вопрос:
Пока хочу узнать, как порезать картинку что бы они(порезанные кусочки) были отдельными объектами и их можно было переворачивать и двигать и где то сохранять?
Какие есть варианты?

Написал сюда, потому что хочу реализовать на Delphi

Irbis Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Irbis (статус: Посетитель)
Вопрос отправлен: 15 октября 2009, 10:43
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Ну, если чисто теоретически, то я бы начал с разработки таких объектов, как:
1. Грань куба. Содержит фрагмент изображения типа TBitmap и отвечает за его отрисовку на экране.
2. Куб. Содержит массив из 6 граней, отвечает за их отрисовку, вращение и за своё перемещение.
3. Игровое пространство. Содержит массив кубов, отвечает за их отрисовку внутри себя, перемешивание/передвижение/вращение этих кубов мышью/клавой и логику.
Ну вот примерно такая абстракция.

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 15 октября 2009, 11:08


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 15 октября 2009, 13:20; участников в обсуждении: 3.
Вадим К

Вадим К (статус: Академик), 15 октября 2009, 11:23 [#1]:

что бы скопировать кусочек картинки с одного Image в другой (да и между TBitmap'ами так можно), можно воспользоваться функцией CopyRect. Ну где то так
  Image2.Canvas.CopyRect(
    Rect(0,0,Image2.Width,Image2.Height),
    Image1.Canvas,
    Rect(
      0,
      0,
      Image1.Picture.Width-50,
      Image1.Picture.Height-50));
А вот если нарисовать кубики хочется - прямая дорога до OpenGl (это проще) или DirectX (чуть сложнее) или прямо на GDI ваять (школьного курса геометрии и алгебры может не хватить).
Галочка "подтверждения прочтения" - вселенское зло.
AlexMPEI

AlexMPEI (статус: 1-ый класс), 15 октября 2009, 12:44 [#2]:

конечно OpenGL!

procedure DrawCube(size: GLfloat);
begin
glBegin(GL_QUADS);
// левая грань
glVertex3f( -size / 2, -size / 2, -size / 2);
glVertex3f( -size / 2, size / 2, -size / 2);
glVertex3f( -size / 2, size / 2, size / 2);
glVertex3f( -size / 2, -size / 2, size / 2);
// правая грань
glVertex3f( size / 2, -size / 2, -size / 2);
glVertex3f( size / 2, -size / 2, size / 2);
glVertex3f( size / 2, size / 2, size / 2);
glVertex3f( size / 2, size / 2, -size / 2);
// нижняя грань
glVertex3f( -size / 2, -size / 2, -size / 2);
glVertex3f( -size / 2, -size / 2, size / 2);
glVertex3f( size / 2, -size / 2, size / 2);
glVertex3f( size / 2, -size / 2, -size / 2);
// верхняя грань
glVertex3f( -size / 2, size / 2, -size / 2);
glVertex3f( -size / 2, size / 2, size / 2);
glVertex3f( size / 2, size / 2, size / 2);
glVertex3f( size / 2, size / 2, -size / 2);
// задняя грань
glVertex3f( -size / 2, -size / 2, -size / 2);
glVertex3f( size / 2, -size / 2, -size / 2);
glVertex3f( size / 2, size / 2, -size / 2);
glVertex3f( -size / 2, size / 2, -size / 2);
// передняя грань
glVertex3f( -size / 2, -size / 2, size / 2);
glVertex3f( size / 2, -size / 2, size / 2);
glVertex3f( size / 2, size / 2, size / 2);
glVertex3f( -size / 2, size / 2, size / 2);
glEnd();
end;

вот и 3х мерный куб нужного размера готов. обтянуть текстурами столь же просто. только нарезай и натягивай. вращение тоже несложно.
http://www.odelphi.ru/grafika-opengl/213-tekstury.html тут про то как обтянуть текстурой довольно подробно написано.
Вадим К

Вадим К (статус: Академик), 15 октября 2009, 13:08 [#3]:

:))) привести такую пачку кода...
Если уж изучать OpenGl, то лучше поискать книжку Краснова http://www.ozon.ru/context/detail/id/96905/ . И дискетку к ней. Там есть всё, что надо для старта.
Галочка "подтверждения прочтения" - вселенское зло.
Irbis

Irbis (статус: Посетитель), 15 октября 2009, 13:20 [#4]:

Всем большое спасибо, кто откликнулся!
Есть пища для размышления, буду работать

15 октября 2009, 22:12: Вопрос перемещён из тематического раздела Delphi » Алгоритмы, преобразования в раздел Delphi » Графика (2D и 3D) в приложениях модератором Ерёмин А.А.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:39
Выполнено за 0.03 сек.