Witam.
Jak poprawnie wygenerować mapę kafelkową w Irrlicht, tak żeby obsługiwała eventy takie jak kolizje ?

- Rejestracja:ponad 15 lat
- Ostatnio:około 16 godzin
2
Patrząc na ilość Twoich pytań dotyczących tego konkretnego silnika sądzę, że w pierwszej kolejności powinieneś szukać pomocy na oficjalnym forum irrlich https://irrlicht.sourceforge.io/forum/. Podkategoria irrlicht help wydaje się odpowiednia https://irrlicht.sourceforge.io/forum/viewforum.php?f=20.
1
udało się, kod zamieszczam poniżej
class HexTile : public scene::ISceneNode
{
SMesh* mesh;
SMeshBuffer* meshBuffer;
public:
terrainType ttype;
HexTile(ISceneNode* parent, ISceneManager* smgr, s32 id);
virtual void OnRegisterSceneNode();
virtual void render();
virtual const aabbox3d<f32>& getBoundingBox() const;
virtual u32 getMaterialCount() const;
virtual SMaterial& getMaterial(u32 i);
void setTexture(ITexture*);
void setTerrainType(terrainType);
SMesh* getMesh();
};
HexTile::HexTile(ISceneNode* parent, ISceneManager* smgr, s32 id)
: ISceneNode(parent, smgr, id)
{
ttype = terrainType::grass;
meshBuffer = new SMeshBuffer();
// SET THE INDICES
meshBuffer->Indices.set_used(18);
for (u32 i = 0; i < 18; ++i)
meshBuffer->Indices[i] = hexIndices[i];
// SET THE VERTICES
SColor color = SColor(255, 255, 255, 255);
meshBuffer->Vertices.push_back(S3DVertex(0, 0, 0, 0, 0, 0, color, 0, 0 ));
for (int i = 0; i < 7; i++)
{
//meshBuffer->Vertices.push_back(S3DVertex(hexVertices[2 * i] * 0.9f, 0.0f, hexVertices[2 * i + 1] * 0.9f, 0, 0, 0, color, texture_uv[2 * i], texture_uv[2 * i + 1]));
meshBuffer->Vertices.push_back(S3DVertex(hexVertices[2 * i], 0.0f, hexVertices[2 * i + 1], 0, 0, 0, color, texture_uv[2 * i], texture_uv[2 * i + 1]));
}
// SET THE BOUNDING BOX
meshBuffer->BoundingBox.reset(vector3df(hexVertices[0], 0, hexVertices[1]));
for (s32 i = 1; i < 7; ++i)
meshBuffer->BoundingBox.addInternalPoint(vector3df(hexVertices[2 * i], 0, hexVertices[2 * i + 1]));
// SET THE MATERIAL
meshBuffer->Material.Wireframe = false;
meshBuffer->Material.Lighting = false;
meshBuffer->Material.setTexture(0, getTexture(ttype));
mesh = new SMesh();
mesh->addMeshBuffer(meshBuffer);
mesh->recalculateBoundingBox();
}
void HexTile::OnRegisterSceneNode()
{
if (IsVisible)
SceneManager->registerNodeForRendering(this);
ISceneNode::OnRegisterSceneNode();
}
void HexTile::render()
{
IVideoDriver* driver = smgr->getVideoDriver();
driver->setMaterial(meshBuffer->Material);
driver->setTransform(video::ETS_WORLD, AbsoluteTransformation);
driver->drawMeshBuffer(meshBuffer);
}
const aabbox3d<f32>& HexTile::getBoundingBox() const
{
return meshBuffer->BoundingBox;
}
u32 HexTile::getMaterialCount() const
{
return 1;
}
SMaterial& HexTile::getMaterial(u32 i)
{
return meshBuffer->Material;
}
void HexTile::setTexture(ITexture* tex)
{
meshBuffer->Material.setTexture(0, tex);
}
void HexTile::setTerrainType(terrainType ttype)
{
this->ttype = ttype;
setTexture(getTexture(ttype));
}
SMesh* HexTile::getMesh()
{
return mesh;
}
edytowany 1x, ostatnio: tBane