Как изменить стандартное расстояние отсечения QGLViewer по умолчанию в программах QT и QGLViewer?

Я получил довольно большую модель, которая должна отображаться в программе QT UI, которая использует QGLViewer. Таким образом, модель была обрезана из-за слишком малого расстояния отсечения ближнего и дальнего расстояния. Мой вопрос заключается в том, как изменить заданный по умолчанию ближний и дальний диапазон отсечения.

Например, моя проблема может выглядеть так

Я пытался использовать что-то вроде,

::glMatrixMode(GL_PROJECTION) ;
::glLoadIdentity() ;

::glClearColor(1.0f,1.0f,1.0f,0.0f);
::glFrustum(-0.5,0.5,-0.5,0.5,-100000000.0,100000000.0) ;

::glMatrixMode(GL_MODELVIEW) ;
::glLoadIdentity() ;

Это совсем не работает, а также нарушает взаимодействие с мышью в QGLViewer. Поскольку я использую QT и QGLViewer, я не могу использовать функции glu.

Поэтому я прошу всех, кто знает, как заставить QGLViewer изменить диапазон отсечения по умолчанию.

Я нашел несколько примеров, предоставленных QGLViewer, таких как пример плоскости отсечения, пример стандартной камеры, но я до сих пор не понимаю, как изменить средство просмотра по умолчанию.

1 ответ

Решение

Я думаю, что я решил это сам. Из документации здесь. Я просто использовал этот код для инициализации зрителя,

void Viewer::initializeGL()
{
  QGLViewer::initializeGL();
  this->setSceneRadius(10000.0);
}

Но это также устанавливает камеру сцены по умолчанию, если радиус большой, положение перспективы по умолчанию также изменяется, поэтому этот setSceneRadius не только изменяет ближнюю / дальнюю плоскость отсечения.

На самом деле, есть разные методы из документации здесь.

Так что этот может быть лучше. Формула для расчета реальных ближних и дальних находится в документации последней ссылки. Меньший у кафа и более крупный клиппинг означает больший радиус обзора.

void Viewer::initializeGL()
{
  QGLViewer::initializeGL();
  this->camera()->setZNearCoefficient(0.00001);
  this->camera()->setZClippingCoefficient(1000.0);
}

Конечно, вы можете изменить свою собственную версию ближнего и дальнего определения.

class myCamera :: public qglviewer::Camera
{
    virtual float Camera::zNear() const { return 0.001; };
    virtual float Camera::zFar() const { return 100.0; };
}

И создайте свой объект QGLViewer с помощью этой настраиваемой камеры.

Другие вопросы по тегам