美文网首页openGL
openGL——03、三维透视投影

openGL——03、三维透视投影

作者: 长青之木 | 来源:发表于2018-04-07 13:13 被阅读12次

需求

使用三维透视投影实现下面的透视效果:

透视投影.png

原理

在三维空间的xy平面上画螺旋线,再用透视投影的方法投影到与xy平面不平行的平面上。

代码

/**
* @date: 2017.06.05
*/

#include <GL/glut.h>

GLfloat winWidth = 600, winHeight = 600;

GLfloat x0 = 100, y0 = 50, z0 = 50;
GLfloat xref = 50, yref = 50, zref = 0.0;
GLfloat Vx = 0.0, Vy = 1.0, Vz = 0.0;

GLfloat xwMin = -40, ywMin =-60, xwMax = 40, ywMax = 60;

GLfloat dnear = 25.0, dfar = 125.0;

void init(void) {
    glClearColor(1.0, 1.0, 1.0, 0.0);
    glMatrixMode(GL_MODELVIEW);
    gluLookAt(x0, y0, z0, xref, yref, zref, Vx, Vy, Vz);

    glMatrixMode(GL_PROJECTION);
    glFrustum(xwMin, xwMax, ywMin, ywMax, dnear, dfar);
}

void displayFcn(void) {
    glClear(GL_COLOR_BUFFER_BIT);

    glColor3f(0.0, 1.0, 0.0);
    glPolygonMode(GL_FRONT, GL_FILL);
    glPolygonMode(GL_BACK, GL_LINE);
    glBegin(GL_QUADS);
    glVertex3f(0.0, 0.0, 0.0);
    glVertex3f(100.0, 0.0, 0.0);
    glVertex3f(100.0, 100.0, 0.0);
    glVertex3f(0.0, 100.0, 0.0);
    glEnd();
    
    glFlush();
}

void reshapeFcn(GLint newWidth, GLint newHeight) {
    glViewport(0, 0, newWidth, newHeight);
    winWidth = newHeight;
    winHeight = newHeight;
}

int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowPosition(50, 50);
    glutInitWindowSize(winWidth, winHeight);
    glutCreateWindow("perspectiver View of A Square");

    init();
    glutDisplayFunc(displayFcn);
    glutReshapeFunc(reshapeFcn);

    glutMainLoop();

}

githup链接:
https://github.com/lifeSo/OpenGLDemo/blob/master/01.get start/05.perspectiver view of square.c
https://github.com/lifeSo/OpenGLDemo/blob/master/01.get start/06.perspectiver view of spiral line.c

相关文章

  • openGL——03、三维透视投影

    需求 使用三维透视投影实现下面的透视效果: 原理 在三维空间的xy平面上画螺旋线,再用透视投影的方法投影到与xy平...

  • [OpenGLES] 透视投影的“小孔成像”原理

    在OpenGL里经常会使用到两种投影方式: 正交投影 透视投影 物体在透视投影中会呈现出“近大远下”的透视现象大家...

  • OpenGL 投影矩阵

    OpenGL Projection MatrixOpenGL投影矩阵 概述 透视投影 正交投影 概述 计算机显示器...

  • OpenGL正背面剔除、深度测试

    OpenGL在进行透视投影要经过 model matrix->view matrix -> projection ...

  • 三、OpenGL 的渲染架构

    OpenGL 的渲染架构1.1. 数据传递方式1.2. 参数类型 投影方式2.1. 正投影2.2. 透视投影 存储...

  • OpenGL:正投影和透视投影

    OpenGL:正投影和透视投影 正投影 正射投影,又叫平行投影。这种投影的视景体是一个矩形的平行管道,也就是一个长...

  • OpenGL的透视投影

    坐标系统 在所有顶点着色器运行后,所有我们可见的顶点都变为标准化设备坐标(Normalized Device Co...

  • 相机矩阵(Camera Matrix)

    投影 透视投影(perspective projection) 透视投影属于中心投影。透视投影图简称为透视图或透视...

  • OpenGL的正背面剔除

    在Open GL工程的搭建中我们介绍了OpenGL在MacOS上的项目搭建,在OpenGL的透视投影中我们介绍了简...

  • 正交投影介绍及Matrix.orthoM()的使用

    正交投影对于透视投影比较容易理解。正交投影把三维世界的部分投影到屏幕上。它是以这样的一种方式实现这些的,不管物体是...

网友评论

    本文标题:openGL——03、三维透视投影

    本文链接:https://www.haomeiwen.com/subject/ngcyhftx.html