|
Вопрос # 3 288/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Хочется сделать что то типа 3D пазла. Это когда пазл собирается не на плоских фишках, а на кубиках. На каждой грани есть свой кусок картинки и передвигаются они(кубики) по полю как в пятнашках(есть одно свободное поле и туда перекатывается кубик, показывая соответственно свою другую грань).
Так вот, в чем вопрос:
Пока хочу узнать, как порезать картинку что бы они(порезанные кусочки) были отдельными объектами и их можно было переворачивать и двигать и где то сохранять?
Какие есть варианты?
Написал сюда, потому что хочу реализовать на Delphi
 |
Вопрос задал: 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 (статус: 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 (статус: Посетитель), 15 октября 2009, 13:20 [#4]:
Всем большое спасибо, кто откликнулся!
Есть пища для размышления, буду работать
|
15 октября 2009, 22:12: Вопрос перемещён из тематического раздела Delphi » Алгоритмы, преобразования в раздел Delphi » Графика (2D и 3D) в приложениях модератором Ерёмин А.А.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|