自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(0)
  • 资源 (6)
  • 论坛 (162)
  • 收藏
  • 关注

空空如也

OpenGL超级宝典

本书是OpenGL编程指南,涵盖了使用新版本的OpenGL进行编程所需要的主要知识。 全书分3个部分,共23章,另有3个附录。第一部介绍经典OpenGL绘图的所有基础知识,包括3D图形和OpenGL简介, OpenGL空间绘图,几何转换,颜色、材料和光照,纹理贴图,曲线和表面,管线,交互式图形等内容。第二部分是着重介绍OpenGL的一些高级功能。第三部分别介绍了不同操作系统平台上的OpenGL功能特性和编程细节。 本书适合于希望精通OpenGL以便对他们的图形编程和3D图形知识进行扩展的程序员,也可以帮助那些经验丰富的OpenGL程序员学习如何移植自己的应用程序。本书既可以作为学习OpenGL的教材,也可以作为随时查阅的参考手册。

2010-04-18

3D魔方 C++代码

部分代码: // FScreen.c // OpenGL SuperBible, Chapter 17 // Program by Richard S. Wright Jr. // This program shows a how to create a full screen // window and render into it with OpenGL. #include <windows.h> #include <winuser.h> #include <gl\gl.h> #include <gl\glu.h> #include <math.h> #include <iostream.h> #include "cubemanage.h" #include "wcgcube.h" static GLfloat PI=3.1415f; // Rotation amounts static GLfloat xRot = 0.0f; static GLfloat yRot = 0.0f; static GLfloat rotate=0.0f; static int rotateType=0; static int rotateOK=0; static int rotateRate=100; static GLfloat rotateStep=5*PI/180; CubeManage cm; HPALETTE hPalette = NULL; // Keep track of windows changing width and height GLfloat windowWidth; GLfloat windowHeight; static LPCTSTR lpszAppName = "WcgCube"; void exitGame(HWND hWnd,HDC hDC,HGLRC hRC); // Declaration for Window procedure LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); // Set Pixel Format function - forward declaration void SetDCPixelFormat(HDC hDC); void ChangeSize(GLsizei w, GLsizei h) { GLfloat nRange = 350.0f; // Prevent a divide by zero if(h == 0) h = 1; // Set Viewport to window dimensions glViewport(0, 0, w, h); // Reset coordinate system glMatrixMode(GL_PROJECTION); glLoadIdentity(); // Establish clipping volume (left, right, bottom, top, near, far) if (w <= h) glOrtho (-nRange, nRange, -nRange*h/w, nRange*h/w, -nRange, nRange); else glOrtho (-nRange*w/h, nRange*w/h, -nRange, nRange, -nRange, nRange); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } // Called by timer routine to effect movement of the rectangle. void IdleFunction(void) { if (rotate>=PI/2) { cm.turn(rotateType); rotateType=0; rotateOK=0; rotate=0.0f; // Refresh the Window // glutPostRedisplay(); return; } rotate+=rotateStep; // Refresh the Window // glutPostRedisplay(); } // Called by AUX library to draw scene void RenderScene(void) { // Clear the window with current clearing color glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glRotatef(xRot, 1.0f, 0.0f, 0.0f); glRotatef(yRot, 0.0f, 1.0f, 0.0f); cm.draw(rotateType,rotate); glPopMatrix(); // Show the graphics // glutSwapBuffers(); } // If necessary, creates a 3-3-2 palette for the device context listed. HPALETTE GetOpenGLPalette(HDC hDC) { HPALETTE hRetPal = NULL; // Handle to palette to be created PIXELFORMATDESCRIPTOR pfd; // Pixel Format Descriptor LOGPALETTE *pPal; // Pointer to memory for logical palette int nPixelFormat; // Pixel format index int nColors; // Number of entries in palette int i; // Counting variable BYTE RedRange,GreenRange,BlueRange; // Range for each color entry (7,7,and 3) // Get the pixel format index and retrieve the pixel format description nPixelFormat = GetPixelFormat(hDC); DescribePixelFormat(hDC, nPixelFormat, sizeof(PIXELFORMATDESCRIPTOR), &pfd); // Does this pixel format require a palette? If not, do not create a // palette and just return NULL if(!(pfd.dwFlags & PFD_NEED_PALETTE)) return NULL; // Number of entries in palette. 8 bits yeilds 256 entries nColors = 1 << pfd.cColorBits; // Allocate space for a logical palette structure plus all the palette entries pPal = (LOGPALETTE*)malloc(sizeof(LOGPALETTE) +nColors*sizeof(PALETTEENTRY)); // Fill in palette header pPal->palVersion = 0x300; // Windows 3.0 pPal->palNumEntries = nColors; // table size // Build mask of all 1's. This creates a number represented by having // the low order x bits set, where x = pfd.cRedBits, pfd.cGreenBits, and // pfd.cBlueBits. RedRange = (1 << pfd.cRedBits) -1; GreenRange = (1 << pfd.cGreenBits) - 1; BlueRange = (1 << pfd.cBlueBits) -1; // Loop through all the palette entries for(i = 0; i < nColors; i++) { // Fill in the 8-bit equivalents for each component pPal->palPalEntry[i].peRed = (i >> pfd.cRedShift) & RedRange; pPal->palPalEntry[i].peRed = (unsigned char)( (double) pPal->palPalEntry[i].peRed * 255.0 / RedRange); pPal->palPalEntry[i].peGreen = (i >> pfd.cGreenShift) & GreenRange; pPal->palPalEntry[i].peGreen = (unsigned char)( (double)pPal->palPalEntry[i].peGreen * 255.0 / GreenRange); pPal->palPalEntry[i].peBlue = (i >> pfd.cBlueShift) & BlueRange; pPal->palPalEntry[i].peBlue = (unsigned char)( (double)pPal->palPalEntry[i].peBlue * 255.0 / BlueRange); pPal->palPalEntry[i].peFlags = (unsigned char) NULL; } // Create the palette hRetPal = CreatePalette(pPal); // Go ahead and select and realize the palette for this device context SelectPalette(hDC,hRetPal,FALSE); RealizePalette(hDC); // Free the memory used for the logical palette structure free(pPal); // Return the handle to the new palette return hRetPal; } // Select the pixel format for a given device context void SetDCPixelFormat(HDC hDC) { int nPixelFormat; static PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), // Size of this structure 1, // Version of this structure PFD_DRAW_TO_WINDOW | // Draw to Window (not to bitmap) PFD_SUPPORT_OPENGL | // Support OpenGL calls in window PFD_DOUBLEBUFFER, // Double buffered mode PFD_TYPE_RGBA, // RGBA Color mode 32, // Want 32 bit color 0,0,0,0,0,0, // Not used to select mode 0,0, // Not used to select mode 0,0,0,0,0, // Not used to select mode 16, // Size of depth buffer 0, // Not used to select mode 0, // Not used to select mode 0, // Not used to select mode 0, // Not used to select mode 0,0,0 }; // Not used to select mode // Choose a pixel format that best matches that described in pfd nPixelFormat = ChoosePixelFormat(hDC, &pfd); // Set the pixel format for the device context SetPixelFormat(hDC, nPixelFormat, &pfd); } void dealKey(HWND hWnd,HDC hDC,HGLRC hRC,int wParam) { switch (wParam) { case 27: exitGame(hWnd,hDC,hRC); break; case 113: //q if (rotateOK==1) return; rotateType=1; rotateOK=1; rotate=0.0f; break; case 119: //w if (rotateOK==1) return; rotateType=2; rotateOK=1; rotate=0.0f; break; case 101: //e if (rotateOK==1) return; rotateType=3; rotateOK=1; rotate=0.0f; break; case 114: //r if (rotateOK==1) return; rotateType=4; rotateOK=1; rotate=0.0f; break; case 116: //t if (rotateOK==1) return; rotateType=5; rotateOK=1; rotate=0.0f; break; case 121: //y if (rotateOK==1) return; rotateType=6; rotateOK=1; rotate=0.0f; break; case 97: //a if (rotateOK==1) return; rotateType=7; rotateOK=1; rotate=0.0f; break; case 115: //s if (rotateOK==1) return; rotateType=8; rotateOK=1; rotate=0.0f; break; case 100: //d if (rotateOK==1) return; rotateType=9; rotateOK=1; rotate=0.0f; break; case 102: //f if (rotateOK==1) return; rotateType=10; rotateOK=1; rotate=0.0f; break; case 103: //g if (rotateOK==1) return; rotateType=11; rotateOK=1; rotate=0.0f; break; case 104: //h if (rotateOK==1) return; rotateType=12; rotateOK=1; rotate=0.0f; break; case VK_UP: xRot-= 5.0f; break; case VK_DOWN: xRot += 5.0f; break; case VK_LEFT: yRot -= 5.0f; break; case VK_RIGHT: yRot += 5.0f; break; } if(xRot > 356.0f) xRot = 0.0f; if(xRot < -1.0f) xRot = 355.0f; if(yRot > 356.0f) yRot = 0.0f; if(yRot < -1.0f) yRot = 355.0f; } void exitGame(HWND hWnd,HDC hDC,HGLRC hRC) { // Kill the timer that we created KillTimer(hWnd,101); // Deselect the current rendering context and delete it wglMakeCurrent(hDC,NULL); wglDeleteContext(hRC); // Delete the palette if(hPalette != NULL) DeleteObject(hPalette); // Tell the application to terminate after the window // is gone. PostQuitMessage(0); } // Entry point of all Windows programs int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; // Windows message structure WNDCLASS wc; // Windows class structure HWND hWnd; // Storeage for window handle HWND hDesktopWnd;// Storeage for desktop window handle HDC hDesktopDC; // Storeage for desktop window device context int nScreenX, nScreenY; // Screen Dimensions // Register Window style wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; wc.lpfnWndProc = (WNDPROC) WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = NULL; wc.hCursor = LoadCursor(NULL, IDC_ARROW); // No need for background brush for OpenGL window wc.hbrBackground = NULL; wc.lpszMenuName = NULL; wc.lpszClassName = lpszAppName; // Register the window class if(RegisterClass(&wc) == 0) return FALSE; // Get he Window handle and Device context to the desktop hDesktopWnd = GetDesktopWindow(); hDesktopDC = GetDC(hDesktopWnd); // Get the screen size nScreenX = GetDeviceCaps(hDesktopDC, HORZRES); nScreenY = GetDeviceCaps(hDesktopDC, VERTRES); // Release the desktop device context ReleaseDC(hDesktopWnd, hDesktopDC); // Create the main application window hWnd = CreateWindow( lpszAppName, lpszAppName, // OpenGL requires WS_CLIPCHILDREN and WS_CLIPSIBLINGS WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, // Window position and size 0, 0, nScreenX, nScreenY, NULL, NULL, hInstance, NULL); // If window was not created, quit if(hWnd == NULL) return FALSE; // Display the window ShowWindow(hWnd,SW_SHOW); UpdateWindow(hWnd); // Process application messages until the application closes while( GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } // Window procedure, handles all messages for this program LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static HGLRC hRC; // Permenant Rendering context static HDC hDC; // Private GDI Device context switch (message) { // Window creation, setup for OpenGL case WM_CREATE: // Store the device context hDC = GetDC(hWnd); // Select the pixel format SetDCPixelFormat(hDC); // Create the rendering context and make it current hRC = wglCreateContext(hDC); wglMakeCurrent(hDC, hRC); // Create the palette hPalette = GetOpenGLPalette(hDC); // Black background glClearColor(0.0f, 0.0f, 0.0f, 1.0f ); glEnable(GL_DEPTH_TEST); // glEnable(GL_DITHER); glShadeModel(GL_SMOOTH); // Create a timer that fires 30 times a second SetTimer(hWnd,33,1,NULL); break; // Window is being destroyed, cleanup case WM_DESTROY: exitGame(hWnd,hDC,hRC); break; case WM_KEYDOWN: dealKey(hWnd,hDC,hRC,wParam); InvalidateRect(hWnd,NULL,FALSE); break; case WM_CHAR: dealKey(hWnd,hDC,hRC,wParam); InvalidateRect(hWnd,NULL,FALSE); break; // Window is resized. case WM_SIZE: // Call our function which modifies the clipping // volume and viewport ChangeSize(LOWORD(lParam), HIWORD(lParam)); break; // Timer, moves and bounces the rectangle, simply calls // our previous OnIdle function, then invalidates the // window so it will be redrawn. case WM_TIMER: { IdleFunction(); InvalidateRect(hWnd,NULL,FALSE); } break; // The painting function. This message sent by Windows // whenever the screen needs updating. case WM_PAINT: { // Call OpenGL drawing code RenderScene(); // Call function to swap the buffers SwapBuffers(hDC); // Validate the newly painted client area ValidateRect(hWnd,NULL); } break; // Windows is telling the application that it may modify // the system palette. This message in essance asks the // application for a new palette. case WM_QUERYNEWPALETTE: // If the palette was created. if(hPalette) { int nRet; // Selects the palette into the current device context SelectPalette(hDC, hPalette, FALSE); // Map entries from the currently selected palette to // the system palette. The return value is the number // of palette entries modified. nRet = RealizePalette(hDC); // Repaint, forces remap of palette in current window InvalidateRect(hWnd,NULL,FALSE); return nRet; } break; // This window may set the palette, even though it is not the // currently active window. case WM_PALETTECHANGED: // Don't do anything if the palette does not exist, or if // this is the window that changed the palette. if((hPalette != NULL) && ((HWND)wParam != hWnd)) { // Select the palette into the device context SelectPalette(hDC,hPalette,FALSE); // Map entries to system palette RealizePalette(hDC); // Remap the current colors to the newly realized palette UpdateColors(hDC); return 0; } break; default: // Passes it on if unproccessed return (DefWindowProc(hWnd, message, wParam, lParam)); } return (0L); }

2010-04-18

英中术语对照.docx

部分内容: 英中术语对照 我喜欢「式」: constructor 建构式 declaration 宣告式 definition 定义式 destructor 解构式 expression 算式(运算式) function 函式 pattern 范式、模式、样式 program 程式 signature 标记式

2010-04-18

VC下OpenGL配置以及glut配置.docx

VC下OpenGL配置以及glut配置 http://blog.sina.com.cn/s/blog_3f782db70100d8si.html?retcode=0 OpenGL官方网站(英文) http://www.opengl.org 下面我将对Windows下的OpenGL编程进行简单介绍。 第一步:选择一个编译环境 现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL的。但这里我们选择VC++ 6.0作为学习OpenGL的环境。 第二步:....

2010-04-18

OpenGL+VC-VB+图形编程.rar

OpenGL+VC-VB+图形编程 OpenGL+VC-VB+图形编程

2010-04-18

NeHe OpenGL教程.rar

[教程说明] 整个教程由nehe制作 课程内容由dancingwind(周炜)以及gamedev和csdn的志愿者翻译 最早的翻译应该是由CKER完成的(1~12章) 注:本教程经dancingwind授权发布于imyaker.com dancingwind获得Nehe授权

2010-04-19

怎样在C语言中动态显示时间

发表于 2008-10-30 最后回复 2020-06-26

word中,“样式基准”和“后续段落样式”对样式设置有什么影响?

发表于 2010-06-05 最后回复 2020-05-22

C++中的“对象”概念实质是什么呢?

发表于 2010-01-26 最后回复 2019-08-19

光盘不能读取怎么办

发表于 2014-05-10 最后回复 2014-05-11

Matlab分段积分问题函数调用出现运行错误

发表于 2014-05-08 最后回复 2014-05-09

Matlab求救!!!分段函数积分问题

发表于 2014-05-04 最后回复 2014-05-04

类的组合怎么用

发表于 2010-05-14 最后回复 2012-12-05

谁来拯救我的资源管理器

发表于 2010-05-15 最后回复 2012-11-23

为什么地址栏里敲入"\"(不含双引号)能直接进入C盘?

发表于 2009-01-01 最后回复 2012-11-23

重装系统对机器有无损伤?

发表于 2009-01-04 最后回复 2012-11-23

Win+F1键不好使

发表于 2009-03-04 最后回复 2012-11-23

如何进行系统还原

发表于 2009-03-14 最后回复 2012-11-23

谁来翻译一下,单词似乎你都认识...

发表于 2009-03-19 最后回复 2012-11-23

关于系统还原

发表于 2009-03-23 最后回复 2012-11-23

关于系统还原

发表于 2009-03-23 最后回复 2012-11-23

怎么开启系统还原功能呢

发表于 2009-03-24 最后回复 2012-11-23

怎么用DOS命令获得局域网其他主机IP?

发表于 2009-03-31 最后回复 2012-11-23

左下角上网e图标不见了,怎么找回?

发表于 2009-04-01 最后回复 2012-11-23

优酷上看视,频是缓冲到硬盘上吗

发表于 2009-04-01 最后回复 2012-11-23

能上网却qq登不上去,大虾支招

发表于 2010-10-01 最后回复 2012-11-23

左下角“显示桌面”没了

发表于 2009-06-08 最后回复 2012-11-23

左下角快速启动栏不好使了

发表于 2009-06-09 最后回复 2012-11-23

左下角快速启动栏不好使了

发表于 2009-06-09 最后回复 2012-11-23

这个错误是什么意思? 关于 'graphics.h'

发表于 2008-10-26 最后回复 2012-03-03

关于OpenGL

发表于 2010-04-16 最后回复 2012-02-29

********OpenGL,图形显示不出来,怎么回事************

发表于 2010-06-16 最后回复 2011-12-04

gl\glut.h文件哪里下载?

发表于 2010-05-27 最后回复 2011-11-25

这个错误是什么意思?VC++调试错误2

发表于 2010-05-26 最后回复 2011-10-04

不装杀毒软件电脑会有多大的危险?

发表于 2010-05-27 最后回复 2011-09-27

考研——信心?

发表于 2008-10-03 最后回复 2011-09-05

这个错误提示是什么意思?VC++

发表于 2010-06-02 最后回复 2011-08-26

那位大侠,能帮个忙?毕设出现点问题...OpenGL,MFC

发表于 2010-05-31 最后回复 2011-08-26

OpenGL默认屏幕坐标系原点在哪?

发表于 2010-05-22 最后回复 2011-04-29

OpenGL画球问题,大虾支招

发表于 2010-05-10 最后回复 2011-03-11

word文件里如何保留自己安装的字体

发表于 2010-02-08 最后回复 2011-03-10

大家来看看这个配置

发表于 2011-01-23 最后回复 2011-02-21

想把笔记本整个硬盘格式化了,怎么办呢?

发表于 2011-02-13 最后回复 2011-02-16

高手帮忙,看看这个台式机配置怎么样

发表于 2011-01-22 最后回复 2011-01-22

这个配置家用怎么样?

发表于 2011-01-21 最后回复 2011-01-22

这个配置电脑最大能用哪些软件?

发表于 2011-01-20 最后回复 2011-01-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除