关闭

看opengl写代码(2) Hello,OpenGl

标签: opengl
307人阅读 评论(0) 收藏 举报
分类:

下面 直接 上代码:

// helloOpenGL.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <gl/glut.h>
void init(){
	glClearColor(0,0,0,1);//设置清除颜色
	glColor3f(1.0,0,0);
	//这三个 不太明白
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(0.0,1.0,0.0,1.0,-1.0,1.0);
}

void disPlay(void){
	glClear(GL_COLOR_BUFFER_BIT);//清除窗口
	//绘制多边形..(顶点位置非常重要)
	glBegin(GL_POLYGON);
	glVertex3f(0.25,0.25,0);
	glVertex3f(0.25,0.75,0);
	glVertex3f(0.75,0.25,0);
	glVertex3f(0.75,0.75,0);
	glEnd();
	//立马显示...
	glFlush();
}


int _tmain(int argc, _TCHAR* argv[])
{
	glutInit(&argc,(char **)argv);//init
	glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);//RGB颜色模式 和 单缓冲模式
	glutInitWindowSize(500,500);//设置窗口尺寸
	glutInitWindowPosition(0,0);//设置窗口位置
	glutCreateWindow("Hello OpenGl!");
	init();//不要 将  只需调用一次的 设置 放进 disPlay 函数
	glutDisplayFunc(disPlay);
	glutMainLoop();//主循环,负责 一直 调用 disPlay
	return 0;
}
并且 针对 不太了解的 opengl 函数 进行了 百度:

glMatrixMode函数:设置当前矩阵模式:
mode 指定哪一个矩阵堆栈是下一个矩阵操作的目标,可选值: GL_MODELVIEW、GL_PROJECTION、GL_TEXTURE.
GL_MODELVIEW,对模型视景矩阵堆栈应用随后的矩阵操作.
GL_PROJECTION,对投影矩阵应用随后的矩阵操作.
GL_TEXTURE,对纹理矩阵堆栈应用随后的矩阵操作.


glLoadIdentity该函数的功能是重置当前指定的矩阵为单位矩阵.

1).加载glLoadIdentity(),等于是将之前矩阵变换导致变化过的栈顶矩阵重新归位,置为单位矩阵!等于是之前的矩阵变换带来的影响到此为止了!
2).产生顶点的语句,比如glutWireBox、glutSolidSphere等等,它们最终要与栈顶矩阵计算算出最终的顶点位置。但它们本身不会影响栈顶矩阵的值!
3).任何一个模型、视图变换,如translate、scale、lookAt等,计算后都会影响当前栈顶矩阵的值!若每次变换完毕后不去归位(glLoadIdentity),则下一次的顶点变换是建立在上一轮(一系列)变换的基础之上的!
4).根据矩阵变换本质的理解,glLoadIdentity并不是简单的理解为将坐标归为世界坐标的原点。而是每次建立顶点的时候,都是以当前物体的中心作为世界的原点的(换句话说,也就是上一轮物体变换之后,原点的位置作为新的物体的中心)。之后再进行各种变换而形成物体的移动、缩放、旋转等效果。从本质上讲,glLoadIdentity并不会改变世界坐标的原点位置,而仅仅是让“栈顶矩阵归位”。但它导致了下一轮顶点变换时,感觉上是以新的物体中心为世界原点的效果!

glOrtho(0.0,1.0,0.0,1.0,-1.0,1.0); 大致 知道 是 正交投影。。

http://anony3721.blog.163.com/blog/static/51197420113206471827/

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:88400次
    • 积分:2347
    • 等级:
    • 排名:第16434名
    • 原创:141篇
    • 转载:47篇
    • 译文:0篇
    • 评论:2条
    最新评论