Задать вопрос
Julila
@Julila
вечный студент / german version

Как перевести 3d точку в 2d для отображения на Widget?

Привет всем
Подскажите пожалуйста как быть, у меня есть позиция предмета в 3d пространстве и его я хочу отобразить в QtOpenGlWidget с помощью QPainter или можно оставить это в 3d и рисовать с помощью средств OpenGl
Как происходит эта проекция? Есть ли готовые методы от Qt? Где можно почитать про это_?
circlePosition - это позиция моего обьекта сохраненая как Vector3d

QPoint circlePositionPoint = QPoint(circlePosition.x(), circlePosition.y());
painter.drawEllipse(circlePositionPoint, 30, 30);

void Navigation::paintEvent(QPaintEvent * event)
{

	naviTargetWidget->makeCurrent();
	initGL( naviTargetWidget->width(), naviTargetWidget->height());
	glClearColor((float)(121 / 255.0), (float)(188 / 255.0), (float)(255 / 255.0), (float)1);
	 
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	glEnable(GL_DEPTH_TEST);

	QPainter painter(naviTargetWidget);

	// Crosshair 
	painter.setPen(Qt::black);
	int targRadius = 30, icx, icy;
	icx = naviTargetWidget->width() / 2;
	icy = naviTargetWidget->height() / 2;
	QPointF  widgetCenter(icx, icy);

	//Cicle Gradient
	QRadialGradient radialGrad(QPointF(icx, icy), 300);
	radialGrad.setColorAt(0, Qt::white);
	radialGrad.setColorAt(1, Qt::yellow);

	painter.setBrush(radialGrad);

	painter.drawEllipse(widgetCenter, 300, 300);

	painter.setPen(Qt::black);

	painter.drawLine(icx - targRadius, icy, icx + targRadius, icy);
	painter.drawLine(icx, icy - targRadius, icx, icy + targRadius);

	// Little TargetCircle
	painter.setBrush(Qt::transparent);
	painter.drawEllipse(widgetCenter, 15, 15);
	// Big TargetCircle
	painter.setBrush(Qt::transparent);
	painter.drawEllipse(widgetCenter, 30, 30);


	//Circle from drill
	painter.setBrush(Qt::transparent);

////// ---->>>>  circlePosition это Vector3d 
	QPoint circlePositionPoint = QPoint(circlePosition.x(), circlePosition.y());
	painter.drawEllipse(circlePositionPoint, 30, 30);

	painter.end();

Спасибо за внимание
  • Вопрос задан
  • 284 просмотра
Подписаться 1 Оценить 3 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы