有时候我们需要手动计算三维点对应的二维坐标,下面的矩阵公式就是模拟了一遍三维图形的流程。这里已假设读者具备了图形学的基础知识,比如矩阵乘法代表的三维变换,放射变换;还有齐次坐标等。

这里不考虑模型自身的旋转平移缩放等,即假设模型三维坐标已知。有坐标:

 

模型视图变换矩阵:

void APIENTRY gluLookAt (

GLdouble eyex,

GLdouble eyey,

GLdouble eyez,

GLdouble centerx,

GLdouble centery,

GLdouble centerz,

GLdouble upx,

GLdouble upy,

GLdouble upz);

这个矩阵可以参考OpenGL的官网:http://www.opengl.org/sdk/docs/man2/

最好用IE或者firefox打开,chrome无法打开公式插件。

这里列出几点需要注意的,官网上没有注意。

这是官网上的截图,其中表示2-范数。另外向量su均需要像fUP一样用2-范数作为商归一化。最终计算一个矩阵,这里热身一下,给出所有推导过程:

一点理解:f表示视线向量,UP’’表示摄影机朝向的向量,但是可以知道,如果视线向量定了,其实摄影机的角度也就定了,但是摄影机可以绕着以视线方向作为轴进行旋转,所以UP’’向量就是为了固定摄像机用的。其中叉积有这样的一个性质:

所以如果fUP’’如果是垂直的,那么就不需要进行归一化了,因为fUP’’的长度均为1,他们如果垂直,叉积的长度也为1。但是我们编程中经常使用沿着笛卡尔坐标轴的向量表示摄影机的朝向,所以这里还是需要进行归一化的。s归一化后,sf是垂直的,所以u并不需要再归一化。

在实际情况中,我们总是往简单的方向设定:

并且有

那么

再归一化s’

因此

最终矩阵:

投影矩阵:

void APIENTRY gluPerspective (

GLdouble fovy,

GLdouble aspect,

GLdouble zNear,

GLdouble zFar);

同样,可以参考官网上API:http://www.opengl.org/sdk/docs/man2/

视口变换矩阵:

WINGDIAPI void APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);

可以把上式写成矩阵的形式。

三维坐标经过上诉三个变换,即可变换成为最终二位坐标点。最后仍需注意的是,变换后的坐标原点为窗口左下角,一般图像处理时均是左上角为原点,对Y坐标进行一次变换即可。

Y’=Height-Y

Opengl坐标转换的更多相关文章

  1. OpenGl 坐标转换 (转载)

    OpenGl 坐标转换 (转载) 1. OpenGL 渲染管线 OpenGL渲染管线分为两大部分,模型观测变换(ModelView Transformation)和投影变换(Projection Tr ...

  2. OpenGl 坐标转换

    1. OpenGL 渲染管线 OpenGL渲染管线分为两大部分,模型观測变换(ModelView Transformation)和投影变换(Projection Transformation). 做个 ...

  3. OpenGl从零开始之坐标变换

    http://www.tuicool.com/articles/uiayYrI OpenGL学习脚印: 坐标变换过程(vertex transformation) http://blog.csdn.n ...

  4. Python 爬取CSDN博客频道

    初次接触python,写的很简单,开发工具PyCharm,python 3.4很方便 python 部分模块安装时需要其他的附属模块之类的,可以先 pip install wheel 然后可以直接下载 ...

  5. OpenGL【2 坐标转换】

    // OpenGL.cpp : 自定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include & ...

  6. OpenGL之坐标转换(好文-清晰版)

    http://blog.csdn.net/zhongjling/article/details/8488844OpenGL之坐标转换(好文-清晰版)

  7. opengl 笔记(1)

    参考<opengl入门教程>.<OpenGL之坐标转换>.<OpenGL绘制管线操作细节>等资料. 复习下留个备忘:) /*- * Opengl Demo Test ...

  8. 【转】OPENGL基本API概述

    本文信息资源来源于网络,欢迎转载!转载时请保留本文链接(http://www.shopliyang.com.cn/)! OpenGL中的gl库是核心库,glu是实用库,glut是实用工具库. gl是核 ...

  9. OpenGL投影矩阵

    概述 透视投影 正交投影 概述 计算机显示器是一个2D平面.OpenGL渲染的3D场景必须以2D图像方式投影到计算机屏幕上.GL_PROJECTION矩阵用于该投影变换.首先,它将所有定点数据从观察坐 ...

随机推荐

  1. ECLIPSE实现了界面显示所有类

    按下接口名称CTRL+T实现全面实施的接口类显示 版权声明:本文博客原创文章,博客,未经同意,不得转载.

  2. hdu - 3049 - Data Processing(乘法逆元)

    题意:N(N<=40000)个数n1, n2, ..., nN (ni<=N),求(2 ^ n1 + 2 ^ n2 + ... + 2 ^nN) / N % 1000003. 题目链接:h ...

  3. 新服务器部署sqlserver之前的准备

    当你有一个新的服务器需要部署的时候,如果没有部署过的经验很可能会走很多误区,并且给以后的维护工作加大难度,我在这就把我部署服务器的一些经验跟大家分享一下. 1.登陆服务器以后先将物理盘按照64k为分配 ...

  4. Swift 制作一个新闻通知中心插件1

    使用 Swift 制作一个新闻通知中心插件(1) 随着 iOS 8 的发布,苹果为开发者们开放了很多新的 API,而在这些开放的接口中 通知中心插件 无疑是最显眼的一个.通知中心就不用过多介绍了,相信 ...

  5. C# 笔试题,看你会几道题

    1.       Which interface you need to implement to support for each? IEnumerator IEnumerable ICompare ...

  6. 设置Cookie,登录记住用户登录信息,获取用户登录过得信息

    function setCookie(name,value) { var Days = 30; var exp = new Date(); exp.setTime(exp.getTime() + Da ...

  7. Inno Setup connection to the database and create

    原文 Inno Setup connection to the database and create Description: the first half of this program in I ...

  8. SQL Server 2005中设置Reporting Services发布web报表的匿名访问

    原文:SQL Server 2005中设置Reporting Services发布web报表的匿名访问 一位朋友提出个问题:集成到SQL Server 2005中的Reporting Services ...

  9. C#发送邮件三种方法(Localhost,SMTP,SSL-SMTP)

    原文:C#发送邮件三种方法(Localhost,SMTP,SSL-SMTP) 最近公司由于一个R&I项目的需要,用户要求在购买产品或出货等一些环节,需要发送邮件提醒或者说每周一让系统自动采集数 ...

  10. Java凝视Override、Deprecated、SuppressWarnings详细解释

    一.什么是视线     说起目光,你必须先提什么是元数据(metadata). 所谓元数据是数据的数据.那.元数据是描述数据的叙述. 像在表中的数据字段,叙述了这个字段下的数据的含义.而J2SE5.0 ...