看opengl写代码(2) Hello,OpenGl

原创 2015年07月10日 01:08:22

下面 直接 上代码:

// 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/

相关文章推荐

openGL/ESv2 通过JNI的简单示例代码

// OpenGL ES 2.0 code #include #define LOG_TAG "GL2JNI gl_code.cpp" #include #include #include #...
  • nigelyq
  • nigelyq
  • 2015年05月20日 14:35
  • 446

OpenGL学习-2-鼠标事件响应练习工程代码(排错补档)

#include #include #include #include void init(void); void CALLBACK reshape(GLsizei w,GLsizei h)...

OPENGL超级宝典的全部代码2

  • 2007年12月10日 10:23
  • 7.58MB
  • 下载

OpenGL ES2.0 Programming Guide - chapter 2:Hello Triangle: An OpenGL ES2.0 example

Chapter 2:Hello Triangle: An OpenGL ES2.0 example

看 opengl 写代码(1) 搭建开发环境(vs2012 + glut 和 vs2013 + glut)

博主 无私奉献:(vs2012 + glut) 开发 环境 配置 序:看到本文章,祝贺你,你至少省掉了 1 个小时 苦苦寻找 搭建 方法的时间。 下面搭建方法为本博主 亲测。有事 可以 留言 或者...

看opengl写代码(3) 实现矩阵的旋转

参考   opengl编程指南   P17    直接上代码:  // doubleBuffer.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #inc...

openGL学习笔记二:看看上一篇我们写的代码

哈哈, 千呼万唤始出来, 我们第二篇笔记新鲜出炉了( 话说不是没隔多久么。。。。) 呵呵, 闲话不多说, 我们来看看上一篇我们写的代码, 知其然也要知其所以然啊 #include void d...

看opengl写代码(5) 使用顶点数组

使用顶点数组 可以 减少 opengl函数的 调用次数   以及共享 顶点,提高 效率。 总共 有 8组 数组,他们 是 顶点,颜色,辅助颜色,索引,法线,雾坐标,纹理坐标,边界标记。关于 每个数组的...

看opengl写代码(8) 使用缓冲区

不得 “不佩服”我的解决能力!弄了 好几天,不得 不说 在WINDOSW下 写 OPENGL,真坑, 自己 更坑。 书中说到 由于 OPENGL 是 基于 客户端 /服务器 的,所以 在OP...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:看opengl写代码(2) Hello,OpenGl
举报原因:
原因补充:

(最多只允许输入30个字)