`

OpenGL 图形编程 学习笔记 一

阅读更多

[2012-12-31 16:15] OpenGL学习笔记(6)第一个动画 - Clingingboy - 博客园 - Google Chrome

 

glutMouseFunc用于捕获鼠标事件

glutKeyboardFunc用于捕获键盘事件

glutMotionFunc用于鼠标按下又移动鼠标的事件(MouseMove)

glutIdleFunc事件,当循环队列处于空闲时则触发该事件

glutTimerFunc单位时间内内触发事件

 

 

属性-》链接器-》输入   附加依赖库 glut32.lib OPENGL32.LIB GLU32.LIB GLAUX.LIB

属性-》c/c++-》预处理器  预处理器定义  ;GLUT_BUILDING_LIB

 

 

 

每次都将spin加2,这样的话spin其实是矩形旋转度数的总和,但如何维护矩形初始化(未旋转前)的矩阵呢?

 

即将为旋转前的当前矩阵压入(glPushMatrix)矩阵堆栈中,然后当旋转结束后又弹出(glPopMatrix)堆栈恢复,当spin增加时,又以原始矩阵来合并,这样就不会出现什么问题了.

 

还有一种做法则是去掉矩阵堆栈的压入与弹出,使得spin每次都是等于2,但度数就可能会超过360,造成数字过大转换,如

 

#include <stdio.h>
#include <gl/glut.h>

static GLfloat spin = 0.0;

void display(void)
{
	glClear(GL_COLOR_BUFFER_BIT);
	glPushMatrix();

	glRotatef(spin,0.0,0.0,1.0);
	glColor3f(1.0,1.0,1.0);
	glRectf(-25.0,-25.0,25.0,25.0);

	glPopMatrix();

	glutSwapBuffers();
}

void spinDisplay(void)
{
	spin = spin + 2.0;
	if (spin > 360.0)
	{
		spin = spin-360.0;
	}
	glutPostRedisplay();

}

void init(void)
{
	glClearColor(0.0,0.0,0.0,0.0);
	glShadeModel(GL_FALSE);
}

void reshape(int w,int h)
{
	glViewport(0,0,(GLsizei)w,(GLsizei)h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(-50.0,50.0,-50.0,50.0,-1.0,1.0);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
}

void mouse(int button,int state,int x,int y)
{
	switch(button){
		case GLUT_LEFT_BUTTON:
			if (state == GLUT_DOWN)
			{
				glutIdleFunc(spinDisplay);
			}
			break;
		case GLUT_MIDDLE_BUTTON:
		case GLUT_RIGHT_BUTTON:
			if (state == GLUT_DOWN)
			{
				glutIdleFunc(NULL);
			}
			break;
		default:
			break;
	}
}
int _tmain(int argc, char* argv[])
{
	glutInit(&argc,argv);
	glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
	glutInitWindowSize(250,250);
	glutInitWindowPosition(100,100);
	glutCreateWindow(argv[0]);
	init();
	glutDisplayFunc(display);
	glutReshapeFunc(reshape);
	glutMouseFunc(mouse);
	glutMainLoop();
	return 0;
}
 

 

 

(http://www.cnblogs.com/Clingingboy/archive/2010/10/17/1853671.html)

 

 

 

[2012-12-31 16:35] OpenGL学习笔记(6)第一个动画 - Clingingboy - 博客园 - Google Chrome

 

glutTimerFunc回调事件只执行一次,如果想一直执行的话就需要在内部再次调该方法,下面用glutTimerFunc来替代glutIdleFunc实现同样的效果

 

void spinDisplay(int value)
{
   spin = spin + 2.0;
   if (spin > 360.0)
      spin = spin - 360.0;
   glutPostRedisplay();
   glutTimerFunc(10, spinDisplay, 1);
}
 

当然首先要外部先调用一次spinDisplay方法才可以

(http://www.cnblogs.com/Clingingboy/archive/2010/10/17/1853671.html)

分享到:
评论

相关推荐

    NeHe OpenGL教程 学习笔记1

    这篇学习笔记1主要会探讨基础的OpenGL设置和渲染原理。 在OpenGL编程中,我们首先需要设置上下文环境,这通常通过窗口系统接口(如GLUT或SDL)完成。在"base.cpp"这个文件中,我们可能看到初始化OpenGL窗口的代码,...

    opengl es 2.0 学习笔记

    《OpenGL ES 2.0 学习笔记》是一份针对英文版《OpenGL ES 2.0 Programming Guide》的阅读总结,旨在帮助读者更好地理解和掌握OpenGL ES 2.0的核心概念和技术要点。以下是对该书中关键知识点的详细解释和归纳。 ####...

    Java OpenGL(JOGL)学习笔记,含代码

    Java OpenGL(JOGL)学习笔记 在学习 JOGL 时,我们需要了解图形显示器是如何工作的。图形显示器是一个由许多像素点组成的绘图区域,图形系统的核心是一个魔法画笔,这支画笔能以非常快的速度移动到一个确定的像素...

    android OpenGL学习笔记(一)

    在本篇“Android OpenGL 学习笔记(一)”中,我们将探讨如何在Android平台上使用OpenGL ES进行图形渲染。OpenGL ES是OpenGL的一个轻量级版本,专为嵌入式系统设计,包括移动设备如智能手机和平板电脑。这篇笔记将...

    OpenGL_Qt学习笔记之_01(创建一个OpenGL窗口) - tornadomeet - 博客园

    OpenGL(Open Graphics Library)是一种用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。它使用一种特殊的状态机架构,每条命令都会改变渲染管道的状态。OpenGL的核心优势在于: - **跨平台性**...

    OpenGL 学习笔记整理

    GLSL(OpenGL Shading Language)是为图形编程设计的专用语言,用于编写这些着色器。着色器的渲染流程包括从顶点数据开始,通过一系列处理,最终由片段着色器生成屏幕上的像素。在这个过程中,属性和uniform变量被...

    code_opengl学习笔记3-1-在3D中绘制点

    在本节“code_opengl学习笔记3-1-在3D中绘制点”中,我们将深入探讨如何使用OpenGL来在三维空间中绘制点,这是构建更复杂图形的基础。 在OpenGL中,点是最基本的图元之一,它不具有长度、宽度或深度,但当在屏幕上...

    code__opengl学习笔记2-绘制矩形

    本学习笔记主要关注如何使用OpenGL绘制矩形,这是一个基础但至关重要的概念,因为几乎所有的图形绘制都可以通过组合基本形状如矩形来实现。 在OpenGL中,没有内置的“绘制矩形”函数。相反,我们通常使用四条直线...

    games101计算机图形学 学习笔记分享

    在"games101计算机图形学学习笔记分享"中,我们可以期待了解到一系列关于这个主题的基础概念、理论和技术。 首先,笔记可能会从基础的图形学原理开始讲解,包括二维和三维坐标系的概念,以及如何在笛卡尔坐标系中...

    opengl学习笔记

    本学习笔记旨在帮助初学者掌握OpenGL编程的基础知识,尤其针对坐标变换和图形管线有深入的探讨。 首先,OpenGL图形管线是其核心概念之一,它是从几何形状到屏幕像素的处理流程。管线可以分为几个阶段:顶点着色器、...

    code__opengl学习笔记1-基本的运行框架

    OpenGL学习笔记1 - 基本的运行框架 在计算机图形学领域,OpenGL是一个广泛使用的跨语言、跨平台的应用程序编程接口(API),用于渲染2D、3D图像。本笔记将聚焦于如何在Visual Studio 2012环境下搭建一个基本的...

    Opengl学习笔记

    ### OpenGL学习笔记关键知识点 #### 一、OpenGL坐标系与绘图函数 - **坐标系定义**:在OpenGL中,坐标系定义了三维空间中物体的位置。X坐标轴从左至右,Y坐标轴从下至上,Z坐标轴从观察者的视角由近及远(即从里至...

    C#版的OpenGL

    OpenGL是一种开放源代码的图形库,它为程序员提供了一种跨平台的方式来创建高性能的2D和3D图形。OpenGL在C++中广泛使用,但在C#编程环境中,开发者通常会利用封装库来调用OpenGL的功能。标题提到的"C#版的OpenGL...

    OpenGL超级宝典 笔记15之前 清单3.12之前所有有关代码.rar

    OpenGL超级宝典是一本深入学习图形编程的权威书籍,涵盖了从基础到高级的大量OpenGL编程技术。这份笔记包含了第15章之前的全部代码示例,这些示例是基于C++语言实现的,主要关注OpenGL的核心功能和编程模式。在...

    Android OpenGL ES 2.0学习书籍.rar

    OpenGL ES2.0学习”这本书将引导读者全面掌握OpenGL ES 2.0在Android平台上的应用,从基础概念到高级技巧,涵盖3D图形编程的各个方面,对于想要进入移动游戏开发领域的开发者来说是一本宝贵的资源。

    OpenGL学习笔记

    ### OpenGL学习笔记知识点详解 #### 一、OpenGL简介与安装准备 OpenGL(Open Graphics Library)是一种用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。它被广泛应用于游戏开发、图形软件以及...

    OpenGL初学笔记

    在"OpenGL学习笔记.doc"中,可能包含以下内容: 1. **基本概念**:介绍OpenGL的架构、管线模型以及主要的数据类型和函数。 2. **环境设置**:详述如何在Visual C++ 6.0中创建OpenGL项目,设置链接器选项,以及如何...

    Xcode高级图形编程实例6

    这个实例“Xcode高级图形编程实例6”是《企业级iOS应用开发实践》一书第六章的配套源码,旨在帮助读者深入理解并实践iOS图形编程的精髓。 首先,我们要关注的是Objective-C,这是苹果生态系统中主要的编程语言,...

    orge学习笔记

    "orge学习笔记"是关于orge 3D引擎的个人学习...总之,"orge学习笔记"为我们提供了一个深入学习和掌握orge 3D引擎的机会,通过这份资料,无论是新手还是有经验的开发者,都能提升自己在3D图形编程和游戏开发领域的技能。

Global site tag (gtag.js) - Google Analytics