forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=13)
-   -   Затекстурированный многоугольник (http://forum.boolean.name/showthread.php?t=17149)

Eugenes 07.08.2012 00:29

Затекстурированный многоугольник
 
С-но столкнулся с задачей текстурирования многоугольника. Многоугольник замкнутый, любой формы. Есть рисунок, который требуется наложить на многоугольник. Задается точка на рисунке, откуда начинается текстурирование. Далее фактически с этой точки из рисунка вырезается область и накладывается на многоугольник. Пока не вижу, как это реализовать. Есть мысли копировать каждый пиксель из рисунка и отрисовывать его в многоугольнике. Но тогда нужно получить список всех пикселей, находящихся внутри фигуры... может кто уже сталкивался с подобной задачей?

ABTOMAT 07.08.2012 00:42

Ответ: Затекстурированный многоугольник
 
Нарисуй схему, так не очень понятно, что ты хочешь.

Eugenes 07.08.2012 01:03

Ответ: Затекстурированный многоугольник
 
Цитата:

Сообщение от ABTOMAT (Сообщение 235406)
Нарисуй схему, так не очень понятно, что ты хочешь.

https://docs.google.com/file/d/0B7bP...nMtVmFURjZheUE

HolyDel 07.08.2012 01:12

Ответ: Затекстурированный многоугольник
 
делаешь сетку многоугольника.
задаешь текстурные координаты вершинам.
рисуешь ее с нужной текстурой.

Eugenes 07.08.2012 01:22

Ответ: Затекстурированный многоугольник
 
Цитата:

Сообщение от HolyDel (Сообщение 235411)
делаешь сетку многоугольника.
задаешь текстурные координаты вершинам.
рисуешь ее с нужной текстурой.

а можно поподробнее про текстурные координаты? И у меня программа 2D, т.е. использовать TextureCoords не получится

HolyDel 07.08.2012 01:32

Ответ: Затекстурированный многоугольник
 
ты можешь создать ортографическую камеру и рисовать в 3д как в 2д.

ABTOMAT 07.08.2012 02:19

Ответ: Затекстурированный многоугольник
 
Вообще в FastImage есть то, что тебе нужно, называется DrawPoly функция, ей можно сделать сразу же как тебе надо.
Правда, либа платная, так что безоговорочно её юзать не получится.

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

Понадобятся функции:
CreateMesh - создаёшь entity
AddSurface - создаёшь сурфейс
AddVertex - создаёшь вершины многоугольника, где тебе надо, задавая им не только пространственные, но и текстурные координаты
AddTriangle - на вершины сажаешь треугольники. Чтобы они были видны, вершины нужно задавать по часовой стрелке, если глядеть из камеры.
LoadTexture - грузишь текстуру
EntityTexture - сажаешь текстуру на твой многоугольник
CreateCamera - создаёшь камеру
CameraProjMode - делаешь её ортографической
CameraClsMode - делаешь чтобы она при рендере рендерила прямо поверх нарисованного (по умолчагнию она перед рендером затирает буфер)
PositionEntity - размещаешь камеру и многоугольник как тебе надо
RotateEntity - вращаешь, если надо

Текстурные координаты по такому принципу выставляются:
Верхний левый край текстуры - это UV 0,0, нижний правый - 1,1, в принципе, всё логично.

Правда, не знаю, захочешь ли ты извращаться камерой, имея только 1 вещь, которую надо ей рисовать, да ещё и совмещать с 2D.

FastImage позволит сделать всё 1 функцией, указывая 2D-координаты экрана, но либа платная.

Ну ещё можно упороться и отрисовать всё в 2D самому, по пикселям. Но во-первых, сложно и долго, во-вторых, работа с пикселами - дело тормозное, имей в виду. Но в принципе если у тебя многоугольник не будет меняться в процессе игры, то можно его отрисовать в Image заранее и тогда это будет не так медленно.

Как делать - решать тебе.


Часовой пояс GMT +4, время: 08:31.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot