Esempio n. 1
0
SceneNode* addNode(int shape) {
	// Original solid
	Mesh* m = Manager->getMesh(shape);
	int id;

	if (AvailableIds.empty()) {
		id = ID++;
	} else {
		id = AvailableIds.top();
		AvailableIds.pop();
	}

	CurrentID = id;

	SceneNode* n = new SceneNode(id, shape, m, Shader, TextureId);
	n->createBufferObjects();
	n->_position = glm::vec3(0.125, 0.125, 0.125);

	// X reflection solid
	SceneNode* nX = new SceneNode(n, ReflectionX);
	nX->_toRevert = true;
	nX->createBufferObjects();

	// Z reflection solid
	SceneNode* nZ = new SceneNode(n, ReflectionZ);
	nZ->_toRevert = true;
	nZ->createBufferObjects();

	// Origin reflection solid
	SceneNode* nO = new SceneNode(n, ReflectionO);
	nO->createBufferObjects();

	n->addCopy(nX);
	n->addCopy(nZ);
	n->addCopy(nO);
	DrawingZone->addNode(n);

	switch (SymMode) {
	case SymmetryMode::NONE:
		nX->_canDraw = false;
		nZ->_canDraw = false;
		nO->_canDraw = false;
		break;
	case SymmetryMode::XAXIS:
		nZ->_canDraw = false;
		nO->_canDraw = false;
		break;
	case SymmetryMode::ZAXIS:
		nX->_canDraw = false;
		nO->_canDraw = false;
		break;
	case SymmetryMode::XZAXIS:
		break;
	case SymmetryMode::O:
		nX->_canDraw = false;
		nZ->_canDraw = false;
		break;
	}

	return n;
}