游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3697|回复: 9

怎样设置透视投影才有效?

[复制链接]

2

主题

13

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2006-6-14 22:19:00 | 显示全部楼层 |阅读模式
各位大大,我用了glFrustum来设置透视投影,但最后效果还是平行投影的,
用glPerspective来设置,最后连图像都看不到了,请问我应该怎么正确设置呢?
谢谢!哪位大大能给出一个小小的例子!
我还想再问一个问题,在我的编程环境中,opengl的坐标都只有在-1到1中的图形能显示出来,但我看好多书上的例子坐标都可以是好几百,怎么设置呢?或者在现在的opengl中的坐标都是在-1到1之间呢?而且那些书上的例子的Z轴的正方向有的跟我环境上的Z轴正方向不一样(我的正方向是从屏幕外向里),我晕啊!

谢谢各位!

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2006-6-15 12:50:00 | 显示全部楼层

Re:怎样设置透视投影才有效?

-1~1是投影后在投影空间的坐标,你好几百的坐标是在世界空间的,用Perspective的时候注意设置好摄像机位置和视锥体的参数,保证物体能被正常观察到

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2006-6-15 15:49:00 | 显示全部楼层

Re:怎样设置透视投影才有效?

楼主把OGL的坐标系给改了?OGL的坐标系就是Y正向上,Z正从屏幕内向外,X正向右.
看不到东西肯定是你的相机设置不对。

2

主题

13

帖子

13

积分

新手上路

Rank: 1

积分
13
 楼主| 发表于 2006-6-15 23:54:00 | 显示全部楼层

Re: 怎样设置透视投影才有效?

在我的环境中Z轴正向真的是向里的,先启用深度测试,然后画一个红色的三角形,
glBegin(GL_TRIANGLES);
    glColor3f(1.0f, 0.0f, 0.0f);
    glVertex3f(-0.2f, 0.0f, 0.0f);
    glVertex3f(0.2f, 0.0f, 0.0f);
    glVertex3f(0.0f, 0.4f, 0.0f);
glEnd();
再画一个绿色的三角形,
glBegin(GL_TRIANGLES);
    glColor3f(0.0f, 1.0f, 0.0f);
    glVertex3f(-0.4f, 0.0f, 0.2f);
    glVertex3f(0.4f, 0.0f, 0.2f);
    glVertex3f(0.0f, 0.6f, 0.2f);
glEnd();
结果是红色的三角形在绿色的三角形前,如果是Z轴的正向是从屏幕里向外的话,那应该是绿色三角形在前,把红色三角形给挡住,看不到红色三角形呀。
我想问的是,是我的环境有问题,还是以前的opengl的Z轴正向就是从里向外,而现在已经改了呢?还是两种情况都存在?

还有,在很多书中,他们设置顶点的坐标就是直接用如,
glVertex3f(100, 0, 100);坐标值大于1,而我的环境中只能用-1到1,怎么修改才能像他们那样,坐标可以用大于1的值呢?

谢谢各位的访问!

2

主题

13

帖子

13

积分

新手上路

Rank: 1

积分
13
 楼主| 发表于 2006-6-18 19:16:00 | 显示全部楼层

Re:怎样设置透视投影才有效?

ai

0

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2006-6-20 16:36:00 | 显示全部楼层

Re:怎样设置透视投影才有效?

除非你刻意去改openGL得左右手坐标系,否则openGL默认情况下是右手系,z从屏幕向外。

如果你的camera的z大于0.2,并且camera朝-z,则

glBegin(GL_TRIANGLES);
    glColor3f(1.0f, 0.0f, 0.0f);
    glVertex3f(-0.2f, 0.0f, 0.0f);
    glVertex3f(0.2f, 0.0f, 0.0f);
    glVertex3f(0.0f, 0.4f, 0.0f);
glEnd();
再画一个绿色的三角形,
glBegin(GL_TRIANGLES);
    glColor3f(0.0f, 1.0f, 0.0f);
    glVertex3f(-0.4f, 0.0f, 0.2f);
    glVertex3f(0.4f, 0.0f, 0.2f);
    glVertex3f(0.0f, 0.6f, 0.2f);
glEnd();

会看到绿色的三角形,可如果你的camera的z在0和0.2之间,则你会看到

红色的三角形,最后如果你的camera position小于0,什么也看不到。你

检查一下camera得位置把。

0

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2006-6-20 16:46:00 | 显示全部楼层

Re:怎样设置透视投影才有效?

另外还有一种可能:虽然你的camera得z大于0.2,但是前裁减平面正好位于0和0.2之间,则绿

色的triangle也会被clip掉。

“还有,在很多书中,他们设置顶点的坐标就是直接用如,
glVertex3f(100, 0, 100);坐标值大于1,而我的环境中只能用-1到1,怎么修改才能像他们那样,坐标可以用大于1的值呢?”


你的投影平面的纵横跨度大约为2f,则你的图形基本上画在正负0,1之间,这样在viewport中看

到的比例才适中。如果纵横跨度大约为2f,而你的图形画的很大,那么viewport中显示出来久

太大了。你的图形要和你的投影平面的尺寸成比例才行。

2

主题

13

帖子

13

积分

新手上路

Rank: 1

积分
13
 楼主| 发表于 2006-6-20 23:40:00 | 显示全部楼层

Re:怎样设置透视投影才有效?

谢谢你的回答.
但是我在默认的情况下,即什么都不修改画上面的图形(这是用的是平行投影吗?),得出上面的结果,当我用glTranslatef(0.0f, 0.0f, 0.5f);时,图形是向屏幕里移动,因为我画了一个Z轴,从零点到1,看到的Z轴是向里的,而且图形也是向里移动了很多.
但现在当我用gluPerspective()后(现在我已经把在透视投影后能把图形显示出来了,即向Z轴负向移动5个单位),图形就反向了,现在在屏幕外了,我现在不肯定,到底Opengl是用哪一个坐标系,是平行投影时一个,透视投影时是另一个?

0

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2006-6-21 10:42:00 | 显示全部楼层

Re:怎样设置透视投影才有效?

能不能将modelview  matrix的设置代码,以及画triangles的代码贴出来?

2

主题

13

帖子

13

积分

新手上路

Rank: 1

积分
13
 楼主| 发表于 2006-6-21 20:55:00 | 显示全部楼层

Re:怎样设置透视投影才有效?

你好,modeview matrix的代码我没设置,即把PIXELFORMATDESCRIPTOR设置好后,就直接用上面的那一段代码画三角形,得出上面的结果.这时使用的应用是平行投影吧?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 19:19

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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