| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 836 人关注过本帖
标题:如何创建opengl窗口
只看楼主 加入收藏
geng522
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2006-6-29
结帖率:0
收藏
 问题点数:0 回复次数:3 
如何创建opengl窗口

请教各位如何在vc6.0中创建opengl窗口?最好是在win32平台上的

搜索更多相关主题的帖子: opengl窗口 平台 
2006-12-31 15:24
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 

第一步:
#include <gl\gl.h>
#include <gl\glu.h>
#include <gl\glaux.h>
#pragma comment( lib, "opengl32.lib") // OpenGL32连接库
#pragma comment( lib, "glu32.lib") // GLu32连接库
#pragma comment( lib, "glaux.lib") // GLaux连接库

第二步:
case WM_CREATE:
hDC = GetDC( hWnd );
SetupPixelFormat( hDC );
hRC = wglCreateContext( hDC );
wglMakeCurrent( hDC, hRC );
break;
case WM_CLOSE:

wglMakeCurrent( hDC, NULL );
wglDeleteContext( hRC );

PostQuitMessage(0);
break;
case WM_SIZE:
Height = HIWORD( lParam );
Width = LOWORD( lParam );

SetupProjection( Width, Height );
break;
第三步:

while( !bExiting )
{

Render();
SwapBuffers(hDC );

while( PeekMessage( &msg, NULL, 0,0, PM_NOREMOVE ))
{
if( !GetMessage( &msg, NULL, 0,0 ))
{
bExiting = true;
break;
}

TranslateMessage( &msg );
DispatchMessage( &msg );
}
}

其中所用到的自定义函数如下:
void SetupPixelFormat( HDC hDC )
{

PIXELFORMATDESCRIPTOR pfd =
{
sizeof( PIXELFORMATDESCRIPTOR ),
1,
PFD_SUPPORT_OPENGL |
PFD_DRAW_TO_WINDOW |
PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
32,
0,0,0,0,0,0,
0,
0,
0,
0,0,0,0,
16,
0,
0,
PFD_MAIN_PLANE,
0,
0,0,0,
};

int pixelformat;
if((pixelformat = ChoosePixelFormat(m_hDc, &pfd)) == 0)
{
MessageBox( "ChoosePixelFormat failed", "Error", MB_OK);
return FALSE;
}

if(SetPixelFormat(m_hDc, pixelformat, &pfd) == FALSE)
{
MessageBox( "SetPixelFormat failed", "Error", MB_OK);
return FALSE;
}
}

void SetupProjection( int Width, int Height )
{
if( Height == 0 )
{
Height = 1;
}

glViewport( 0, 0, Width, Height );

glMatrixMode( GL_PROJECTION );
glLoadIdentity();

gluPerspective( 52.0f, (GLfloat)Width/(GLfloat)Height, 1.0, 1000.0f );

glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
}

void Render()
{
glClearColor(0.7f, 0.7f, 0.9f, 1.0f );
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glLoadIdentity();

}

[此贴子已经被作者于2006-12-31 19:53:18编辑过]


=×&D o I p R e E n C g T l X&×=
2006-12-31 19:51
geng522
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2006-6-29
收藏
得分:0 

这是主要代码
有没有完整代码?谢谢

2007-01-04 17:02
huxiaochen
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-10-17
收藏
得分:0 

#include <windows.h>
#include <GL/gl.h>
#include <GL/glut.h>
#include <stdlib.h>
#include <stdio.h>

void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,1.0,1.0);
glBegin(GL_POLYGON);
// 设计自己希望的图形,我这里用的是GL_POLYGON
glEnd();

glFlush();
}
void init(void)
{
glClearColor(1.0,1.0,1.0,1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho(0.0,1.0,0.0,1.0,-1.0,1.0);
}

void winReshapeFcn(GLint newWidth,GLint newHeight)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0,GLdouble (newWidth),0.0,GLdouble (newHeight));

glClear(GL_COLOR_BUFFER_BIT);
}

void main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowPosition(100,100);
glutInitWindowSize(winWidth,winHeight);

init();
glutDisplayFunc(display);
glutReshapeFunc(winReshapeFcn);

glutMainLoop();
}


2007-01-04 17:21
快速回复:如何创建opengl窗口
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033859 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved