Я получил довольно большую модель, которая должна отображаться в программе 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, представленных как пример плоскости отсечения, стандартный пример камеры, но я до сих пор не знаю, как изменить средство просмотра по умолчанию.
Я думаю, что я решил это сам. Из документации Вот.
Я просто использовал этот код для инициализации зрителя,
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 с помощью этой настраиваемой камеры.
Других решений пока нет …