游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5842|回复: 8

VC下OpenGL视图窗口如何全屏化及相关坐标信息

[复制链接]

16

主题

66

帖子

66

积分

注册会员

Rank: 2

积分
66
发表于 2006-7-1 15:33:00 | 显示全部楼层 |阅读模式
我台电脑不算高档,在窗口模式下做OpenGL动画时很卡的,我想请教全屏化窗口应该如何设置?(提示:我用的是Win32API编写windows窗口的,不是MFC)
还有一点,我搞不清OpenGL作图区域里X,Y,Z坐标轴是怎样摆放的,虽然我可以通过把物体沿一个坐标轴移动的方法来观察各坐标轴的方向,但我现在都是按照教程书籍上的高手的代码做的,怀疑那些高手们是不是把坐标轴转变了....请各位大哥大姐告诉我OpenGL坐标轴的相关概念.

16

主题

66

帖子

66

积分

注册会员

Rank: 2

积分
66
 楼主| 发表于 2006-7-1 15:59:00 | 显示全部楼层

补充...

我还遗漏了一个问题,希望高手们热情帮助解答...
我在一书籍中看到OpenGL基本几何体的组合方法,当中就用到了压栈和释放堆栈的操作,代码如下:
   glPushMartrix();
       .......
       .......
    glPopMatrix();
省略部分是绘制用于组合的小几何体.
问题是,作者在书籍的例程中频繁地使用了堆栈的压入和施放操作,而书籍中也没有对此操作的意义作详细解释.
请问此操作作用再哪里?它们在系统内部是如何工作的?

5

主题

16

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2006-7-1 20:10:00 | 显示全部楼层

Re:VC下OpenGL视图窗口如何全屏化及相关坐标信息

屏幕左下角为原点,向右是x轴,向上是y轴,向屏幕内部是z
glpushmatrix和glpopmatrix是将当前矩阵压入和弹出堆栈,这个矩阵是什么取决于glMatrixMode,但是默认是modelview矩阵
如果你弄懂了什么是modelview和project矩阵的话,这其实是非常容易明白的

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2006-7-2 21:37:00 | 显示全部楼层

Re:VC下OpenGL视图窗口如何全屏化及相关坐标信息

  glPushMartrix();
       .......
       .......
    glPopMatrix();
用来入栈matrix和出栈矩阵
目的是为了让这次的变换矩阵不影响后面绘制的物体的变换.

16

主题

66

帖子

66

积分

注册会员

Rank: 2

积分
66
 楼主| 发表于 2006-7-3 08:27:00 | 显示全部楼层

Re:VC下OpenGL视图窗口如何全屏化及相关坐标信息

我也发现了,这个栈命令就像是一段独立的操作,每一段从压栈到放栈之间的都是一个独立的绘制任务吧.....
哈,我的理解对吗?
不过话说回来,我就觉得OpenGL这点做得不够好了;起码在面向对象化这方面来说都没有做到位 —— 绘制一个物体没有单独从一个函数或填充一个结构就解决了物体的位置、纹理、样式等参数,而是对每个绘制的物体及对被绘制的物体所做的操作都要用单独的一句命令解决,搞不好真不知道哪句操作哪个物体哪一句又操作哪一个物体了!例如在前面写一句旋转命令,后面的所有物体都做了旋转操作,如果绘制物体的代码量大了,对前面那句旋转命令修改掉,后面的所有操作也就乱了。

16

主题

66

帖子

66

积分

注册会员

Rank: 2

积分
66
 楼主| 发表于 2006-7-3 08:33:00 | 显示全部楼层

坐标问题

3楼的大侠,你说的"屏幕左下角为原点,向右是x轴,向上是y轴,向屏幕内部是z"是真的吗?
可我在(0.0,0.0,0.0)处绘制的一大点像素点可显示在了屏幕的中心呢。而绘制了一根从伸向Z轴负半轴的线时,线是伸向屏幕的后面呢。
..............脑袋好乱了.................

5

主题

37

帖子

37

积分

注册会员

Rank: 2

积分
37
发表于 2006-7-3 11:28:00 | 显示全部楼层

Re:VC下OpenGL视图窗口如何全屏化及相关坐标信息

1、OGL的坐标系是右手系,x向右,y向上,z向外(都是正向)。
2、至于原点,与设置投影方式有关。如果用gluOrtho2D(0,w,0,h)时就是左下角点,若是gluOrtho2D(-w/2,w/2,-h/2,h/2)时原点在中心。透视投影依此类推,其中透视投影的 gluPerspective(...........)是以中心为原点的。
3、glPushMatrix()是把当前变换矩阵压栈,给保存起来,glPopMatrix()是恢复你保存的变换矩阵。glPushMatrix(),glPopMatrix()是成对出现的,可以嵌套,在这两个语句之间的变换语句对外面的绘制没有影响。这样你不想某个变换会影响到别的物体时,就用这两个语句就可以了 。
这样就不会出项你说混乱的 现象了。

这些都是最基础的东西,挺简单的,看看书,一般的OpenGL书都有讲的

16

主题

66

帖子

66

积分

注册会员

Rank: 2

积分
66
 楼主| 发表于 2006-7-3 16:42:00 | 显示全部楼层

回复7楼的

多谢你啊,讲得很细致呢.偶明了.  

0

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
QQ
发表于 2006-8-2 06:09:00 | 显示全部楼层

Re:VC下OpenGL视图窗口如何全屏化及相关坐标信息

NEHE的教程第一课里就有全屏和窗口互相切换的代码。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 01:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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