首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

[原创教程]OpenGL渲染管线和坐标变换,震撼发布!该怎么处理

2012-02-10 
[原创教程]OpenGL渲染管线和坐标变换,震撼发布!!!!!看到论坛上很多同学问坐标转换的问题,什么屏幕坐标转世

[原创教程]OpenGL渲染管线和坐标变换,震撼发布!!!!!
看到论坛上很多同学问坐标转换的问题,什么屏幕坐标转世界坐标等等,看来很多同学都没有弄清楚图形管线是怎么回事。
一旦弄清楚了渲染管线,有关于这类的问题都可以迎刃而解。于是我用了两天的时间来完成这个OpenGL的教程, [b]绝对的原创[/b] 。
希望这篇教程能够给大家帮助~

本来想发到blog,由于最近bolg不能上传图片,于是免费给大家提供下载,希望大家多多提建议。

大家顶啊!!!

下面是该教程目录
////////////////////////////////////////////////////////////////

目 录

1.引言
2.OpenGL渲染管线
  2.1 模型观测变换(ModelView Transformation)
  2.2 投影变换(Projection Transformation)
  2.2.1 正交投影(Orthogonal Projection)
  2.2.2 透视投影(Perspective Projection)
  2.3 视口变换(View port Transformation)
3.屏幕坐标转换为世界坐标
4.总结

////////////////////////////////////////////////////////////////


下面是从教程中随机取出的一部分

-----------------------
......

2.2投影变换
   
先还是复习一下OpenGL的渲染管线。图2.1中可以看到,在投影变换(Projection Transformation)中也分为两个部分,第一个部分是将上个阶段得到的坐标转换为平面坐标,第二个部分是将转换后的平面坐标在进行归一化并进行剪裁。一般地,将三维坐标转换为平面坐标有两种投影方式:正交投影(Orthogonal Projection)和透视投影(Perspective Projection)。

2.2.1 正交投影

正交投影很简单,如图2.8,对于三维空间中的坐标点和一个二维平面,要在对应的平面上投影,只需将非该平面上的点的坐标分量改为该平面上的坐标值,其余坐标不变。比如将点(1,1,5)正交投影到z=0的平面上,那么投影后的坐标为(1,1,0)。
在openGL中,设置正交投影可以使用函数

glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)

该函数可以设置正交投影的投影空间,在该空间以外的坐标点就不会被投影到投影平面上。函数中的六个参数分是投影空间六个平面,如图2.9。在图2.9中,大的投影空间是根据这六个参数设置的投影空间,OpenGL会自动将该空间归一化,也就是将该空间或立方体转化为变长为1的正六面体投影空间,并且该证六面体的中心在相机坐标系的原点。一旦设置使用glortho函数设置投影空间,OpenGL会生成投影矩阵。这个矩阵的作用就是将坐标进行正交投影并且将投影后的坐标正规化(转换到-1到1之间)。要注意的是,生成该矩阵的时候,OpenGL会把右手坐标系转换为左手坐标系。原因很简单,右手坐标系的Z轴向平面外的,这样不符合我们的习惯。该矩阵的矩阵推导这里就不详细说明了,不了解的同学可以参考游戏数学方面资料,这里只给出正交投影矩阵。

......

现在到了最后一个阶段了。这个阶段叫做视口变换,它把上个阶段得到的正规化的投影坐标转化为windows 窗口坐标。视口变换会将投影平面上的画面映射到窗口上。在OpenGL中可以使用函数

GLAPI void GLAPIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);

来进行对窗口的映射,如图2.13。举个例子说明,比如上个阶段中得到了一个顶点的坐标为(0,0,0.5,1),根据这个坐标,该顶点位于投影平面的正中间。如果将该点映射到大小为50*50的窗口上时,那么它应该位于屏幕的中间,坐标为(25,25, 0.5,1)。当然这里深度值0.5是不会改变的。有的同学肯定有疑问了,既然投影到了窗口上,那么还要深度值0.5干什么?这里要注意的是,虽然在窗口上显示时只需要x,y坐标就够了,但是要在2D窗口上显示3D图形时深度值是不可少的。这里的深度值不是用于显示,而是用于在光栅化的时候进行深度测试。




教程下载地址:http://download.csdn.net/source/2027238




[解决办法]
震撼沙发支持
[解决办法]
谢谢分享
[解决办法]
谢谢分享
[解决办法]
谢谢,分享的好东西!
[解决办法]
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
[解决办法]
多谢分享
[解决办法]
好帖子,。。。
[解决办法]
支持 哈哈
[解决办法]
ding yi ge
[解决办法]
学DirectX也可以看看吧。。
先看了再说
我也非常需要看
[解决办法]
MARK



[解决办法]
沒圖沒真相
[解决办法]
1 支持一下了
[解决办法]
顶一个,好好的
------解决方案--------------------


正在学,震撼支持下
[解决办法]
学习了...顶起来

[解决办法]
谢谢分享!
[解决办法]
谢谢,分享的好东西!
[解决办法]
不是免费的啊
[解决办法]
谢谢分享!
[解决办法]
赞奉献精神
[解决办法]
好东西啊
[解决办法]
谢谢分享……
[解决办法]
学习
[解决办法]
谢谢分享
[解决办法]
学DX和OPENGL 原理都是相同的。。。
[解决办法]
帮顶
[解决办法]
有没有directX的
[解决办法]
分享精神是社区的灵魂
[解决办法]
顶了 顶了 顶了 顶了 顶了 顶了 顶了!!!!。。。。。
[解决办法]
顶了再说,太简单?那再顶,不简单了吧?!
[解决办法]
幸苦了,下载看下,希望能有所帮助
[解决办法]
感谢LZ分享!
幸苦了,下载看下,希望能有所帮助
[解决办法]
我就知道Opengl坐标变换的思维方式跟D3D比,正好是倒着的,剩下的原理都一样,呵呵
[解决办法]
谢谢分享
[解决办法]
dx和gl基本一样
delphi和vc基本一样
我操他娘的,为什么有这么多吃饱了没事做的人,搞出这么多一样的东西
让我学得痛苦呀,mlgb的
[解决办法]
不错!!
是够震撼的~~~



---------------------------

OpenGPU论坛http://www.opengpu.org

OpenGPU Graphics Open Source community(图形开源社区),聚焦领域(focus domain)包括:
* GPU Architecture(图形处理器体系结构)
* Graphics Algorithm(图形算法)
* GPGPU Programming (面向通用的图形处理器编程)
* Open Source Rendering Engine(开源渲染器)
* Open Source GPU Simulator/RTL Implement(开源GPU模拟器 )
[解决办法]
顶顶顶顶顶顶顶顶顶顶
[解决办法]
牛x!
谢谢
[解决办法]
支持!!!!!

热点排行