几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量  


返回   几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 » 仿射空间:CAX软件开发(三)二次开发与程序设计 » 程序设计 » OpenGL图形显示
用户名
密码
注册 帮助 会员 日历 银行 搜索 今日新帖 标记论坛为已读


回复
 
主题工具 搜索本主题 显示模式
旧 2007-06-05, 06:01 PM   #1
yogy
高级会员
 
注册日期: 06-11
帖子: 1527
精华: 15
现金: 6353 标准币
资产: 6353 标准币
yogy 向着好的方向发展
默认 请教gdi,opengl,directx画二维图形速度哪个更快?

原来是通过VC+GDI画图的,图中有大量填充,GDI画图时间太长,想用OPENGL,做了如下测试:
填充大小相同的矩形,GDI所花时间为4秒,OPENGL所长时间为6秒,
只画矩形不填充,GDI所花时间为0.6秒,OPENGL所长时间为1.2秒
为什么OPENGL画二维图形比GDI还慢,还是我程序有问题?DIRECT没用过,不知速度是否会快点?

OPENGL代码:
BOOL CGlTestDlg::GL_Init()
{
static PIXELFORMATDESCRIPTOR pfd = //定义一个PIXELFORMATDESCRIPTOR结构变量 pdf,并初始化
{
sizeof(PIXELFORMATDESCRIPTOR),//该结构大小
1,//版本号
PFD_DRAW_TO_WINDOW |//格式必须支持窗口
PFD_SUPPORT_OPENGL |//格式必须支持OPENGL
PFD_DOUBLEBUFFER,//必须支持双缓冲
24,//颜色深度
0,0,0,0,0,0,//忽略的色彩位
0,//无Alpah缓存
0,//忽略Shift Bit
0,//无聚集缓存
0,0,0,0,//忽略聚集位
32,//16位 Z-缓存(深度缓存)
0,//无模板缓存
0,//无辅助缓存
PFD_MAIN_PLANE,//主绘图层
0,//保留
0,0,0//忽略层遮罩
};


HWND TmpWnd = m_DrawingWindow.m_hWnd;
g_hdc = ::GetDC(TmpWnd);//取得设备描述表

GLuint iPixelFormat;

if( !(iPixelFormat = ChoosePixelFormat(g_hdc,&pfd)))
{
GL_UnInit();
AfxMessageBox("不能找到相应像素格式!");
return FALSE;
}
if(!SetPixelFormat(g_hdc,iPixelFormat,&pfd))
{
GL_UnInit();
AfxMessageBox("不能设置像素格式!");
return FALSE;
}

if(!(g_hRC = wglCreateContext(g_hdc)))
{
GL_UnInit();
AfxMessageBox("不能创建设备描述表!");
return FALSE;
}

if( !wglMakeCurrent(g_hdc,g_hRC))
{
GL_UnInit();
AfxMessageBox("不能激活设备描述表!");
return FALSE;
}

m_DrawingWindow.GetWindowRect(&gl_Rc);

GL_ResizeScene(gl_Rc.Width(),gl_Rc.Height());

if(!GL_InitCfg()) return FALSE;

return TRUE;
}

void CGlTestDlg::GL_ResizeScene(int iWidth, int iHeight)
{
if(iHeight == 0) iHeight = 1;

glViewport(0,0,iWidth,iHeight);//设置视口
glMatrixMode(GL_PROJECTION);// 选择投影矩阵
glLoadIdentity();// 重置投影矩阵

gluPerspective(45,(GLfloat)iWidth/(GLfloat)iHeight,0.1f,100.0f);// 计算窗口的外观比例
//glOrtho(-65,65,55,-55,0.1f,100.0f);

glMatrixMode(GL_MODELVIEW);//选择模型观察矩阵
glLoadIdentity();//重置模型观察矩阵

}

BOOL CGlTestDlg::GL_InitCfg()
{
glShadeModel(GL_SMOOTH);//启用阴影平滑
glClearColor(0.0f,0.0f,0.0f,0.0f);//黑色背景

glClearDepth(1.0f);//设置深度缓存
glEnable(GL_DEPTH_TEST);//启用深度测试
glDepthFunc(GL_LEQUAL);//所作深度测试的类型

glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);//真正精细的透视修正
glEnable(GL_POINT_SMOOTH);

return TRUE;
}

//画图
glClearColor(0.0f,0.0f,0.0f,1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除屏幕和深度缓存
glLoadIdentity();//重置当前的模型观察矩阵
GL_DrawScene();
::glFinish();
SwapBuffers(g_hdc);//交换缓存(双缓存)


//画矩形
glBegin(GL_QUADS);
for (int i=1;i<100000;i++)
{
glVertex2f(-50.0f,5.0f);
glVertex2f(-10.0f,5.0f);
glVertex2f(-10.0f,25.0f);
glVertex2f(-50.0f,25.0f);
}
glEnd();


//GDI中画图
for (int i=1;i<100000;i++)
{
Rectangle(...)
}
yogy离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
旧 2007-06-05, 06:01 PM   #2
yogy
高级会员
 
注册日期: 06-11
帖子: 1527
精华: 15
现金: 6353 标准币
资产: 6353 标准币
yogy 向着好的方向发展
默认 回复: 请教gdi,opengl,directx画二维图形速度哪个更快?

你用GDI只画Rectangle, 而OpenGL却设置了许多高级特性(如你的
GL_InitCfg()中所设), 比较完全不对称!

以下的设置都会对速度带来影响, 若只是比较画Rect的速度, 应该完全
关闭这些特性:

//==============================================
glShadeModel(GL_SMOOTH);//启用阴影平滑

glClearDepth(1.0f);//设置深度缓存
glEnable(GL_DEPTH_TEST);//启用深度测试
glDepthFunc(GL_LEQUAL);//所作深度测试的类型

glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);//真正精细的透视修正
glEnable(GL_POINT_SMOOTH);
//==============================================
yogy离线中   回复时引用此帖
回复


主题工具 搜索本主题
搜索本主题:

高级搜索
显示模式

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

vB 代码开启
[IMG]代码开启
HTML代码关闭



所有的时间均为北京时间。 现在的时间是 05:02 PM.


于2004年创办,几何尺寸与公差论坛"致力于产品几何量公差标准GD&T | GPS研究/CAD设计/CAM加工/CMM测量"。免责声明:论坛严禁发布色情反动言论及有关违反国家法律法规内容!情节严重者提供其IP,并配合相关部门进行严厉查处,若內容有涉及侵权,请立即联系我们QQ:44671734。注:此论坛须管理员验证方可发帖。
沪ICP备06057009号-2
更多