Irrlicht Poprawne generowanie mapy kafelkowej

0

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

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.

0

dzięki za radę

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;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1