Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [OpenGL] Объект исчезает с экрана gltranslatef z, меняем z в gltranslatef, исчезает объект 
:(
    Опции темы
linuxoid
  Дата 29.3.2013, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 17.4.2005

Репутация: нет
Всего: нет



Здравствуйте, коллеги. Хотел попробовать простой пример с отображением трехмерных объектов, но не могу разобраться, почему объект исчезает, если я к примеру задаю 

Код

Gl.glTranslatef(0f, 0.0f, -5.0f);


Если используем 

Код

Gl.glTranslatef(0f, 0.0f, 0f);


то всё в порядке, объект видно. 

Как я понимаю, мы отдаляем объект по z координате и он должен стать меньше, но вместо этого на экране появляется пустота. Подскажите, пожалуйста, что у меня не так в коде или чего я не понимаю. Спасибо.

Код

        private void Form1_Load(object sender, EventArgs e)
        {
            Glut.glutInit();
            Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE);
            Gl.glEnable(Gl.GL_DEPTH_TEST);
            Gl.glClearColor(255, 255, 255, 1);
            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
            Gl.glMatrixMode(Gl.GL_MODELVIEW);
            Gl.glLoadIdentity();

            display();

            Gl.glFlush();
            winOG.Invalidate();
        }

        void display()
        {
            Gl.glTranslatef(0f, 0.0f, -5.0f);  // Проблема

            Gl.glBegin(Gl.GL_TRIANGLES);           // Begin drawing the pyramid with 4 triangles
            // Front
            Gl.glColor3f(1.0f, 0.0f, 0.0f);     // Red
            Gl.glVertex3f(0.0f, 1.0f, 0.0f);
            Gl.glColor3f(0.0f, 1.0f, 0.0f);     // Green
            Gl.glVertex3f(-1.0f, -1.0f, 1.0f);
            Gl.glColor3f(0.0f, 0.0f, 1.0f);     // Blue
            Gl.glVertex3f(1.0f, -1.0f, 1.0f);

            // Right
            Gl.glColor3f(1.0f, 0.0f, 0.0f);     // Red
            Gl.glVertex3f(0.0f, 1.0f, 0.0f);
            Gl.glColor3f(0.0f, 0.0f, 1.0f);     // Blue
            Gl.glVertex3f(1.0f, -1.0f, 1.0f);
            Gl.glColor3f(0.0f, 1.0f, 0.0f);     // Green
            Gl.glVertex3f(1.0f, -1.0f, -1.0f);

            // Back
            Gl.glColor3f(1.0f, 0.0f, 0.0f);     // Red
            Gl.glVertex3f(0.0f, 1.0f, 0.0f);
            Gl.glColor3f(0.0f, 1.0f, 0.0f);     // Green
            Gl.glVertex3f(1.0f, -1.0f, -1.0f);
            Gl.glColor3f(0.0f, 0.0f, 1.0f);     // Blue
            Gl.glVertex3f(-1.0f, -1.0f, -1.0f);

            // Left
            Gl.glColor3f(1.0f, 0.0f, 0.0f);       // Red
            Gl.glVertex3f(0.0f, 1.0f, 0.0f);
            Gl.glColor3f(0.0f, 0.0f, 1.0f);       // Blue
            Gl.glVertex3f(-1.0f, -1.0f, -1.0f);
            Gl.glColor3f(0.0f, 1.0f, 0.0f);       // Green
            Gl.glVertex3f(-1.0f, -1.0f, 1.0f);
            Gl.glEnd();   // Done drawing the pyramid
        }




PM MAIL   Вверх
baldina
Дата 29.3.2013, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



Цитата(linuxoid @  29.3.2013,  19:57 Найти цитируемый пост)
Если используем 
Gl.glTranslatef(0f, 0.0f, 0f);

то, считай, ничего и не делаем
Цитата(linuxoid @  29.3.2013,  19:57 Найти цитируемый пост)
мы отдаляем объект по z координате и он должен стать меньше

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

тут проблема в другом: opengl обрабатывает куб вида единичного размера, все что за пределами просто отсекается.
так что двигая объект на 5, вы просто выводите его за пределы отсечения.

нужно правильно настроить матрицу проецирования, например при помощи glOrtho
http://www.songho.ca/opengl/gl_projectionmatrix.html

Это сообщение отредактировал(а) baldina - 29.3.2013, 21:26
PM MAIL   Вверх
linuxoid
Дата 31.3.2013, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 17.4.2005

Репутация: нет
Всего: нет



baldina, Благодарствую! Помогло smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.1107 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.