Previous Entry Share Next Entry
Как вырезать треугольник из текстуры в cocos2d-x 3.?
fedoraus
Вопрос: как натянуть текстуру на полигон в cocos2d-x 3.9 и выше? Это можно сделать с помощью класса PolygonInfo. Сделаем это на примере треугольника и квадратной текстуры.


//делаем спрайт с одинковой высотой и шириной
float width=400;
float height = 400;
auto mySprite = Sprite::create();
PolygonInfo inf;
// файл стекстурой
inf.filename = "texture.png";
// количество точек в контуре (в данном случае треугольник)
inf.triangles.vertCount = 3;
//сами вершины в таком формате (непосредственно положение точек на экране, цвет вершины Color4B (для текстуры вроде не важно), и относительная координата точки на текстуре)
inf.triangles.verts = new V3F_C4B_T2F[inf.triangles.vertCount];
// число всегда кратно трём по количеству вершин в треугольнике
inf.triangles.indexCount = 3;
// треугольники строятся на основаниии inf.triangles.verts
inf.triangles.indices = new unsigned short[info.triangles.indexCount];
//Теперь записываем нужные данные
//первая точка треугольника (нижняя левая)
inf.triangles.verts[0].vertices = Vec3(0, 0, 0);
inf.triangles.verts[0].texCoords = Tex2F(0, 0);
inf.triangles.verts[0].colors = = Color4B(255, 255, 255, 255);

//вторая точка треугольника (нижняя правая)
inf.triangles.verts[1].vertices = Vec3(width, 0, 0);
inf.triangles.verts[1].texCoords = Tex2F(1.0, 0);
inf.triangles.verts[1].colors = = Color4B(255, 255, 255, 255);
//третья точка треугольника (вершина сверху)
inf.triangles.verts[2].vertices = Vec3(width/2, height, 0);
inf.triangles.verts[2].texCoords = Tex2F(0.5, 1.0);
inf.triangles.verts[2].colors = = Color4B(255, 255, 255, 255);
// по каким вершинам полигона строить треугольник?
inf.triangles.indices[0] = 0;
inf.triangles.indices[1] = 1;
inf.triangles.indices[2] = 2;
//задаём прямоугольник в котором находится спрайт
inf.rect = Rect(Vec2(0, 0), Size(width, height));
mySprite->initWithPolygon(inf);
addChild(mySprite);

?

Log in