Сфера не видна с glutSolidSphere()

Ниже приведен мой код для отображения сплошной сферы. Я использовал ModelMatrix для отображения. Но я не могу видеть твердое тело. Если что-то вроде проекции будет добавлено. Но сейчас мне не нужны прогнозы.

    #include <stdlib.h>
    #include <GL/gl.h>
    #include <GL/glu.h>
    #include <GL/glut.h>
    #include<windows.h>
    static void Init() {
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    }


    static void display() {
      glMatrixMode(GL_MODELVIEW);
      glLoadIdentity();
        glColor3d(1,1,0);
      glutSolidSphere(3,4,4);
    }

    int main(int argc, char** argv) {

      glutInit(&argc,argv);
      glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH );
      glutInitWindowSize( 550, 550);
      glutInitWindowPosition( 50, 50);
      glutCreateWindow( "Balloon");

      glutDisplayFunc(display);
      Init();
      glutMainLoop();
      return 0;
    }

person Sam    schedule 02.10.2014    source источник
comment
Я вижу несколько вещей, которые могут вызвать вашу проблему. Сначала в конце вашей функции отображения вам нужно вызвать glutSwapBuffers(). Это заменит передний буфер задним буфером (тот, который вы рисуете), чтобы он отображался. Во-вторых, вам нужно вызвать glClear в начале вашей функции отображения, чтобы очистить содержимое предыдущего кадра. Кроме того, если и ваша модель, и проекционная матрица являются идентификационной матрицей, тогда отображаемые координаты будут от -1 до 1, поэтому очень вероятно, что ваша сфера слишком велика с вашими текущими матрицами.   -  person user3256930    schedule 02.10.2014


Ответы (1)


Установка матрицы представления модели на идентичность, по сути, помещает камеру прямо в начало координат. Ваша сфера аналогичным образом визуализируется в начале координат, поэтому ваша точка обзора находится в центре сферы. В зависимости от того, как рендерится перенасыщение, это может сделать вашу сферу невидимой, потому что вы смотрите на обратную сторону геометрии.

Кроме того, не устанавливая матрицу проекции, вы неявно используете проекцию по умолчанию, которая является ортогональной проекцией, ограниченной диапазоном [-1, 1] во всех трех измерениях. Поскольку радиус вашей сферы равен 3, вся ваша геометрия находится за пределами усеченной проекции, поэтому она отбрасывается.

Попробуйте использовать gluLookAt для определения положения камеры и направления ее взгляда. Я бы посоветовал вам использовать gluLookAt, чтобы расположить камеру в точке 0,0,1, глядя на начало координат, а затем нарисовать свою сферу с радиусом 0,5. Это должно сделать его видимым, поскольку вы больше не выталкиваете поверхность сферы за пределы усеченной проекции и больше не находитесь внутри сферы.

person Jherico    schedule 02.10.2014
comment
Поможет ли в этом случае установка gluLookAt()? - person Sam; 02.10.2014