Официальный сайт студ.городка НГТУ
Программирование и БД » [C++, OpenGL] Проблемы с буфером глубины 

#1  18.03.10 21:37

[C++, OpenGL] Проблемы с буфером глубины

При инициализации GL включаю буфер глубины следующим образом:

Код: cpp:

glClearDepth( 1.0f );              // Разрешить очистку буфера глубины
glEnable( GL_DEPTH_TEST );            // Разрешить тест глубины
glDepthFunc( GL_LEQUAL );            // Тип теста глубины

Так выглядит процедура рисования кадра:

Код: cpp:

/* отрисовка кадра*/
void Display(void)
{
	if (bAutoRotate == true) yrot -= 0.05f; // автовращение
 
	/* Очистим буффер цвета и глубины */
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	/* Загрузим единичную матрицу видового преобразования */
	glLoadIdentity();
 
	/* сместим относительно экрана */
	glTranslatef(xtrans, ytrans, ztrans);
	/* вращение по оси oX на угол xrot */
	glRotatef(xrot, 1.0f, 0, 0);
	/* вращение по оси oY на угол yrot */
	glRotatef(yrot, 0, 1.0f, 0);
	/* вращение по оси oZ на угол zrot */
	glRotatef(zrot, 0, 0, 1.0f);
 
	glBegin(GL_TRIANGLES);
		//	Текущим - делаем красный цвет (по RGB)
		glColor3f(1.0f, 0.0f, 0.0f);
		//	Рисуем первый красный треугольник - задавая координаты трёх
		//	его вершин
		glVertex3f(-75.0f, 40.0f, -50.0f);
		glVertex3f(-75.0f, 40.0f, 50.0f);
		glVertex3f(75.0f, 40.0f, 50.0f);
		//	Текущим - делаем синий цвет (по RGB)
		glColor3f(0.0f, 0.0f, 1.0f);
		//	Рисуем второй синий треугольник - задавая координаты трёх
		//	его вершин
		glVertex3f(-75.0f, 0.0f,-50.0f);
		glVertex3f( 75.0f, 0.0f,-50.0f);
		glVertex3f( 75.0f, 0.0f, 50.0f);
	glEnd();
 
	glBegin(GL_LINES);
		/* ось Х */
		glColor3f(1.0f, 1.0f, 0.0f); /* желтый */
		glVertex3f( 0.0f, 0.0f, 0.0f );
		glVertex3f( 1000.0f, 0.0f, 0.0f);
 
		/* ось Y */
		glColor3f(1.0f, 1.0f, 1.0f); /* белый */
		glVertex3f( 0.0f, 0.0f, 0.0f );
		glVertex3f( 0.0f, 1000.0f, 0.0f);
 
		/* ось Z */
		glColor3f(0.0f, 0.5f, 1.0f); /* голубой */
		glVertex3f( 0.0f, 0.0f, 0.0f );
		glVertex3f( 0.0f, 0.0f, 1000.0f);
	glEnd();
 
	/* Сбросить все данные на обработку в конвейер преобразования OpenGL
	   без ожидания завершения предидущих инструкций */
	glFlush();
 
	/* Меняем местами задний и передний буферы */
	glutSwapBuffers();
}

Собственно рисуются два треугольника красный и синий. Красный находится выше по оси oY.

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

Тут видно что красный треугольник выше

http://hostel.nstu.ru/uploaded/gallery/13464_1268926468.png



Вращаем так чтобы красный был сверху

http://hostel.nstu.ru/uploaded/gallery/13464_1268926502.png

Offline

#2  18.03.10 22:31

$up
Профиль

Re: [C++, OpenGL] Проблемы с буфером глубины

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

Offline

#3  18.03.10 22:52

Re: [C++, OpenGL] Проблемы с буфером глубины

$up, можешь поподробней пожалуйста.
какой он должен быть?

Offline

#4  18.03.10 23:08

$up
Профиль

Re: [C++, OpenGL] Проблемы с буфером глубины

или по часовой или против, но главное, чтобы одинаковый у обоих.

Offline

#5  18.03.10 23:31

Re: [C++, OpenGL] Проблемы с буфером глубины

так и было. проблема не решена :(

Offline

#6  18.03.10 23:31

Re: [C++, OpenGL] Проблемы с буфером глубины

отрисовал куб. там вообще хаос. половина перекрывается, половина нет

Offline

#7  19.03.10 00:04

$up
Профиль

Re: [C++, OpenGL] Проблемы с буфером глубины

R0mm написал(а):

так и было.

да нет, у тебя как раз разный обход
попробуй местами эти строчки поменять
        glVertex3f( 75.0f, 0.0f,-50.0f);
        glVertex3f( 75.0f, 0.0f, 50.0f);

У меня где-то валялись лабы и ргр по курсу КиИГ, которые когда-то для брата писал.

Offline

#8  19.03.10 00:05

Re: [C++, OpenGL] Проблемы с буфером глубины

$up, короч я имел ввиду что не помогает :)

Offline

#9  19.03.10 00:13

$up
Профиль

Re: [C++, OpenGL] Проблемы с буфером глубины

glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
не увидел у тебя, может оно по дефолту

Offline

#10  19.03.10 00:15

Re: [C++, OpenGL] Проблемы с буфером глубины

$up, да, по-умолчанию. вообще мистика какая-то

Offline

#11  19.03.10 00:19

$up
Профиль

Re: [C++, OpenGL] Проблемы с буфером глубины

Это яичко получается 8)

Код::

	glBegin(GL_TRIANGLES);
	BuildObject(20,4);
	glEnd();

void CChildView::BuildObject(double parts, double r)
{
	double x,y,z,prev_a=0,prev_b=0;
	double step = (2*M_PI)/parts;
	for (double a=0;a<= 2*M_PI;a+=step)
	{
		for(double b=0;b <= 2*M_PI;b+=step)
		{
			Polar2NormalObject(a,b,r,&x,&y,&z);
			glVertex3d(x,z,y);
			Polar2NormalObject(prev_a,b,r,&x,&y,&z);
			glVertex3d(x,z,y);
			Polar2NormalObject(a,prev_b,r,&x,&y,&z);
			glVertex3d(x,z,y);
			Polar2NormalObject(prev_a,prev_b,r,&x,&y,&z);
			glVertex3d(x,z,y);
			Polar2NormalObject(prev_a,b,r,&x,&y,&z);
			glVertex3d(x,z,y);
			Polar2NormalObject(a,prev_b,r,&x,&y,&z);
			glVertex3d(x,z,y);
			prev_b=b;
		}
		prev_a = a;
	}
	
}

Offline

#12  24.03.10 16:20

Hix
Профиль

Re: [C++, OpenGL] Проблемы с буфером глубины

glDepthFunc( GL_LEQUAL );            // Тип теста глубины
замени на
glDepthFunc(GL_LESS);

Offline

#13  25.03.10 00:36

Re: [C++, OpenGL] Проблемы с буфером глубины

Hix написал(а):

glDepthFunc(GL_LESS);

не помогло

Offline

#14  25.03.10 00:45

Hix
Профиль

Re: [C++, OpenGL] Проблемы с буфером глубины

[R0mm,
чокасается твоей траблы была такаяже.

для лечения сделал так
при инициализации opengl

glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glEnable(GL_CULL_FACE); //отсечение нивидимых поверхностей

при перерисовки картинки

glClearColor (0.1f, 0.2f, 0.3f, 0.5f); // цвет фона
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

Исправлено Hix (25.03.10 00:47)

Offline

#15  25.03.10 00:50

Re: [C++, OpenGL] Проблемы с буфером глубины

Hix,

Hix написал(а):

glEnable(GL_CULL_FACE); //отсечение нивидимых поверхностей

сейчас у меня этот вариант как запасной.. мне уж очень интересно почему буфер не работает.. :(

Offline

#16  25.03.10 00:51

Hix
Профиль

Re: [C++, OpenGL] Проблемы с буфером глубины

погоди ка
счего ты взял что буфер у тя не работает???

Offline

#17  25.03.10 00:52

Re: [C++, OpenGL] Проблемы с буфером глубины

Hix, ну потому что проекция неправильная :)

Offline

#18  25.03.10 00:56

Hix
Профиль

Re: [C++, OpenGL] Проблемы с буфером глубины

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

Исправлено Hix (25.03.10 01:01)

Offline

#19  25.03.10 00:58

Re: [C++, OpenGL] Проблемы с буфером глубины

Hix, у меня нарисованы оси координат. центр координат в центре куба. оси рисуются поверх, т.е. не перекрываются. тут уже cull_face не поможет. это не страшно, но сам факт..

Offline

#20  25.03.10 01:00

Re: [C++, OpenGL] Проблемы с буфером глубины

Hix,

http://hostel.nstu.ru/uploaded/gallery/13464_1269457200.png

Offline

#21  25.03.10 01:02

Hix
Профиль

Re: [C++, OpenGL] Проблемы с буфером глубины

понятно покажи описание формата пиксела
вот урок

static  PIXELFORMATDESCRIPTOR pfd=            // pfd сообщает Windows каким будет вывод на экран каждого пикселя

  {

    sizeof(PIXELFORMATDESCRIPTOR),            // Размер дескриптора данного формата пикселей

    1,                  // Номер версии

    PFD_DRAW_TO_WINDOW |              // Формат для Окна

    PFD_SUPPORT_OPENGL |              // Формат для OpenGL

    PFD_DOUBLEBUFFER,              // Формат для двойного буфера

    PFD_TYPE_RGBA,                // Требуется RGBA формат

    bits,                  // Выбирается бит глубины цвета

    0, 0, 0, 0, 0, 0,              // Игнорирование цветовых битов

    0,                  // Нет буфера прозрачности

    0,                  // Сдвиговый бит игнорируется

    0,                  // Нет буфера накопления

    0, 0, 0, 0,                // Биты накопления игнорируются

    32,                  // 32 битный Z-буфер (буфер глубины)

    0,                  // Нет буфера трафарета

    0,                  // Нет вспомогательных буферов

    PFD_MAIN_PLANE,                // Главный слой рисования

    0,                  // Зарезервировано

    0, 0, 0                  // Маски слоя игнорируются

  };

Исправлено Hix (25.03.10 01:03)

Offline

#22  25.03.10 01:03

Re: [C++, OpenGL] Проблемы с буфером глубины

Hix, не совсем тебя понял) описание чего?)

Offline

#23  25.03.10 01:05

Re: [C++, OpenGL] Проблемы с буфером глубины

Hix, эм.. я не делаю такого описания :) + прогаю под Lunix'ом

Offline

#24  25.03.10 01:05

Hix
Профиль

Re: [C++, OpenGL] Проблемы с буфером глубины

когда ты котовишь контекст для опенгл, ты должен куазать так называемый pfd (пиксел формат дескриптор). пример его описания я привел выше
полсность код дай

Исправлено Hix (25.03.10 01:05)

Offline

#25  25.03.10 01:07

Re: [C++, OpenGL] Проблемы с буфером глубины

Код: cpp:

#include <GL/glut.h>
#include <GL/glu.h>
#include <GL/gl.h>
#include <stdlib.h>
 
using namespace std;
 
/* начальный размер окна */
int Width = 800, Height = 600;
bool first_click = true;
bool bAutoRotate(false);
 
GLfloat yrot(-30.0f);
GLfloat xrot(30.0f);
GLfloat zrot(0.0f);
GLfloat xtrans(Width/2.0);
GLfloat ytrans(Height/2.0);
GLfloat ztrans(0.0f);
 
/* отрисовка кадра*/
void Display(void)
{
	if (bAutoRotate == true) yrot -= 0.05f; // автовращение
 
	/* Очистим буффер цвета и глубины */
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	/* Загрузим единичную матрицу видового преобразования */
	glLoadIdentity();
	glPushMatrix();
	/* сместим относительно экрана */
	glTranslatef(xtrans, ytrans, ztrans);
	/* вращение по оси oX на угол xrot */
	glRotatef(xrot, 1.0f, 0, 0);
	/* вращение по оси oY на угол yrot */
	glRotatef(yrot, 0, 1.0f, 0);
	/* вращение по оси oZ на угол zrot */
	glRotatef(zrot, 0, 0, 1.0f);
 
	glBegin(GL_QUADS);
		glColor3f(0.0f, 0.0f, 1.0f);              // Синий
		glVertex3f( 100.0f, 100.0f,-100.0f);          // Право верх квадрата (Верх)
		glVertex3f(-100.0f, 100.0f,-100.0f);          // Лево верх
		glVertex3f(-100.0f, 100.0f, 100.0f);          // Лево низ
		glVertex3f( 100.0f, 100.0f, 100.0f);          // Право низ
 
		glColor3f(1.0f, 0.5f, 0.0f);              // Оранжевый
		glVertex3f( 100.0f,-100.0f, 100.0f);          // Верх право квадрата (Низ)
		glVertex3f(-100.0f,-100.0f, 100.0f);          // Верх лево
		glVertex3f(-100.0f,-100.0f,-100.0f);          // Низ лево
		glVertex3f( 100.0f,-100.0f,-100.0f);          // Низ право
 
		glColor3f(1.0f, 0.0f, 0.0f);              // Красный
		glVertex3f( 100.0f, 100.0f, 100.0f);          // Верх право квадрата (Перед)
		glVertex3f(-100.0f, 100.0f, 100.0f);          // Верх лево
		glVertex3f(-100.0f,-100.0f, 100.0f);          // Низ лево
		glVertex3f( 100.0f,-100.0f, 100.0f);          // Низ право
 
		glColor3f(1.0f, 1.0f, 0.0f);              // Желтый
		glVertex3f( 100.0f,-100.0f,-100.0f);          // Верх право квадрата (Зад)
		glVertex3f(-100.0f,-100.0f,-100.0f);          // Верх лево
		glVertex3f(-100.0f, 100.0f,-100.0f);          // Низ лево
		glVertex3f( 100.0f, 100.0f,-100.0f);          // Низ право
 
		glColor3f(0.0f,0.0f,1.0f);              // Синий
		glVertex3f(-100.0f, 100.0f, 100.0f);          // Верх право квадрата (Лево)
		glVertex3f(-100.0f, 100.0f,-100.0f);          // Верх лево
		glVertex3f(-100.0f,-100.0f,-100.0f);          // Низ лево
		glVertex3f(-100.0f,-100.0f, 100.0f);          // Низ право
 
		glColor3f(1.0f,0.0f,1.0f);              // Фиолетовый
		glVertex3f( 100.0f, 100.0f,-100.0f);          // Верх право квадрата (Право)
		glVertex3f( 100.0f, 100.0f, 100.0f);          // Верх лево
		glVertex3f( 100.0f,-100.0f, 100.0f);          // Низ лево
		glVertex3f( 100.0f,-100.0f,-100.0f);          // Низ право
 
	glEnd();
 
	glBegin(GL_LINES);
		/* ось Х */
		glColor3f(1.0f, 1.0f, 0.0f); /* желтый */
		glVertex3f( 0.0f, 0.0f, 0.0f );
		glVertex3f( 1000.0f, 0.0f, 0.0f);
 
		/* ось Y */
		glColor3f(1.0f, 1.0f, 1.0f); /* белый */
		glVertex3f( 0.0f, 0.0f, 0.0f );
		glVertex3f( 0.0f, 1000.0f, 0.0f);
 
		/* ось Z */
		glColor3f(0.0f, 0.5f, 1.0f); /* голубой */
		glVertex3f( 0.0f, 0.0f, 0.0f );
		glVertex3f( 0.0f, 0.0f, 1000.0f);
	glEnd();
	glPopMatrix();
	/* Сбросить все данные на обработку в конвейер преобразования OpenGL
	   без ожидания завершения предидущих инструкций */
	glFlush();
 
	/* Меняем местами задний и передний буферы */
	glutSwapBuffers();
}
 
/* изменение размеров окна */
void Reshape(GLint w, GLint h)
{
	Width = w; Height = h;
 
	/* Дадим знать OpenGL в какую область будет производиться отрисовка
	   в данном случае: всё окно */
	glViewport(0, 0, Width, Height);
 
	/* Установим текущую матрицу - матрицу проективного преобразования */
	glMatrixMode(GL_PROJECTION);
 
	/* Сделаем матрицу проективного преобразования единичной */
	glLoadIdentity();
 
	glOrtho(0, Width, 0, Height, -1000.0f, 1000.0f);
 
	/* Установим текущей - матрицу видового преобразования, чтобы далее
	   В программе мы могли работать только с ней */
	glMatrixMode(GL_MODELVIEW);
}
 
/* обработка сообщений клавиатуры */
void Keyboard( unsigned char key, int x, int y )
{
#define ESC '\033'
 
	switch(key) {
		case ESC:
			exit(0);
 
		case '6': // просмотр вправ
			yrot -= 2.5f; // Вращать сцену влево
		break;
 
		case '4': // просмотр влево
			yrot += 5.5f;    // Вращать сцену вправо
		break;
 
		case '8': // просмотр вверх
			xrot += 2.5f;    // Вращать сцену вниз
		break;
 
		case '5': // просмотр вниз
			xrot -= 2.5f;    // Вращать сцену вверх
		break;
 
		case 'w': // вверх
			ytrans += 5.5f;
		break;
 
		case 's': // вниз
			ytrans -= 5.5f;
		break;
 
		case 'a': // влево
			xtrans -= 5.5f;
		break;
 
		case 'd': // вправо
			xtrans += 5.5f;
		break;
 
		case 'v': // включить/выключить автовращение
			bAutoRotate = !bAutoRotate;
		break;
	}
	glutPostRedisplay();
}
 
/* обработка сообщений мыши */
void Mouse(int button, int state, int x, int y)
{
	/* левый клик */
	if((button==GLUT_RIGHT_BUTTON || button==GLUT_LEFT_BUTTON) && state==GLUT_DOWN)
	{
		first_click = true;
	}
}
 
/* обработка движения мыши */
void MouseMove(int x, int y)
{
	static int px, py = -1;
	static int dx, dy;
 
	if ( first_click == true ) {
		dx = 0;
	    dy = 0;
	    first_click = false;
	}
	else {
		dx = px - x;
		dy = py - y;
	}
 
	px = x;
	py = y;
 
	xrot += dy*0.25f;
	yrot -= dx*0.25f;
}
 
/* инициализация */
int Init()
{
	glEnable(GL_DEPTH_TEST);
	glDepthFunc(GL_LESS);
	//glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
	glEnable(GL_CULL_FACE); //отсечение нивидимых поверхностей
 
	/* установка цвета фона */
	glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
}
 
/* головная функция */
int main(int argc, char* argv[])
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
	glutInitWindowSize(Width, Height);
	glutCreateWindow("Lab2");
	glutIdleFunc(Display);
	glutDisplayFunc(Display);
	glutReshapeFunc(Reshape);
	glutKeyboardFunc(Keyboard);
	glutMouseFunc(Mouse);
	glutMotionFunc(MouseMove);
	Init();
	glutMainLoop();
}

Offline

#26  25.03.10 01:14

Hix
Профиль

Re: [C++, OpenGL] Проблемы с буфером глубины

Код::

#include "SDL.h"
#include "gl.h"
#include "glu.h"

float xrf, yrf, zrf;
int fps=0;

void DrawGLScene();
Uint32 my_callbackfunc(Uint32 interval, void *param);
void* my_callback_param;

int main(){

 if ( SDL_Init(SDL_INIT_TIMER|SDL_INIT_VIDEO) < 0 ){ 
   printf("Unable to init SDL: %s\n", SDL_GetError()); 
   exit(1); 
 } 
 
 atexit(SDL_Quit); 

 SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
 SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
 SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 6);
 SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5); 
 
 if ( SDL_SetVideoMode(640,480,32,SDL_OPENGL) == NULL ){ 
   printf("Unable to set 640x480 video: %s\n", SDL_GetError()); 
   exit(1); 
 }


 glClearColor(0.0f, 0.0f, 0.10f, 0.0f);
 glClearDepth(1.0);
 glDepthFunc(GL_LESS);
 glEnable(GL_DEPTH_TEST);
 glShadeModel(GL_SMOOTH);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 gluPerspective(45.0f,640/480,0.1f,100.0f);
 glMatrixMode(GL_MODELVIEW);   
 
 SDL_TimerID my_timer_id = SDL_AddTimer(1000, my_callbackfunc, my_callback_param);
 
 int done=0; 
 while(done == 0){ 
   
   SDL_Event event; 
   
   while ( SDL_PollEvent(&event) ){ 
     if ( event.type == SDL_QUIT ){ 
      done = 1; 
     } 
     if ( event.type == SDL_KEYDOWN ){
       if ( event.key.keysym.sym == SDLK_ESCAPE ){ 
         done = 1; 
       } 
     } 
   } 
   
   DrawGLScene();
   glFlush();
   SDL_GL_SwapBuffers();
   fps++;
 }

 return 0;

}

void DrawGLScene(){

  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  
  glLoadIdentity();
  glTranslatef(0.0f,0.0f,-7.0f);        // �������� ������ ������
  
  glRotatef(xrf, 1.0f, 0.0f, 0.0f);        // �������� ���� �� X, Y & Z
  glRotatef(yrf, 0.0f, 1.0f, 0.0f);        // �������� ���� �� X, Y & Z
  glRotatef(zrf, 0.0f, 0.0f, 1.0f);        // �������� ���� �� X, Y & Z
  
  glBegin(GL_QUADS);                      // ������ ���

    glColor3f(0.0f,1.0f,0.0f);              // �����
    glVertex3f( 1.0f, 1.0f,-1.0f);          // ����� ���� �������� (����)
    glVertex3f(-1.0f, 1.0f,-1.0f);          // ���� ����
    glVertex3f(-1.0f, 1.0f, 1.0f);          // ���� ���
    glVertex3f( 1.0f, 1.0f, 1.0f);          // ����� ���
    
    glColor3f(1.0f,0.5f,0.0f);              // ���������
    glVertex3f( 1.0f,-1.0f, 1.0f);          // ���� ����� �������� (���)
    glVertex3f(-1.0f,-1.0f, 1.0f);          // ���� ����
    glVertex3f(-1.0f,-1.0f,-1.0f);          // ��� ����
    glVertex3f( 1.0f,-1.0f,-1.0f);          // ��� �����
    
    glColor3f(1.0f,0.0f,0.0f);              // �������
    glVertex3f( 1.0f, 1.0f, 1.0f);          // ���� ����� �������� (�����)
    glVertex3f(-1.0f, 1.0f, 1.0f);          // ���� ����
    glVertex3f(-1.0f,-1.0f, 1.0f);          // ��� ����
    glVertex3f( 1.0f,-1.0f, 1.0f);          // ��� �����

    glColor3f(1.0f,1.0f,0.0f);              // ������
    glVertex3f( 1.0f,-1.0f,-1.0f);          // ���� ����� �������� (���)
    glVertex3f(-1.0f,-1.0f,-1.0f);          // ���� ����
    glVertex3f(-1.0f, 1.0f,-1.0f);          // ��� ����
    glVertex3f( 1.0f, 1.0f,-1.0f);          // ��� �����

    glColor3f(0.0f,0.0f,1.0f);              // �����
    glVertex3f(-1.0f, 1.0f, 1.0f);          // ���� ����� �������� (����)
    glVertex3f(-1.0f, 1.0f,-1.0f);          // ���� ����
    glVertex3f(-1.0f,-1.0f,-1.0f);          // ��� ����
    glVertex3f(-1.0f,-1.0f, 1.0f);          // ��� �����
    
    glColor3f(1.0f,0.0f,1.0f);              // ����������
    glVertex3f( 1.0f, 1.0f,-1.0f);          // ���� ����� �������� (�����)
    glVertex3f( 1.0f, 1.0f, 1.0f);          // ���� ����
    glVertex3f( 1.0f,-1.0f, 1.0f);          // ��� ����
    glVertex3f( 1.0f,-1.0f,-1.0f);          // ��� �����

  glEnd();                                // ��������� ��������    
  
  xrf -= 0.15;
  yrf -= 0.2;
  zrf -= 0.25;
}

Uint32 my_callbackfunc(Uint32 interval, void *param){
 printf("FPS = %d\n", fps);
 fps=0;
 return interval;
}

вот пример программы с использованием библиотеки SDL. буфер глубини работает.
В том что привел ты нужно вернуть
glClearDepth(1.0);

Offline

#27  25.03.10 01:18

Hix
Профиль

Re: [C++, OpenGL] Проблемы с буфером глубины

ща погуглил
http://linux.die.net/man/3/glutinitdisplaymode
тут написано что те нада при инициализации укахывать парамерт  GLUT_DEPTH
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

Исправлено Hix (25.03.10 01:19)

Offline

#28  25.03.10 01:21

Re: [C++, OpenGL] Проблемы с буфером глубины

Hix, оооо дааааааа!))))
спасиб) выручил) я все мозги вы???л уже..

Offline

Программирование и БД » [C++, OpenGL] Проблемы с буфером глубины 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.238 сек.
Выполнено 14 запросов.