游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2149|回复: 2

新人小菜鸟求助各位前辈大大

[复制链接]

1

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2011-9-22 10:58:00 | 显示全部楼层 |阅读模式
本来刚开始学习opengl,有不少疑惑,肯请各位前辈指点迷津,下面开始描述问题:


#include "gl\glut.h"

// 绘制场景
void RenderScene(void)
{
        //用当前清除颜色清除窗口
        glClear(GL_COLOR_BUFFER_BIT);

        //绘制一个矩形
        glColor3f(1.0f, 0.0f, 0.0f);
        glRectf(-25.0f, -25.0f, 25.0f, 25.0f);

        //刷新绘图命令
        glFlush();
}

//设置渲染状态
void SetRC(void)
{
        glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
}

//窗口改变时的回调函数
void ChangeSize(GLsizei w, GLsizei h)
{
        GLfloat aspectRatio;

        //防止除数为0
        if (h == 0) h = 1;

        //把视图设置为窗口大小
        glViewport(0, 0, w, h);

        //重置坐标系统
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();

        //建立裁剪区域(左,右,底,顶,远,近)
        aspectRatio = (GLfloat)w / (GLfloat)h;
        if (w <= h)
        {
                glOrtho(- 100.0, 100.0, -100.0 / aspectRatio, 100.0 / aspectRatio, 1.0, - 1.0);
        }
        else
        {
                glOrtho(- 100.0 * aspectRatio, 100.0 * aspectRatio, - 100.0, 100.0, 1.0, - 1.0);
        }

        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
}

int main(int argc, char* argv[])
{
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
        glutCreateWindow("sample01");
        glutDisplayFunc(RenderScene);
        glutReshapeFunc(ChangeSize);
        SetRC();
        glutMainLoop();
        return 0;
}

这是一个最简单的显示一个蓝色背景的opengl窗口,窗口中间放置一个2D样式的红色正方形。
问题主要在RenderScene和ChangeSize函数中。
(1) RenderScene中的glRectf函数,这个函数的值是-25.0,-25.0,25.0,25.0这四个,opengl坐标系的范围不是-1.0,-1.0,1.0,1.0么?
(2) 既然glRectf是上面那样设置的,那么changsize里面肯定是做了某种变换,就是那个glOrtho函数,但是我不明白这个函数的工作原理,看书上说的是用正投影,然后矩阵相乘以后得到的一个新的矩阵,不是很明白。

感谢各位大牛指点小弟 [em19]

15

主题

108

帖子

117

积分

注册会员

Rank: 2

积分
117
发表于 2011-9-22 12:13:00 | 显示全部楼层

Re:新人小菜鸟求助各位前辈大大

问题一本来就不是问题哈,这个你是听谁说的是那个范围,那个跟屏幕坐标有关系的。

问题二,正投影就是,对物体或者对象全体放大或缩小,而不是像透视投影那样,透视投影远处的看起来小,近的大

0

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2011-11-9 22:36:00 | 显示全部楼层

Re:新人小菜鸟求助各位前辈大大

正投影(glOrtho设置一个方盒子)就是平行投影parallel,它的视窗范围(那个方盒子)是一个长方体,而透视投影的视窗范围是一个金字塔一样的东西,这样你会看到如楼上所述场景。
矩阵相乘就是进行视图模型变换,用来关联视角和物体的,比如物体左移相当于视口右移
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-8 19:18

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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