@Override
	public void render(int glMode) {
		float scale = radius / 10;
		float width = 128f;

		float zoomFactor = Model.getModel().getViewport().getZoomFactor();
		// TODO disappear zoom should depend on the eventual orbit radius
		boolean disappearZoom = scale / radius * zoomFactor < 0.0005f;
		if (disappearZoom && !selected) {
			return;
		}

		boolean minZoom = scale / radius * zoomFactor < 0.002f;
		if (minZoom) {
			scale = 0.002f * radius / zoomFactor;
		}

		GL11.glTranslatef(pos.x, pos.y, pos.z);

		GL11.glColor4f(1, 1, 1, 1);
		GL11.glScalef(scale, scale, 1);
		if (isSelectRendering(glMode)) {
			TextureImpl.bindNone();
			RenderUtils.renderDisc(width / 2);
		} else {
			baseTexture.bind();
			GL11.glBegin(GL11.GL_QUADS);
			GL11.glTexCoord2f(0, 0);
			GL11.glVertex2f(-width / 2, -width / 2);
			GL11.glTexCoord2f(1, 0);
			GL11.glVertex2f(width / 2, -width / 2);
			GL11.glTexCoord2f(1, 1);
			GL11.glVertex2f(width / 2, width / 2);
			GL11.glTexCoord2f(0, 1);
			GL11.glVertex2f(-width / 2, width / 2);
			GL11.glEnd();
		}
		GL11.glScalef(1f / scale, 1f / scale, 1);

		if (Model.getModel().getUiContext().isDebugMode() && !isSelectRendering(glMode)) {
			GL11.glColor4f(0, 1, 0, 1);
			speed.render(glMode);
		}

		GL11.glTranslatef(-pos.x, -pos.y, -pos.z);

		// Render behaviors
		if (!isSelectRendering(glMode)) {
			for (Behavior behavior : getBehaviors()) {
				if (behavior instanceof Renderable) {
					((Renderable) behavior).render(glMode);
				}
			}
		}

	}