Last time I found out about the proportions of a 2D object. Now I am concerned about the same question, but with a 3D object.
Code:
#include <GL/glut.h> GLfloat xRotated, yRotated, zRotated; void init(void) { glClearColor(0.0, 0.0, 0.0, 0.0); glShadeModel(GL_SMOOTH); //Сглаживание glEnable(GL_CULL_FACE); glCullFace(GL_BACK); } void DrawCube(void) { glMatrixMode(GL_MODELVIEW); // очистить буфер рисования. glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(0.0,0.0,-5); glRotatef(yRotated,1.0,1.0,0.0); 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(); glFlush(); } void animation(void) { yRotated += 0.03; DrawCube(); } void reshape(int x, int y) { if (y == 0 || x == 0) return; // Устанавливаем новую проекционную матрицу glMatrixMode(GL_PROJECTION); glLoadIdentity(); // Угол обзора: 40 градусов // Возле плоскости отсечения расстояние: 0,5 // Дальний отсечения плоскости расстояние: 20,0 gluPerspective(40.0,(GLdouble)x/(GLdouble)y,0.5,20.0); //glMatrixMode(GL_MODELVIEW); glViewport(0,0,x,y); // Использование всего окна для rendering } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowPosition(100, 100); glutCreateWindow(argv[0]); init(); glutDisplayFunc(DrawCube); glutReshapeFunc(reshape); glutIdleFunc(animation); glutMainLoop(); return 0; } As I understood the whole thing in perspective.
gluPerspective(40.0,(GLdouble)x/(GLdouble)y,0.5,20.0); So ok:
So not normal:
BONUS QUESTION:
Is there any universal perspective feature that is often used? In the plan, we enter some one parameter (for example, the viewing angle), and based on it, the rest are calculated by themselves (placement distance, clipping plane, etc.).


