游戏开发论坛

 找回密码
 立即注册
搜索
查看: 14933|回复: 23

请问OpenGL的投影平面--

[复制链接]

1

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2005-10-25 16:22:00 | 显示全部楼层 |阅读模式
透视投影中总要设置投影中心和投影平面的,而在函数
gluPerspective(float fovy,float aspect,float zNear,float zFar);中
能否得到投影中心(视点)坐标?以及投影平面和投影中心间的距离?
如果能,请问该怎样计算?
我的一点理解:
对最佳视角fovy,有
tan(fovy/2) = h/distance;//h为物体在Y方向上的高度,distance为物体中心离视点的距离
aspect = w/h;               //w为物体在X方向上宽度,h意义同上
即使由此和物体的坐标信息,我可以得到视点位置,并且知道投影平面垂直于视点和物体中心的连线(但是默认投影平面应该是垂直于Z轴的?),但是它离视点的距离始终不知道由哪里可以得到?
请各位指教--

1

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
 楼主| 发表于 2005-10-25 16:59:00 | 显示全部楼层

Re:请问OpenGL的投影平面--

我的估计,投影平面就是zNear平面!

5

主题

63

帖子

63

积分

注册会员

Rank: 2

积分
63
发表于 2005-10-25 18:14:00 | 显示全部楼层

Re:请问OpenGL的投影平面--

应该是焦点处

5

主题

63

帖子

63

积分

注册会员

Rank: 2

积分
63
发表于 2005-10-25 18:16:00 | 显示全部楼层

Re:请问OpenGL的投影平面--

可以看mathematics for 3d game programming & computer graphics

1

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
 楼主| 发表于 2005-10-25 19:11:00 | 显示全部楼层

Re:请问OpenGL的投影平面--

哪个OpenGL函数可以设置焦点?

24

主题

256

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2005-10-26 08:14:00 | 显示全部楼层

Re:请问OpenGL的投影平面--

透视投影中总要设置投影中心和投影平面的?

====================================
这是你一相情愿的想法吧,其实透视投影函数根本就不用设置投影中心和投影面。

24

主题

256

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2005-10-26 08:49:00 | 显示全部楼层

Re:请问OpenGL的投影平面--

对最佳视角fovy,有
tan(fovy/2) = h/distance;//h为物体在Y方向上的高度,distance为物体中心离视点的距离
aspect = w/h;               //w为物体在X方向上宽度,h意义同上
即使由此和物体的坐标信息,我可以得到视点位置,并且知道投影平面垂直于视点和物体中心的连线(但是默认投影平面应该是垂直于Z轴的?)

====================================================
这个写得就更离谱了。

1、gluPerspective(float fovy,float aspect,float zNear,float zFar);的作用是用来定义一个视景体。
2、视景体的大小是任意的,与物体的坐标及大大小没有任何关系。
3、你可以把视景看作是一个具有六个面的台型盒子,小的那个面是zNear,大的那个面是zFar
4、绘制物体时,坐标落在这个盒子里面的部份就可以看得见,落在盒子外面那部份就被剪掉了,看不见。
5、"fovy"指的是一个角,就是盒子两个正对则面的夹角,一般可以定为30~60度之间。
6、“aspect”纵横比,不是物体的宽高比,而是窗口的宽高比,准确地说是视口宽度和高度的比,在初始化的时候我们一般会用到glViewport(x,y,width,height);这个函数,而这里面的aspect = width/height就是我们所要的纵横比。

5

主题

63

帖子

63

积分

注册会员

Rank: 2

积分
63
发表于 2005-10-26 11:03:00 | 显示全部楼层

Re:请问OpenGL的投影平面--

Opengl 中就是把znear作为投影平面
视点到投影平面的距离也就是Znear
我认为近视截面和投影面不是一回事,具体请看
mathematics for 3d game programming & computer graphics p63-p64

5

主题

63

帖子

63

积分

注册会员

Rank: 2

积分
63
发表于 2005-10-26 11:11:00 | 显示全部楼层

Re:请问OpenGL的投影平面--

我觉得从某种程度上来说,投影面可以是任何一个平行于近视截面(或者远视截面)的平面,无非是做了一些缩放而已
我真不知道楼主要用这个来干什么

2

主题

67

帖子

67

积分

注册会员

Rank: 2

积分
67
发表于 2005-10-26 12:11:00 | 显示全部楼层

Re:请问OpenGL的投影平面--

以下是没有调用任何能改变OpenGL系统设置的函数之前的系统状态,很久以前做的了,当时可能用的GLUT框架,和不使用GLUT可能有些区别,如果有什么错误,请高人指出来,以免误导初学者,反正对我是没什么用处了,我可能要改行了,唉。

黑色背景,
单位模型视图矩阵,
单位投影矩阵,
视图体是一个1x1x1的立方体,-1 <= x,y,z <=1
初始矩阵模式为模型视图
视点始终处在全局坐标系统得原点处,
视图和模型的变换函数是一样的,且共享一个模型视图矩阵
所有的变换都是针对物体顶点进行操作的,
包括视点位置和方向的变换都是转换为等效的模型变换来处理的
这一转换是人为的,实际全当是模型变换
平移,旋转,缩放都是针对物体顶点
这些变换作用到物体顶点的顺序与在代码中调用它们的顺序相反
后调用的先作用,先调用的后作用
而所有变换的参考坐标系只有一个全局坐标系
平移,旋转,缩放都是相对这个全局坐标系进行的
动态视点和局部坐标系都是为了统一理解和方便操作而做出的想象概念
对于透视投影变换,其视图体在-z半平面内,物体必须处在-z半平面内才可能显示出来
对于正交投影变换,其视图体为包含全局坐标系的原点的立方体

在透视投影变换下能够显示出来的物体,其顶点经过视图模型变换后的顶点坐标的z值一定是负数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 23:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表