Я создал приложение OpenGL, где я определяю объем просмотра с помощью glOrtho(). Затем я использую gluLookAt() для преобразования всех точек. Проблема в том, что, как только я это сделаю, все точки выпадают из плоскости отсечения, потому что она «оставлена позади». И я получаю черный экран.Как преобразовать плоскость отсечения glOrtho?
Как изменить объем просмотра, чтобы он был еще плотным для моих объектов, когда они были преобразованы gluLookAt()?
Вот код, чтобы лучше проиллюстрировать мою проблему:
Vector3d eyePos = new Vector3d(0.25, 0.25, 0.6);
Vector3d point = new Vector3d(0, 0, 0.001);
Vector3d up = new Vector3d(0, 1,0);
Matrix4d mat = Matrix4d.LookAt(eyePos, point, up);
GL.Viewport(0, 0, glControl1.Width, glControl1.Height);
GL.MatrixMode(MatrixMode.Projection);
GL.LoadIdentity();
GL.Ortho(0, 1, 0, 1, 0, 1);
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadIdentity();
GL.LoadMatrix(ref mat);
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
GL.Enable(EnableCap.DepthTest);
GL.DepthMask(true);
GL.ClearDepth(1.0);
GL.Color3(Color.Yellow);
GL.Begin(PrimitiveType.Triangles);
GL.Vertex3(0.2, 0.3, 0.01);
GL.Vertex3(0, 0.600, 0.01);
GL.Vertex3(0.600, 0.600, 0.01);
GL.Color3(Color.Blue);
GL.Vertex3(0, 0.6, 0.01);
GL.Vertex3(0.2, 0.3, 0.01);
GL.Vertex3(0.7, 0.5, 0.03);
GL.Color3(Color.Red);
GL.Vertex3(0.100, 0.000, 0.01);
GL.Vertex3(0, 0.0, 0.01);
GL.Vertex3(0.600, 0.600, 0.03);
GL.End();
glControl1.SwapBuffers();
Я полагаю более емким пересмотр мой вопрос, как я могу преобразовать две точки матрицы LookAt («мат» в моем коде)?
Похоже, вам нужно изменить положение камеры (glLookAt). Возможно, мы можем прикреплять изображения, чтобы лучше понять, что вы хотите. – Unick
@Unick - я добавил код, который я использую, координаты, которые я использую, работают нормально, если я не загружаю матрицу lookat. Как только матрица lookat загружается, плоскости отбраковки не изменяются вместе с остальными координатами, и все они выпадают из отбраковки. –
Вы отправляете строку кода, где вы устанавливаете ModelViewMatrix с помощью функции gluLookAt()? То, что вы делаете с орфографической проекцией, состоит в том, чтобы нарисовать все кубы в верхнем правом углу положения камеры с размером 1 вдоль направления просмотра. – DanceIgel