VC .NETOpenGL编程快速入门(6)
2008-04-09 04:09:13来源:互联网 阅读 ()
// 创建和显示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
hInst = hInstance; // 将实例句柄存储在全局变量中
CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if ( !g_hWnd )
{
return FALSE;
}
OnCreated();
ShowWindow( g_hWnd, nCmdShow );
UpdateWindow( g_hWnd);
return TRUE;
}
//
// 函数:WndProc(HWND, unsigned, WORD, LONG)
//
// 目的:处理主窗口的消息。
//
// WM_COMMAND - 处理应用程序菜单
// WM_PAINT - 绘制主窗口
// WM_DESTROY - 发送退出消息并返回
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
switch (message)
{
case WM_CREATE:
OnCreate( hWnd );
break;
case WM_KEYDOWN:
g_bStartSwap = !g_bStartSwap;
break;
case WM_MOVE:
SetWindowText( g_hWnd, "Move" );
break;
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 分析菜单选择:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_SIZE:
SetProjMatrix( LOWORD( lParam ), HIWORD( lParam ) );
break;
case WM_DESTROY:
OnDestroy();
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
// “关于”框的消息处理程序。
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}
void OnCreate( HWND hWnd )
{
g_hWnd = hWnd;
}
void OnDestroy( void )
{
ReleaseDC( g_hWnd, g_hDC );
wglDeleteContext( g_glRes );
}
void OnCreated( void )
{
g_hDC = GetDC( g_hWnd );
PIXELFORMATDESCRIPTOR pfd;
ZeroMemory( &pfd, sizeof(PIXELFORMATDESCRIPTOR) );
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR );
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 24;
pfd.cDepthBits = 32;
SetPixelFormat( g_hDC, ChoosePixelFormat( g_hDC, &pfd ), &pfd );
g_glRes = wglCreateContext( g_hDC );
wglMakeCurrent( g_hDC, g_glRes );
glEnable( GL_CULL_FACE );
glCullFace( GL_BACK );
glEnable( GL_DEPTH_TEST );
glDepthFunc( GL_LEQUAL );
int LightPos[] = { 50, 50, 10, 1 };
float LightColor[] = { 0.3f, 0.3f, 0.3f, 1.0f };
glEnable(GL_LIGHTING);
glLightiv( GL_LIGHT0, GL_POSITION, LightPos );
glLightfv( GL_LIGHT0, GL_AMBIENT, LightColor );
glLightfv( GL_LIGHT0, GL_DIFFUSE, LightColor );
glEnable( GL_LIGHT0 );
glEnable( GL_COLOR_MATERIAL );
glColorMaterial( GL_FRONT, GL_AMBIENT_AND_DIFFUSE );
glShadeModel( GL_SMOOTH );
glClearColor( 255.0f / 255.0f, 255.0f / 255.0f, 200.0f / 255.0f, 0.0 );
for ( int i = 0; i < 36; i )
{
MoveMemory( &nTempBox[ i * 3 ], &nSrcBox[ byIndex[i] * 3 ], sizeof(nTempBox[0]) * 3 );
}
for ( int i = 0; i < 12; i )
{
CalcNormal( &nTempBox[ i * 9 ], &fNormal[ i * 9 ] );
MoveMemory( &fNormal[ i * 9 3 ], &fNormal[ i * 9 ], sizeof(fNormal[0]) * 3 );
MoveMemory( &fNormal[ i * 9 6 ], &fNormal[ i * 9 ], sizeof(fNormal[0]) * 3 );
}
glEnableClientState( GL_VERTEX_ARRAY );
glVertexPointer( 3, GL_SHORT, 0, nTempBox );
glEnableClientState( GL_NORMAL_ARRAY );
glNormalPointer( GL_FLOAT, 0, fNormal );
glColor3ub( 140, 200, 255 );
}
void OnDraw( void )
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glDrawArrays( GL_TRIANGLES, 0, 36 );
SwapBuffers( g_hDC );
}
void SetModalMatrix( void )
{
glMatrixMode( GL_MODELVIEW );
glLoadIdentity( );
static float fRadius = 0;
fRadius = 0.01f;
if ( fRadius > M_PI * 2 )
{
fRadius = 0;
}
gluLookAt( cosf( fRadius ) * 30, sinf( fRadius ) * 30, 15.0,
0.0, 0.0, 0.0,
0.0, 0.0, 1.0 );
}
void SetProjMatrix( WORD wWidth, WORD wHeight )
{
glViewport( 0, 0, wWidth, wHeight );
glMatrixMode( GL_PROJECTION );
glLoadIdentity( );
gluPerspective( 45.0, (double)wWidth / (double)wHeight, 1.0, 1000.0 );
}
void OnIdle( void )
{
SetModalMatrix();
OnDraw();
}
现在已经达到我们想要的效果了。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:VisualC 编程封装ADO类
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
