随笔分类 -  OpenGL

摘要:http://gongziya.com/941/opengl%E8%AF%BB%E5%8F%96obj%E6%A8%A1%E5%9E%8B%E6%96%87%E4%BB%B6/comment-page-2/http://www.cnblogs.com/kex1n/archive/2011/09/23/2186361.html 阅读全文
posted @ 2012-11-08 16:16 杨溪 阅读(619) 评论(2) 推荐(0) 编辑
摘要:这是一个很简单的OpenGL小程序,实现了点击屏幕中矩形拖动的功能,但是我觉得对于OpenGL图形重绘和屏幕拾取是个很好的基础学习。自己边学边做了一中午写出来的(环境是codeblocks),还希望高手能给一些指导,谢谢。 1 #include <windows.h> 2 #include <GL/glut.h> 3 4 static GLint point[2] = {400, 300}; // 矩形中心位置点坐标 5 static bool changeState = FALSE; // 点击时鼠标位置是否在矩形中 6 7 // 绘制函数 8 void displa 阅读全文
posted @ 2012-02-21 19:27 杨溪 阅读(5179) 评论(2) 推荐(2) 编辑
摘要:4.1摄像机与对象将三维图形系统形成图像的过程概念化的基本模式称为合成摄像机模型(syntheticcameramodel)。我们需要两个独立的实体:一个几何对象集以及这些对象的观察者。每个实体都可彼此独立地进行指定。将对象的规格和摄像机整合的过程称为投影(projection),该过程是由OpenGL在其流水线内部完成的。称为投影线(projector)的直线穿过图像中的每一点,并经过摄像机的光心(投影中心)。经过对象上某一点的投影线与焦平面的交点即为该点在图像中的投影点所在的位置。焦平面移到摄像机的前方,这就避免了由透镜引起的图像倒置。我们只需要指定摄像机和场景中的物体。OpenGL将在其 阅读全文
posted @ 2011-11-20 20:11 杨溪 阅读(2935) 评论(0) 推荐(0) 编辑
摘要:2.7OpenGL和GLUT坐标系之间的差异对于二维问题,在OpenGL中,x轴和y轴的正方向分别为向右和向上。对于GLUT中使用的输入函数和窗口系统,x轴和y轴的正方向分别为向右和向下。当我们使用来自鼠标的输入时,需要同时考虑两种坐标系,这很容易产生混淆。2.17状态的保存OpenGL状态决定了图元的绘制方式。矩阵堆栈(matrixstack)可用来保存投影矩阵和模型矩阵。每种堆栈只能容纳相应类型的矩阵。可用函数glPushMatrix()和glPopMatrix()使矩阵入栈或出栈。所使用的矩阵由当前矩阵模式glMatrixMode(GL_MODELVIEW或GL_PROJECTON)决定 阅读全文
posted @ 2011-11-20 20:10 杨溪 阅读(908) 评论(0) 推荐(0) 编辑
摘要:1.2关于OpenGL的三种观点1.2.1程序员的观点一般而言,大多数图形应用程序主要包括如下三要素:(1)制定绘制对象(2)描述对象的属性(3)定义这些对象被观察的方式虽然所有产生图形输入的程序必须包含以上三个要素,如果某个程序是交互式的,它还必须包含一些输入函数。最后,所有的程序必须具有一些针对本地操作系统和窗口环境的初始化和终止的函数。1.2.2OpenGL状态机将OpenGL看做是一个具有输入和输出地状态机。其中输入为几何对象的描述信息和离散对象,它们都是通过OpenGL函数调用来制定的。输出为一个离散图元的集合或构成图像的像素集合。在输入和输出之间,是一台能够获取对象的描述信息、并将 阅读全文
posted @ 2011-11-20 20:09 杨溪 阅读(1170) 评论(0) 推荐(0) 编辑
摘要:所有OpenGL函数采用了以下格式<库前缀><根命令><可选的参数个数> <可选的参数类型>库前缀有gl、glu、aux、glut、wgl、glx、agl等等,分别表示该函数属于OpenGL那个开发库等,从函数名后面中还可以看出需 要多少个参数以及参数的类型。I代表int型,f代表float型,d代表double型,u代表无符号整型。例如glVertex3fv()表示了该函 数属于 gl库,参数是三个float型参数指针。我们用glVertex*()来表示这一类函数。基本库OpenGL函数库相关的API有核心库(gl)、实用库(glu)、辅助库( 阅读全文
posted @ 2011-11-16 14:34 杨溪 阅读(1072) 评论(0) 推荐(0) 编辑
摘要:一、初始化void glutInit(int* argc,char** argv)这个函数用来初始化GLUT库。对应main函数的形式应是:int main(int argc,char* argv[]);这个函数从main函数获取其两个参数。void glutInitWindowSize(int width,int height);void glutInitWindowPosition(int x,int y);设置glut程序要产生的窗口的大小和位置(左上角)。以像素为单位。void glutInitDisplayMode(unsigned int mode);设置图形显示模式。参数mode 阅读全文
posted @ 2011-11-16 14:32 杨溪 阅读(1317) 评论(0) 推荐(0) 编辑
摘要:转自:http://blog.csdn.net/xie_zi/article/details/1963461前一章我们知道了怎么建立简单的菜单,现在我们来看看怎样来添加一个级联的子菜单。子菜单的建立和我们前面用的建立菜单的函数一样。建立菜单后我们把子菜单作为一个条目添加进去。使用函数glutAddSubMenu来完成这项工作:void glutAddSubMenu(char *entryName,int menuIndex);参数:entryName:子菜单名称。menuIndex:子菜单索引,这个就是我们调用glutCreateMenu来创建子菜单返回的值。上面就是添加子菜单的函数。(我想子 阅读全文
posted @ 2011-09-16 11:29 杨溪 阅读(1840) 评论(0) 推荐(0) 编辑
摘要:转自:http://blog.csdn.net/xie_zi/article/details/1963383弹出式菜单(像点鼠标右键出来的菜单那样的)也是GLUT的一部分,虽然它不能实现我们经常看到的windows系统弹出式菜单的所有的功能,但是它也有很大的作用。给一个程序增加菜单提供了一个比键盘更简单的方法来和程序交互,选择不同选项,而不用去记那些按键。我们首先要做的是创建菜单,创建菜单函数glutCreateMenu的原型如下:int glutCreateMenu(void (*func)(int value));参数:func:为新建的菜单处理菜单事件的函数名。这个函数的返回值是菜单的标 阅读全文
posted @ 2011-09-16 11:28 杨溪 阅读(3914) 评论(0) 推荐(1) 编辑
摘要:转自:http://blog.csdn.net/xie_zi/article/details/1925778在前几节,我们看了怎么使用GLUT的keyboard函数,来增加一个OpenGL程序的交互性。现在,是时候研究下鼠标了。GLUT的鼠标接口提供一些列的选项来增加鼠标的交互性。也就是检测鼠标单击,和鼠标移动。检测鼠标Clicks和键盘处理一样,GLUT为你的注册函数(也就是处理鼠标clicks事件的函数)提供了一个方法。函数glutMouseFunc,这个函数一般在程序初始化阶段被调用。函数原型如下:void glutMouseFunc(void(*func)(int button,int 阅读全文
posted @ 2011-09-16 11:26 杨溪 阅读(2402) 评论(0) 推荐(0) 编辑
摘要:转自:http://blog.csdn.net/xie_zi/article/details/1925696这一节里,我们再来看看上次的例子,这次我们讲使用高级的键盘控制。在初始化那部分,我们有两个变量:deltaAngle和deltaMode。这些变量控制旋转和移动照相机。当为非0时,照相机执行一些动作,当为0时,照相机就不动,这两个变量的初始值是0,也就是说,照相机初始状态是不动的。#include <math.h>#include <GL/glut.h>float angle=0.0,deltaAngle = 0.0,ratio;float x=0.0f,y=1. 阅读全文
posted @ 2011-09-16 11:25 杨溪 阅读(1771) 评论(0) 推荐(0) 编辑
摘要:转自:http://blog.csdn.net/xie_zi/article/details/1925667这节我们将去介绍4个新的处理键盘输入的函数。第一个函数允许我们去禁止keyboard repeat。函数原型如下:int glutSetKeyRepeat(int repeatMode);参数:repeatMode:开启,禁用,或恢复auto repeat模式,下面是它可能的取值。RepeatMode的可能取值如下:GLUT_KEY_REPEAT_OFF:关闭auto repeat模式。GLUT_KEY_REPEAT_ON:开启auto repeat模式。GLUT_KEY_REPEAT_ 阅读全文
posted @ 2011-09-16 11:24 杨溪 阅读(1923) 评论(0) 推荐(0) 编辑
摘要:转自:http://blog.csdn.net/xie_zi/article/details/1911997让我们看一个比较好的使用键盘控制的例子。这一章我们将建立一个应用程序。这个程序绘制了一个小的居住着雪人的世界。并且我们将用方向键来移动照相机(即移动视点在场景中漫游)。左右方向键,将照相机绕y轴旋转,上下方向键,将前后方向移动照相机。这个例子的代码放在下面。首先我们处理初始状态。#include <math.h>#include <GL/glut.h>#include <stdlib.h>static float angle=0.0,ratio;sta 阅读全文
posted @ 2011-09-16 11:23 杨溪 阅读(3808) 评论(0) 推荐(0) 编辑
摘要:转自:http://blog.csdn.net/xie_zi/article/details/1911891GLUT允许我们编写程序,在里面加入键盘输入控制,包括了普通键,和其他特殊键(如F1,UP)。在这一章里我们将学习如何去检测哪个键被按下,可以从GLUT里得到些什么信息,和如何处理键盘输入。到现在,你应该注意到了,只要你想控制一个事件的处理,你就必须提前告诉GLUT,哪个函数将完成这个任务。到现在为止,我们已经使用GLUT告诉窗口系统,当窗口重绘时我们想调用哪个渲染函数,但系统空闲时,哪个函数被调用。和当窗口大小改变时,哪个函数又将被调用。相似的,我们必须做同样的事来处理按键消息。我们必 阅读全文
posted @ 2011-09-16 11:22 杨溪 阅读(4957) 评论(0) 推荐(0) 编辑
摘要:转自:http://blog.csdn.net/xie_zi/article/details/1911793到现在为止,我们有了一个画着一个白色三角形的OpenGL窗口,但一点也不激动人心。现在让我们在这节教程里,让这个三角形自己旋转起来。让我们回到main()函数,增加些额外的设置。首先告诉GLUT我们想要一个双缓冲区。双缓冲区通过在后一个缓冲区里绘画,并不停交换前后缓冲区(可见缓冲区),来产生平滑的动画。使用双缓冲区可以预防闪烁。………….glutInitDisplayMode(GL_DEPTH|GLUT_DOUBLE|GLUT_RGBA);…………接着我们要做的是告诉GLUT,当应用程序 阅读全文
posted @ 2011-09-16 11:21 杨溪 阅读(6571) 评论(0) 推荐(0) 编辑
摘要:转自:http://blog.csdn.net/xie_zi/article/details/1911777下载下面的VC工程并运行它(glut0.zip)(这个就是上一节的工程)。你将看到两个窗口:一个控制台窗口,一个OpenGL窗口。现在改变窗口大小使高度与宽度不再相等,这时三角形发生变形。这会发生是因为你没有正确设置投影矩阵。默认的是透视投影矩阵且高宽比为1.因此高宽比改变了,投影就会变形。因此只要高宽比改变了,投影就应该重新计算。GLUT定义了当窗口大小改变时哪一个函数应该被调用。此外,这个函数还会在窗口初次被创建时调用,保证初始化窗口不是正方形的时候渲染也不会变形出错。这个函数是gl 阅读全文
posted @ 2011-09-16 11:19 杨溪 阅读(10568) 评论(0) 推荐(6) 编辑
摘要:转自:http://blog.csdn.net/xie_zi/article/details/1911452在这个部分我们将在我们的程序里建立一个main函数,这个main函数将完成必须的初始化和开启事件处理循环。所有的GLUT函数都有glut前缀并且那些完成一些初始化的函数有glutInit前缀。你首先要做的是调用函数glutInit()。Void glutInit(int*argc,char**argv);参数:Argc:一个指针,指向从main()函数传递过来的没更改的argc变量。Argv:一个指针,指向从main()函数传递过来的没更改的argv变量。在初始化GLUT后,我们开始定义 阅读全文
posted @ 2011-09-16 11:16 杨溪 阅读(12428) 评论(1) 推荐(0) 编辑
摘要:转自:http://blog.csdn.net/xie_zi/article/details/1911406GLUT 代表OpenGL Utility Tookit。Mark J.Kilgard 为了使OpenGL应用程序结构能够真正独立于窗口系统构思了GLUT库。感谢GLUT,使我们可以写程序而不必去学关于X windows或者微软自己的窗口系统。Kilgard在X windows上应用这个库,后来Nate Robins把它扩展到微软的窗口系统。感谢他们,他们做的太棒了。 在这个教程里,我将给你介绍基本的使用GLUT建立一个应用程序。这个教程将不介绍如何去渲染那些比较精美的视觉场景。这是为了 阅读全文
posted @ 2011-09-16 11:14 杨溪 阅读(6880) 评论(0) 推荐(2) 编辑