您的位置:程序门 -> c/c++ -> c++ 语言



关于open gl的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


关于open gl的问题[已结贴,结贴人:wangju19870301]
发表于:2007-05-03 16:36:52 楼主
请问如何在visual   c++中进行设置,才能让它能运行关于open   gl的程序?
发表于:2007-05-03 16:57:311楼 得分:0
http://www.codeproject.com/opengl/

上面有很多例子,   从入门到中高级话题,   都有!   自己看看;)
发表于:2007-05-03 17:06:482楼 得分:0
搜nehe   opengl教程
发表于:2007-05-03 18:42:213楼 得分:0
要学opengl的话买本书来看啊
发表于:2007-05-03 18:54:364楼 得分:0
就算机图形学…………
发表于:2007-05-03 19:16:585楼 得分:0
opengl需要在project-> setting-> link里面把opengl的库加上。
在windows下是以下三个:
opengl32.lib   glu32.lib   glaux.lib

然后,学习opengl最好的网站是nehe的www.gamedev.com,我坚持学了前20课,感觉收获很多。
发表于:2007-05-03 19:17:506楼 得分:0
说错了,是nehe.gamedev.net
发表于:2007-05-03 19:20:157楼 得分:0
#include   <windows.h> //   windows的头文件
#include   <gl/gl.h> //   包含最新的gl.h,glu.h库
#include   <gl/glu.h> //   包含opengl实用库
#include   <gl/glaux.h>
#include   <stdio.h> //   标准输入/输出库的头文件
#pragma   comment(lib, "opengl32 ")
#pragma   comment(lib, "glu32 ")
#pragma   comment(lib, "glaux ")

......
static pixelformatdescriptor   pfd= //   /pfd   告诉窗口我们所希望的东东,即窗口使用的像素格式
{
sizeof(pixelformatdescriptor), //   上述格式描述符的大小
1, //   版本号
pfd_draw_to_window   ¦ //   格式支持窗口
pfd_support_opengl   ¦ //   格式必须支持opengl
pfd_doublebuffer, //   必须支持双缓冲
pfd_type_rgba, //   申请   rgba   格式
bits, //   选定色彩深度
0,   0,   0,   0,   0,   0, //   忽略的色彩位
0, //   无alpha缓存
0, //   忽略shift   bit
0, //   无累加缓存
0,   0,   0,   0, //   忽略聚集位
16, //   16位   z-缓存   (深度缓存)
0, //   无蒙板缓存
0, //   无辅助缓存
pfd_main_plane, //   主绘图层
0, //   reserved
0,   0,   0 //   忽略层遮罩
};
if   (!(hdc=getdc(hwnd))) //   取得设备描述表了么?
{
killglwindow(); //   重置显示区
messagebox(null, "不能创建一种相匹配的像素格式 ", "错误 ",mb_ok ¦mb_iconexclamation);
return   false; //   返回   false
}

if   (!(pixelformat=choosepixelformat(hdc,&pfd))) //   windows   找到相应的象素格式了吗?
{
killglwindow(); //   重置显示区
messagebox(null, "不能设置像素格式 ", "错误 ",mb_ok ¦mb_iconexclamation);
return   false; //   返回   false
}
if(!setpixelformat(hdc,pixelformat,&pfd)) //   能够设置象素格式么?
{
killglwindow(); //   重置显示区
messagebox(null, "不能设置像素格式 ", "错误 ",mb_ok ¦mb_iconexclamation);
return   false; //   返回   false
}
if   (!(hrc=wglcreatecontext(hdc))) //   能否取得着色描述表?
{
killglwindow(); //   重置显示区
messagebox(null, "不能创建opengl渲染描述表 ", "错误 ",mb_ok ¦mb_iconexclamation);
return   false; //   返回   false
}
if(!wglmakecurrent(hdc,hrc)) //   尝试激活着色描述表
{
killglwindow(); //   重置显示区
messagebox(null, "不能激活当前的opengl渲然描述表 ", "错误 ",mb_ok ¦mb_iconexclamation);
return   false; //   返回   false
}
movewindow(hwnd,200,100,width,height,true);
showwindow(hwnd,sw_show); //   显示窗口
setforegroundwindow(hwnd); //   略略提高优先级
setfocus(hwnd); //   设置键盘的焦点至此窗口

大致是这样
发表于:2007-05-03 20:21:378楼 得分:0
vc下配置opengl
最近在学习opengl,就在网上找了一些介绍opengl在vc下配置的方法,
首先,你必须有最新版本的glut,在这里下载http://www.xmission.com/~nate/glut.html
下载这个glut-3.7.6-bin.zip
然后,解压了文件,拷贝glut32.dll到你的windows\system目录,拷贝glut32.lib到你的编译器的lib目录并将glut.h拷贝到你的编译器的include\gl目录.
最后打开vc++6.0,建立一个空的控制台应用程序,也就是project中的console   application在project> settings中设置链接到glut32.lib,glu32.lib和opengl32.lib(写在最前面).ok!
发表于:2007-05-03 20:22:319楼 得分:100
【转】vc中opengl的编程步骤

1.   使用appwizard创建应用程序框架。
 
在文档和视结构中,视负责窗口中内容的显示,因此所有的opengl绘制工作应放在视类进行;

2.   利用classwizard给视类添加如下成员函数:

重载precreatewindow函数;

响应wm_create消息的oncreate函数;

响应wm_size消息的onsize函数;

响应wm_erasebkgnd消息的onerasebkgnd函数;

响应wm_destroy消息的ondestroy函数;

重载oninitialupdate函数

3.   在precreatewindow函数中加入如下语句:

cs.style=cs.style ¦ws_clipsiblings ¦ws_clipchildren;

窗口必须设置以上属性,否则像素格式就不能正确设置;

4.   设置像素格式,创建绘制描述表。
 
这一过程放在响应wm_create消息的oncreate函数中。wm_create消息窗口被创建时产生。

像素格式定义显示设备的三十特性,比如颜色位平面的数量和组织方式(rgb模式还是索引模式),是否采用双缓存模式等等。opengl和gdi(windows的图形设置接口)的像素格式不同,而windows应用中窗口的缺省设置是gdi像素格式,所以需要为执行opengl绘制任务的窗口专门指定像素格式。对每个窗口,像素格式只能设置一次。

绘制描述表与设置描述表类似,但包含了更多有关opengl绘制信息。opengl依赖绘制描述表操作显示硬件,因此调用opengl命令前,必须创建描述表并使其成为当前的绘制描述表。

设置像素格式、创建绘制描述是每个窗口进行opengl绘制前必不可少的步骤,所以放在oncreate函数中最为合适。

5.   响应wm_size消息。
 
当视窗的大小改变时,需发送wm_size消息。在wm_size的消息响应函数中可以获知

改变后窗口的大小,因此在其中可以调用glviewport对场景的窗口变换进行更改以后适应窗口大小的改变,还可通过glfrustum等函数重新设置投影变换,使得当窗口的大小发生改变时,显示在窗口中的场景不会发生扭曲。

6.   响应wm_erasebkgnd消息。
 
当需要重新设置窗口背景时,产生wm_erasebkgnd消息。处理该消息的缺省操作是用当前背景色填充整个窗口。处理函数做适当改变:注释掉onerasebkgnd函数所有的语句,添加return   true,使该函数不执行操作,仅返回true值。

7.   重载oninitupdate函数。
 
oninitupdate函数为视对象专有,在视第一次显示之前,文档和视的结构刚刚被建起之后调用,此时,从视对象中可以获得与之相连的文档对象中的信息。根据文档和视的关系,opengl的绘制信息一般通过文档对象存取,通过视对象,因此,在oninitupdate中适合做opengl的绘制前的初始化工作。初始化工作包括创建列表(显示列表索引作为视类对象的成员变量保存)。设置光照参数,装载纹理映射贴图,确定融合方式及参数,设置雾化参数以及其它绘制场景前需完成的工作。必要时可设置时钟,程序在以后的运行中将定时接收到wm_timer消息,只要在该消息的响应函数中有规律地改变场景设置,并使视图重新绘制,就可以在窗口中形成动画效果。

8.   在ondraw函数中绘制opengl场景。
 
所有的绘制工作都应放在ondraw函数中。

9.   响应wm_timer消息。
 
wm_timer消息由程序中设定的时钟产生。若未设定时钟,则不用响应wm_timer消息。在wm_timer的消息处理函数中,更新场景,然后发送wm_paint消息或直接调用ondraw函数,使窗口中显示改变后的场景。如此反复,形成动画。

10.   响应wm_destroy消息。
 
wm_destroy消息在窗口销毁时产生。在wm_destroy的消息的处理函数中删除描述表。必要时重载基本应用框架中应用程序类的   onidle函数。onidle函数在程序的消息队列为空时被调用,该函数执行的功能与gluidlefunc函数设定的空闲回调函数的功能相似,即执行一些后台任务。
发表于:2007-05-03 20:24:0610楼 得分:0
要能运行关于open   gl的程序,
如下:
1、拷贝glut32.dll到你的windows\system目录
2、拷贝glut32.lib到你的编译器的lib目录并将glut.h拷贝到你的编译器的include\gl目录.
3、在project> settings中设置链接到glut32.lib,glu32.lib和opengl32.lib(写在最前面)


快速检索

最新资讯
热门点击