关于OPEN GL的问题

wangju19870301 2007-05-03 04:36:52
请问如何在Visual C++中进行设置,才能让它能运行关于OPEN GL的程序?
...全文
777 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixingzhong 2007-05-03
  • 打赏
  • 举报
回复
要能运行关于OPEN GL的程序,
如下:
1、拷贝glut32.dll到你的windows\system目录
2、拷贝glut32.lib到你的编译器的lib目录并将glut.h拷贝到你的编译器的include\gl目录.
3、在project>settings中设置链接到glut32.lib,glu32.lib和opengl32.lib(写在最前面)
jixingzhong 2007-05-03
  • 打赏
  • 举报
回复
【转】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函数设定的空闲回调函数的功能相似,即执行一些后台任务。
jixingzhong 2007-05-03
  • 打赏
  • 举报
回复
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!
Y___Y 2007-05-03
  • 打赏
  • 举报
回复
#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
  • 打赏
  • 举报
回复
说错了,是nehe.gamedev.net
「已注销」 2007-05-03
  • 打赏
  • 举报
回复
OpenGL需要在project->setting->link里面把openGL的库加上。
在windows下是以下三个:
opengl32.lib glu32.lib glaux.lib

然后,学习openGL最好的网站是NeHe的www.gamedev.com,我坚持学了前20课,感觉收获很多。
wonxlei 2007-05-03
  • 打赏
  • 举报
回复
就算机图形学…………
huangfeng080 2007-05-03
  • 打赏
  • 举报
回复
要学OPENGL的话买本书来看啊
「已注销」 2007-05-03
  • 打赏
  • 举报
回复
搜NEHE Opengl教程
lightnut 2007-05-03
  • 打赏
  • 举报
回复
http://www.codeproject.com/opengl/

上面有很多例子, 从入门到中高级话题, 都有! 自己看看;)
内容概要:本文研究了基于DPWMA调制与正负序分离的ANPC三电平并网逆变器前馈控制策略,旨在解决传统三电平逆变器存在的谐波含量高、电网不平衡工况适应性差及动态响应速度不足等问题。通过采用有源中点箝位(ANPC)三电平逆变器拓扑,结合双极性倍频脉宽调制(DPWMA)、正负序分离锁相技术和电网电压前馈控制,构建了一套一体化的高性能并网控制体系。该体系不仅优化了逆变器的开关动作机制,改善了输出电压电流的谐波特性,而且通过精确的相位同步和扰动补偿,显著提高了系统的动态响应能力和抗扰性能。仿真结果显示,所提出的控制策略能有效降低并网谐波含量,提升锁相精度与系统动态稳定性,确保在复杂电网工况下的高质量稳定并网。 适合人群:具备一定电力电子基础知识和仿真技能的研发人员,尤其是从事新能源发电、储能系统、柔性输电等领域研究的专业人士。 使用场景及目标:①研究和开发高性能并网逆变器,特别是针对大功率、高电能质量要求的应用场景;②探索如何通过先进的调制和控制策略来提高并网逆变器对电网扰动的适应性和响应速度;③为相关领域的学术研究和技术开发提供理论依据和实践指导。 阅读建议:建议读者结合实际的仿真软件(如MATLAB/Simulink)进行实践操作,以便更好地理解和掌握文中提到的各种控制策略的具体实现方法。同时,鼓励读者关注最新的研究成果和发展趋势,不断深化对该领域的认识。

65,212

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧