|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
13.08.2015, 07:58 | #1 |
Пользователь
Регистрация: 30.03.2015
Сообщений: 35
|
C++ openGL буфер глубины
Только начал изучать openGL и все никак не пойму как включить буфер глубины, скажите что и куда надо добавить в код чтобы грани квадрата отображались правильно и не заслонялись другими гранями.
Ну тоесть чтобы передние грани не просвечивались, грани создавал по разному, и по часовой и против, никаких изменений это не вызвало. Код openGL C++ Код HTML:
#include <windows.h> #include <GL\glut.h> #include "Kubic.cpp" //Задание параметров главному окну struct WINDOW{ float wid = 200; float hei = 200; }; //Создание главного окна WINDOW W001; //Функция рисования void Draw(void){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBegin(GL_LINES); glColor3f(1.0, 1.0, 1.0); for (float i = -W001.wid / 2; i <= W001.wid / 2; i += 20){ glVertex2f(i, W001.wid / 2); glVertex2f(i, -W001.wid / 2); } for (float i = -W001.hei / 2; i <= W001.hei / 2; i += 20){ glVertex2f(W001.hei / 2, i); glVertex2f(-W001.hei / 2, i); } glEnd(); //точка glPointSize(8); glBegin(GL_POINTS); glColor3f(1.0f, 0.5f, 0.1f); glVertex2f(50.0f,50.0f); glEnd(); //Кубик Kubic I001; I001.Kubic_inicualeze(1, 2, 0, 20); I001.Kubic_inicualeze(2, -3, 0, 20); I001.Kubic_inicualeze(1, 2, 1, 20); I001.Kubic_inicualeze(0, 0, 5, 20); glutSwapBuffers(); } void Timer(int){ //1,0,0,1 glRotatef(1.0f, 0.5f, 0.5f, 0.9f); // glutPostRedisplay(); glutTimerFunc(30, Timer, 0); } void Initialize(){ glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-W001.wid, W001.wid, -W001.hei / 2, W001.hei / 2, -400.0, 400.0); glMatrixMode(GL_MODELVIEW); } void ChangeSize(GLsizei w, GLsizei h){ GLfloat aspectRatio; //Предотвращаем деление на нуль if (h == 0) h = 1; //Установка поля просмотра с размерами окна glViewport(0, 0, w, h); //Обновляет систему координат glMatrixMode(GL_PROJECTION); glLoadIdentity(); aspectRatio = (GLfloat)w / (GLfloat)h; if (w <= h) glOrtho((-W001.wid / 2), (W001.wid / 2), ((-W001.hei / 2) / aspectRatio), ((W001.hei / 2) / aspectRatio), -400.0, 400.0); else glOrtho((-W001.wid / 2)*aspectRatio, (W001.wid / 2)*aspectRatio, (-W001.hei / 2), (W001.hei / 2), -400.0, 400.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } int main(int argc, char** argv){ //инициализация glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB| GLUT_DEPTH); glutInitWindowSize((int)W001.wid*3, (int)W001.hei*2); glutInitWindowPosition(100, 200); glutCreateWindow("Koker-test004"); //Регистрация glutDisplayFunc(Draw); glutTimerFunc(30, Timer, 0); //Функция вызывается при изменении размеров окна glutReshapeFunc(ChangeSize); Initialize(); glutMainLoop(); return 0; }
ученик самоучка
|
13.08.2015, 08:25 | #2 | |
Пользователь
Регистрация: 30.03.2015
Сообщений: 35
|
Цитата:
glEnable(GL_DEPTH_TEST); вставить в функции рисования glutDisplayFunc(Draw); а я ее запихивал в код когда кубик вызывался.
ученик самоучка
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Обход дерева неизвестной глубины | Человек_Борща | Общие вопросы Delphi | 6 | 04.07.2014 16:21 |
Чтение дерева неизвесной глубины из БД | Человек_Борща | БД в Delphi | 4 | 03.06.2014 07:16 |
стек произвольной глубины | tiger() | Общие вопросы C/C++ | 10 | 11.05.2011 13:47 |
OpenGl. Z буфер. (delphi) | _PROGRAMM_ | Помощь студентам | 2 | 06.02.2011 21:25 |
расчет глубины погружения тела | Hitman15 | Помощь студентам | 2 | 01.05.2010 21:00 |