`

OpenGL 图形编程 学习笔记 二

 
阅读更多

 

 

[2012-12-31 16:38] OpenGL---GLUT教程(二) GLUT初始化 - 北京的开始 - 博客频道 - CSDN.NET - Google Chrome

 

首先要做的是调用函数glutInit()。

Void glutInit(int*argc,char**argv);

参数:

Argc:一个指针,指向从main()函数传递过来的没更改的argc变量。

Argv:一个指针,指向从main()函数传递过来的没更改的argv变量。

在初始化GLUT后,我们开始定义我们的窗口。首先确定窗口位置(它默认的是屏幕左上角),我们使用函数glutInitWindowPosition()。

Void glutInitWindowPositon(int x,int y);

参数:

X: 距离屏幕左边的像素数。-1是默认值,意思就是由窗口管理程序决定窗口出现在哪里。如果不使用默认值,那你就自己设置一个值。

Y:距离屏幕上边的像素数。和X一样。

注意,参数仅仅是对窗口管理程序的一个建议。尽管你精心的设置了窗口位置,window返回的可能是不同的位置。如果你设置了,一般会得到你想要的结果。接下来我们设置窗口大小,使用函数glutInitWindowSize()。

Void glutInitWindowSize(int width,int height);

参数:

Width:窗口的宽度。

Height:窗口的高度。

 

同样width,height也只是一个参考数字。避免使用负数。

 

接下来。你应该使用函数glutInitDisplayMode()定义显示方式。

Void glutInitDisplayMode(unsighed int mode)

参数:

Mode――可以指定下列显示模式

Mode参数是一个GLUT库里预定义的可能的布尔组合。你使用mode去指定颜色模式,数量和缓冲区类型。

指定颜色模式的预定义常量有:

1:GLUT_RGBA或者GLUT_RGB。指定一个RGBA窗口,这是一个默认的颜色模式。

2:GLUT_INDEX。指定颜色索引模式。

这个显示模式还允许你选择单缓冲区或双缓冲区窗口。

1:GLUT_SINGLE.单缓冲区窗口。

2:GLUT_BUFFER.双缓冲区窗口,这是产生流畅动画必须选的。

还可以指定更多,如果你想指定一组特殊的缓冲的话,用下面的变量:

1:GLUT_ACCUM.累积缓冲区。

2:GLUT_STENCIL.模板缓冲区。

3:GLUT_DEPTH.深度缓冲区。

 

假定你想要一个有单缓冲区,深度缓冲区的RGB窗口,你用“或“(|)操作符来建立你想要的显示模式。

…………….

glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE|GLUT|DEPTH);

…………….

 

经过上面的这些步骤后,就可以调用函数glutCreateWindow()来创建窗口了。

Int glutCreateWindow(char* title);

参数:

Title:设置窗口的标题。

glutCreateWindow()的返回值是一个窗口标识符。后面你可以在GLUT里使用这个标识符,不过这个超出了本小节的范围。

 

现在就有一些代码来完成所有的初始化操作。

#include<gl/glut.h>

void main(int argc,char**argv)

{

     glutInit(&argc,argv);

     glutInitDisplayMode(GLUT_DEPTH|GLUT_SINGLE|GLUT_RGBA);

     glutInitWindowPosition(100,100);

glutInitWindowSize(320,320);

glutCreateWindow(“GLUT Tutorial”);

}

 

如果你运行上述代码,你将会得到一个空的黑的控制台窗口,而没有OpenGL窗口。并且控制台窗口将很快消失。

在我们渲染一些东西前,还有两件事需要处理。第一告诉GLUT哪个函数负责渲染。我们创建一个简单的渲染的函数。下面的这个函数将会清除颜色缓冲区并画一个三角形。

...

void renderScene(void) {

         glClear(GL_COLOR_BUFFER_BIT);

         glBegin(GL_TRIANGLES);

                 glVertex3f(-0.5,-0.5,0.0);

                 glVertex3f(0.5,0.0,0.0);

                 glVertex3f(0.0,0.5,0.0);

         glEnd();

         glFlush();

}

上面的函数的名字你可以自己取一个。现在你必须告诉GLUT使用我们上面的函数来进行渲染。这个叫寄存回调。。让我们告诉GLUT这个函数renderScene应该被使用。当需要重画的时候GLUT有一个只传递一个函数名称参数的函数(以函数名为形参的函数)就会被调用。

void glutDisplayFunc(void (*func)(void));

参数:

func: 当窗口需要被重绘是调用的函数的名称。注意使用NULL作为实参是错误的。

最后一件事是告诉GLUT我们准备进入应用程序事件处理循环。GLUT提供了一个函数让程序进入一个永不结束的循环。一直等待处理下一个事件。函数是glutMainLoop()。

void glutMainLoop(void)

到目前为止所有的代码都列在下面。如果你运行代码,将会得到一个控制台窗口,和一个画着一个白色三角形的OpenGL窗口,出现在你设置的位置,并有着你设置的尺寸。

#include <GL/glut.h>
 
 
void renderScene(void) {
         glClear(GL_COLOR_BUFFER_BIT);
         glBegin(GL_TRIANGLES);
                 glVertex3f(-0.5,-0.5,0.0);
                 glVertex3f(0.5,0.0,0.0);
                 glVertex3f(0.0,0.5,0.0);
         glEnd();
         glFlush();
}
 
void main(int argc, char **argv) {
         glutInit(&argc, argv);
         glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
         glutInitWindowPosition(100,100);
         glutInitWindowSize(320,320);
         glutCreateWindow("3D Tech- GLUT Tutorial");
         glutDisplayFunc(renderScene);
         glutMainLoop();
}
 

(http://blog.csdn.net/mazhen1986/article/details/7586402)

分享到:
评论

相关推荐

    opengl es 2.0 学习笔记

    ### OpenGL ES 2.0 学习笔记 #### 一、概述 《OpenGL ES 2.0 学习笔记》是一份针对英文版《OpenGL ES 2.0 Programming Guide》的阅读总结,旨在帮助读者更好地理解和掌握OpenGL ES 2.0的核心概念和技术要点。以下...

    NeHe OpenGL教程 学习笔记1

    OpenGL是计算机图形学中的一种广泛应用的编程接口,用于在各种操作系统和硬件上生成二维和三维图像。NeHe教程是OpenGL初学者的经典学习资源,由Jeffrey Ventrella创建,提供了丰富的实例代码和解释,帮助开发者逐步...

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

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

    OpenGL 学习笔记整理

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

    android OpenGL学习笔记(一)

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

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

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

    code__opengl学习笔记2-绘制矩形

    OpenGL是计算机图形学中的一种广泛应用的编程接口,用于在各种操作系统和硬件上生成二维和三维图像。本学习笔记主要关注如何使用OpenGL绘制矩形,这是一个基础但至关重要的概念,因为几乎所有的图形绘制都可以通过...

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

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

    opengl学习笔记

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

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

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

    Opengl学习笔记

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

    C#版的OpenGL

    5. **着色器编程**:编写GLSL(OpenGL Shading Language)着色器,实现复杂的图形效果。 6. **资源管理**:加载和管理纹理、模型、着色器等资源。 总的来说,C#版的OpenGL为C#开发者提供了一个与原生OpenGL接口兼容...

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

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

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

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

    Android OpenGL ES 2.0学习书籍.rar

    总之,“Android 3D游戏开发技术宝典 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高级图形编程中,我们探讨的是如何利用iOS平台强大的图形处理能力来构建更为复杂且视觉效果丰富的应用程序。这个实例“Xcode高级图形编程实例6”是《企业级iOS应用开发实践》一书第六章的配套源码,旨在帮助...

    orge学习笔记

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

Global site tag (gtag.js) - Google Analytics