大学的时候有个选修课,要用OpenGl,很初级的内容,同样入门的学弟学妹适用

推荐个学习的资料NeHe的OpenGl教程,很完整而且有示例,讲的很明白。比某些破书好。

可以配合那本所谓的“红宝书”看看,中国人写的书就不要看了,我借过好几本内容都有些错误。

入门足够了

英文:http://nehe.gamedev.net/

中文:http://www.yakergong.net/nehe/

开始正题:

glTranslatef(x,y,z);平移物体

glRotatef(角度,x,y,z);围绕制定矢量旋转

glScalef(x,y,z);缩放物体1.0为原始大小

glPushMatrix();//储存当前视图矩阵

glPopMatrix();//弹出上次保存的位置

*gluLookAt(eyex,eyey,eyez,centerx,centery,centerz,upx,upy,upz);前三个指定眼睛的位置,中间三个指定中心点位置也就是视线看向的位置通常为0,0,0,最后三个指定哪个方向是上方(大约用这个控制摄像机位置吧 如果我错了 求正确答案 我也是初学者 这个样理论上应该没问题 不过实际上摄像机是这么控制的吗?(最近了解到这个函数是封装了gltranslatef 和glrotatef两个函数而已 不推荐使用 不是gl标准库中的函数)

例子: gluLookAt(-2.0f,5.0f,10.0f,0.0f,0.0f,0.0f,0.0f,1.0f,0.0f);
 glPushMatrix();
 glTranslatef(0.0f,0.0f,3.0f);
 glBegin(GL_QUADS);       //  绘制正方形
 glVertex3f(-1.0f, 1.0f, 0.0f);     // 左上
 glVertex3f( 1.0f, 1.0f, 0.0f);     // 右上
 glVertex3f( 1.0f,-1.0f, 0.0f);     // 左下
 glVertex3f(-1.0f,-1.0f, 0.0f);     // 右下
 glEnd();
 glColor3f(1.0f,0.0f,0.0f);
 glPopMatrix();
 glTranslatef(0.0f,0.0f,-3.0f);
 glBegin(GL_QUADS);
 glVertex3f(-1.0f, 1.0f, 0.0f);     // 左上
 glVertex3f( 1.0f, 1.0f, 0.0f);     // 右上
 glVertex3f( 1.0f,-1.0f, 0.0f);     // 左下
 glVertex3f(-1.0f,-1.0f, 0.0f);     // 右下
 glEnd();

相当于

gluLookAt(-2.0f,5.0f,10.0f,0.0f,0.0f,0.0f,0.0f,1.0f,0.0f);
 glTranslatef(0.0f,0.0f,3.0f);
 glBegin(GL_QUADS);       //  绘制正方形
 glVertex3f(-1.0f, 1.0f, 0.0f);     // 左上
 glVertex3f( 1.0f, 1.0f, 0.0f);     // 右上
 glVertex3f( 1.0f,-1.0f, 0.0f);     // 左下
 glVertex3f(-1.0f,-1.0f, 0.0f);     // 右下
 glEnd();
 glColor3f(1.0f,0.0f,0.0f);

glLoadIdentity();
 gluLookAt(-2.0f,5.0f,10.0f,0.0f,0.0f,0.0f,0.0f,1.0f,0.0f);
 glTranslatef(0.0f,0.0f,-3.0f);
 glBegin(GL_QUADS);
 glVertex3f(-1.0f, 1.0f, 0.0f);     // 左上
 glVertex3f( 1.0f, 1.0f, 0.0f);     // 右上
 glVertex3f( 1.0f,-1.0f, 0.0f);     // 左下
 glVertex3f(-1.0f,-1.0f, 0.0f);     // 右下
 glEnd();

引用一段别出的教程:

当您调用glLoadIdentity()之后,您实际上将当前点移到了屏幕中心,X坐标轴从左至右,Y坐标轴从下至上,Z坐标轴从里至外。OpenGL屏幕中心的坐标值是X和Y轴上的0.0f点。中心左面的坐标值是负值,右面是正值。移向屏幕顶端是正值,移向屏幕底端是负值。移入屏幕深处是负值,移出屏幕则是正值。

glTranslatef(x, y, z)沿着 X, Y 和 Z 轴移动。根据前面的次序,下面的代码沿着X轴左移1.5个单位,Y轴不动(0.0f),最后移入屏幕6.0f个单位。

以下是附赠的手绘版本的opengl坐标系示意图,注意Z轴是垂直显示器向外的哦

OpenGl入门——视口及物体移动函数的更多相关文章

  1. opengl入门学习

    OpenGL入门学习 说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640 ...

  2. OpenGL入门学习(转)

    OpenGL入门学习 http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html 说起编程作图,大概还有很多人想起TC的#includ ...

  3. OpenGL入门学习(转载)

    说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率.16色 ...

  4. SCARA——OpenGL入门学习五六(三维变换、动画)

    OpenGL入门学习(五) 此课为三维变换的内容,比较枯燥.主要是因为很多函数在单独使用时都不好描述其效果, 在前面绘制几何图形的时候,大家是否觉得我们绘图的范围太狭隘了呢?坐标只能从-1到1,还只能 ...

  5. MFC下OpenGL入门(可以用)

    MFC下OpenGL入门 源文件 1, 建一工程文件,我这里命名为first,现在first工程里面我们没有添加任何东西,所有的东西都是MFC自动帮我们创建的. 2, 添加链接库.这一步很关键.打开菜 ...

  6. SCARA——OpenGL入门学习三

    OpenGL入门学习[三] 在第二课中,我们学习了如何绘制几何图形,但大家如果多写几个程序,就会发现其实还是有些郁闷之处.例如:点太小,难以看清楚:直线也太细,不舒服:或者想画虚线,但不知道方法只能用 ...

  7. OpenGL入门学习(三)

    http://developer.178.com/201103/94954704639.html 在第二课中,我们学习了如何绘制几何图形,但大家如果多写几个程序,就会发现其实还是有些郁闷之处.例如:点 ...

  8. OpenGL入门1.4:纹理/贴图Texture

    每一个小步骤的源码都放在了Github 的内容为插入注释,可以先跳过 前言 游戏玩家对Texture这个词应该不陌生,我们已经知道了怎么为每个顶点添加颜色来增加图形的细节,但,如果想让图形看起来更真实 ...

  9. OpenGL入门1.2:渲染管线简介,画三角形

    每一个小步骤的源码都放在了Github 的内容为插入注释,可以先跳过 图形渲染管线简介 在OpenGL的世界里,任何事物是处于3D空间中的,而屏幕和窗口显示的却是2D,所以OpenGL干的事情基本就是 ...

随机推荐

  1. 学习Windows Azure 视频集合大全

    Windows Azure 入门系列课程视频Windows Azure 入门系列课程(1):Windows Azure 概述http://www.aboutyun.com/thread-5777-1- ...

  2. HDU1671 - Phone List(Trie树)

    题目大意 给定一些电话号码,判断是否有电话号码是其他电话号码的前缀 题解 裸Trie树嘛~~~~只需要一个插入过程即可,假设X是Y的前缀,在插入的过程中有两种情况,X在Y之前插入,那么在插入Y的时候经 ...

  3. POJ1811- Prime Test(Miller–Rabin+Pollard's rho)

    题目大意 给你一个非常大的整数,判断它是不是素数,如果不是则输出它的最小的因子 题解 看了一整天<初等数论及其应用>相关部分,终于把Miller–Rabin和Pollard's rho这两 ...

  4. Codeforces 295C Greg and Friends

    BFS+DP.dp[i][j][0]表示有i个50kg,j个100kg的人在左岸,dp[i][j][1]表示有i个50kg,j个100kg的人在右岸.用BFS求最短路的时候记录到达该状态的可能情况. ...

  5. Codeforces Round #226 (Div. 2)C. Bear and Prime Numbers

    /* 可以在筛选质数的同时,算出每组数据中能被各个质数整除的个数, 然后算出[0,s]的个数 [l,r] 的个数即为[0,r]的个数减去[0,l]个数. */ #include <stdio.h ...

  6. POJ2923--Relocation(01背包+状压dp)

    果然对状压DP,我根本就不懂=.= /************************************************** Problem: 2923 User: G_lory Mem ...

  7. centos 7 修改主机名称

    hostnamectl --static set-hostname <host-name> 参考资料 http://www.centoscn.com/CentOS/config/2014/ ...

  8. linux 系统磁盘分区之fdisk

    对于学习磁盘分区,通常学习的都是fdisk命令 当然,对于小于2TB的磁盘,我们基本上是使用fdisk命令进行分区 下面就简单介绍一下fdisk操作磁盘的基本命令和场景模拟 常用命令介绍   fdis ...

  9. iOS开发之蓝牙通信

    一.引言 蓝牙是设备近距离通信的一种方便手段,在iPhone引入蓝牙4.0后,设备之间的通讯变得更加简单.相关的蓝牙操作由专门的 CoreBluetooth.framework进行统一管理.通过蓝牙进 ...

  10. careercup-树与图 4.2

    4.2 给定有向图,设计一个算法,找出两个结点之间是否存在一条路径. 解答 根据题意,给定一个有向图和起点终点,判断从起点开始,是否存在一条路径可以到达终点. 考查的就是图的遍历,从起点开始遍历该图, ...