Надо получить матрицу содержащую глубину каждой точки. Насколько я понял эта информация хранится в z-буфере. В моем коде я считываю все в массив и вывожу в файл. Но я не уверен в том что все правильно. Правильно ли я написал код? Вот мой код: Код (Text): #include <glaux.h> #include <GL/glut.h> #include <gl.h> #include <glu.h> #include <math.h> #include <windows.h> #include <ctime> #include <stdlib.h> #include <iostream> #include <fstream> #include <iomanip> using namespace std; #pragma comment (lib, "glaux.lib") #pragma comment (lib, "opengl32.lib") #pragma comment (lib, "glu32.lib") #pragma comment (lib, "glut32.lib") #define radius 0.5 double x, y; void DrawBall() { glPushMatrix(); glTranslated(x,y,0); glColor3d(1,0,0); glutSolidSphere(radius, 100, 100); glPopMatrix(); glPushMatrix(); glTranslated(x+1,y+1,0); glColor3d(0,1,0); glutSolidSphere(radius, 100, 100); glPopMatrix(); glPushMatrix(); glTranslated(x+0.5,y+2,0); glColor3d(0,0,1); glutSolidSphere(radius, 100, 100); glPopMatrix(); glPushMatrix(); glTranslated(x+3,y+2,0); glColor3d(0,1,1); glutSolidSphere(radius, 100, 100); glPopMatrix(); } void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); DrawBall(); int width = 400; int height = 400; GLsizei bufferSize = width * height; GLfloat *pixels = new GLfloat[bufferSize]; memset(pixels, 0, sizeof(GLfloat)*bufferSize); glReadPixels(0, 0, width, height, GL_DEPTH_COMPONENT, GL_FLOAT, pixels); ofstream out("depth.txt", ios::out); int endlc = 0; for (int i = 0; i < bufferSize; i++) { if (endlc == 400) { endlc = 0; out << endl; } else endlc++; out << setw(16) << pixels[i] * 10; // far - near = 10 } out.close(); glutSwapBuffers(); glFlush(); } void resize(int width,int height) { glViewport(0,0,width,height); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); glOrtho(-5,5, -5,5, 2,12); gluLookAt( 0,0,5, 0,0,0, 0,1,0 ); glMatrixMode( GL_MODELVIEW ); } int main(int argc, char* argv[]) { glutInitWindowPosition(50, 10); glutInitWindowSize(400, 400); glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); glutCreateWindow("Testbed"); glutDisplayFunc(display); glutReshapeFunc(resize); glEnable(GL_ALPHA_TEST); glEnable(GL_DEPTH_TEST); glEnable(GL_COLOR_MATERIAL); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glutMainLoop(); return 0; }