Как изменить стандартное расстояние отсечения 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 с помощью этой настраиваемой камеры.