亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ogl_benchmark_sphere.cpp

?? 一個VC編寫的顯示地球小程序員,可隨鼠標移動轉(zhuǎn)動
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//-----------------------------------------------------------------------------
//           Name: ogl_benchmark_sphere.cpp
//         Author: Kevin Harris (kevin@codesampler.com)
//  Last Modified: 02/01/05
//    Description: Renders a textured sphere using either Immediate Mode calls,
//                 Immediate Mode calls cached in a Display List, or as a 
//                 collection of geometric data stored in an interleaved 
//                 fashion within a Vertex Array.
//
//   Control Keys: Left Mouse Button - Spin the view.
//                 F1 - Decrease sphere precision.
//                 F2 - Increase sphere precision.
//                 F3 - Use Immediate mode
//                 F4 - Use a Display List
//                 F5 - Use a Vertex Array
//                 F6 - Perform Benchmarking
//                 F7 - Toggle wire-frame mode.
//-----------------------------------------------------------------------------

#define STRICT
#define WIN32_LEAN_AND_MEAN

#include <windows.h>
// Do this to access M_PI, which is not officially part of the C/C++ standard.
#define _USE_MATH_DEFINES 
#include <math.h>
#include <sys/timeb.h>
#include <iostream>
#include <io.h>
#include <fcntl.h>
using namespace std;
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glaux.h>
#include "resource.h"

//-----------------------------------------------------------------------------
// DEFINES
//-----------------------------------------------------------------------------
#define IMMEDIATE_MODE 0
#define DISPLAY_LIST   1
#define VERTEX_ARRAY   2

//-----------------------------------------------------------------------------
// GLOBALS
//-----------------------------------------------------------------------------
HDC	      g_hDC       = NULL;
HGLRC     g_hRC       = NULL;
HWND      g_hWnd      = NULL;
HINSTANCE g_hInstance = NULL;

float g_fSpinX = 0.0f;
float g_fSpinY = 0.0f;

GLuint g_textureID = 0;
GLuint g_sphereDList;

bool g_bRenderInWireFrame = false;
GLuint  g_nCurrentMode = IMMEDIATE_MODE;
GLuint  g_nPrecision  = 100;
GLuint  g_nNumSphereVertices;
GLfloat g_fMarsSpin   = 0.0f;

// A custom data structure for our interleaved vertex attributes
// The interleaved layout will be, GL_T2F_N3F_V3F
struct Vertex
{
    float tu, tv;
    float nx, ny, nz;
    float vx, vy, vz;
};

Vertex *g_pSphereVertices = NULL; // Points to Vertex Array

//-----------------------------------------------------------------------------
// PROTOTYPES
//-----------------------------------------------------------------------------
int WINAPI WinMain(HINSTANCE g_hInstance,HINSTANCE hPrevInstance, 
				   LPSTR lpCmdLine, int nCmdShow);
LRESULT CALLBACK WindowProc(HWND g_hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
void redirectIOToConsole(void);
void loadTexture(void);
void init(void);
void render(void);
void shutDown(void);
void renderSphere(float cx, float cy, float cz, float r, int n);
void createSphereDisplayList();
void createSphereGeometry( float cx, float cy, float cz, float r, int n);
void setVertData(int index,float tu, float tv, float nx, float ny, float nz, 
                 float vx, float vy, float vz);
void doBenchmark(void);

//-----------------------------------------------------------------------------
// Name: WinMain()
// Desc: The application's entry point
//-----------------------------------------------------------------------------
int WINAPI WinMain(	HINSTANCE hInstance,
					HINSTANCE hPrevInstance,
					LPSTR     lpCmdLine,
					int       nCmdShow )
{
    redirectIOToConsole();

	WNDCLASSEX winClass;
	MSG        uMsg;

    memset(&uMsg,0,sizeof(uMsg));

	winClass.lpszClassName = "MY_WINDOWS_CLASS";
	winClass.cbSize        = sizeof(WNDCLASSEX);
	winClass.style         = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
	winClass.lpfnWndProc   = WindowProc;
	winClass.hInstance     = hInstance;
    winClass.hIcon	       = LoadIcon(hInstance, (LPCTSTR)IDI_OPENGL_ICON);
    winClass.hIconSm	   = LoadIcon(hInstance, (LPCTSTR)IDI_OPENGL_ICON);
	winClass.hCursor       = LoadCursor(NULL, IDC_ARROW);
	winClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
	winClass.lpszMenuName  = NULL;
	winClass.cbClsExtra    = 0;
	winClass.cbWndExtra    = 0;
	
	if( !RegisterClassEx(&winClass) )
		return E_FAIL;

	g_hWnd = CreateWindowEx( NULL,"MY_WINDOWS_CLASS",
						    "OpenGL - Benchmark Sphere",
							WS_OVERLAPPEDWINDOW,
					 	    0,0, 640,480, NULL, NULL, g_hInstance, NULL );

	if( g_hWnd == NULL )
		return E_FAIL;

    ShowWindow( g_hWnd, nCmdShow );
    UpdateWindow( g_hWnd );

	init();

	while( uMsg.message != WM_QUIT )
	{
		if( PeekMessage( &uMsg, NULL, 0, 0, PM_REMOVE ) )
		{ 
			TranslateMessage( &uMsg );
			DispatchMessage( &uMsg );
		}
        else
		    render();
	}

	shutDown();

    UnregisterClass( "MY_WINDOWS_CLASS", g_hInstance );

	return uMsg.wParam;
}

//-----------------------------------------------------------------------------
// Name: WindowProc()
// Desc: The window's message handler
//-----------------------------------------------------------------------------
LRESULT CALLBACK WindowProc( HWND   g_hWnd, 
							 UINT   msg, 
							 WPARAM wParam, 
							 LPARAM lParam )
{
    static POINT ptLastMousePosit;
	static POINT ptCurrentMousePosit;
	static bool bMousing;
    
    switch( msg )
	{
        case WM_KEYDOWN:
		{
			switch( wParam )
			{
				case VK_ESCAPE:
					PostQuitMessage(0);
					break;

                case VK_F1:
                    if( g_nPrecision > 5 )
                        g_nPrecision -= 2;

                    if( g_nCurrentMode == DISPLAY_LIST )
                    {
                        createSphereDisplayList();
                    }

                    if( g_nCurrentMode == VERTEX_ARRAY ||
                        g_nCurrentMode == IMMEDIATE_MODE)
                    {
                        createSphereGeometry( 0.0f, 0.0f, 0.0f, 1.5f, g_nPrecision );
                    }

                    cout << "Sphere Resolution = " << g_nPrecision << endl;
                    break;

                case VK_F2:
                    if( g_nPrecision < 30000 )
                        g_nPrecision += 2;

                    if( g_nCurrentMode == DISPLAY_LIST )
                    {
                        createSphereDisplayList();
                    }

                    if( g_nCurrentMode == VERTEX_ARRAY ||
                        g_nCurrentMode == IMMEDIATE_MODE )
                    {
                        createSphereGeometry( 0.0f, 0.0f, 0.0f, 1.5f, g_nPrecision );
                    }

                    cout << "Sphere Resolution = " << g_nPrecision << endl;
                    break;

                case VK_F3:
                    g_nCurrentMode = IMMEDIATE_MODE;
                    cout << "Render Method: Immediate Mode" << endl;
                    createSphereGeometry( 0.0f, 0.0f, 0.0f, 1.5f, g_nPrecision );
                    break;

                case VK_F4:
                    g_nCurrentMode = DISPLAY_LIST;
                    createSphereDisplayList();
                    cout << "Render Method: Display List" << endl;
                    break;

                case VK_F5:
                    g_nCurrentMode = VERTEX_ARRAY;
                    createSphereGeometry( 0.0f, 0.0f, 0.0f, 1.5f, g_nPrecision );
                    cout << "Render Method: Vertex Array" << endl;
                    break;

                case VK_F6:
                    cout << endl;
                    cout << "Benchmark Initiated - Standby..." << endl;
                    doBenchmark();
                    break;

                case VK_F7:
                    g_bRenderInWireFrame = !g_bRenderInWireFrame;
                    break;
			}
		}
        break;

        case WM_LBUTTONDOWN:
		{
			ptLastMousePosit.x = ptCurrentMousePosit.x = LOWORD (lParam);
            ptLastMousePosit.y = ptCurrentMousePosit.y = HIWORD (lParam);
			bMousing = true;
		}
		break;

		case WM_LBUTTONUP:
		{
			bMousing = false;
		}
		break;

		case WM_MOUSEMOVE:
		{
			ptCurrentMousePosit.x = LOWORD (lParam);
			ptCurrentMousePosit.y = HIWORD (lParam);

			if( bMousing )
			{
				g_fSpinX -= (ptCurrentMousePosit.x - ptLastMousePosit.x);
				g_fSpinY -= (ptCurrentMousePosit.y - ptLastMousePosit.y);
			}
			
			ptLastMousePosit.x = ptCurrentMousePosit.x;
            ptLastMousePosit.y = ptCurrentMousePosit.y;
		}
		break;

		case WM_CLOSE:
		{
			PostQuitMessage(0);	
		}

        case WM_DESTROY:
		{
            PostQuitMessage(0);
		}
        break;
		
		default:
		{
			return DefWindowProc( g_hWnd, msg, wParam, lParam );
		}
		break;
	}

	return 0;
}

//-----------------------------------------------------------------------------
// Name: redirectIOToConsole()
// Desc: 
//-----------------------------------------------------------------------------
void redirectIOToConsole( void )
{
    // Allocate a console so we can output some useful information.
    AllocConsole();

    // Get the handle for STDOUT's file system.
    HANDLE stdOutputHandle = GetStdHandle( STD_OUTPUT_HANDLE );

    // Redirect STDOUT to the new console by associating STDOUT's file 
    // descriptor with an existing operating-system file handle.
    int hConsoleHandle = _open_osfhandle( (intptr_t)stdOutputHandle, _O_TEXT );
    FILE *pFile = _fdopen( hConsoleHandle, "w" );
    *stdout = *pFile;
    setvbuf( stdout, NULL, _IONBF, 0 );

    // This call ensures that iostream and C run-time library operations occur  
    // in the order that they appear in source code.
    ios::sync_with_stdio();
}

//-----------------------------------------------------------------------------
// Name: loadTexture()
// Desc: 
//-----------------------------------------------------------------------------
void loadTexture( void )	
{
    AUX_RGBImageRec *pTextureImage = auxDIBImageLoad( ".\\mars.bmp" );

    if( pTextureImage != NULL )
    {
        glGenTextures( 1, &g_textureID );

        glBindTexture( GL_TEXTURE_2D, g_textureID );

        glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR );
        glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR );

        glTexImage2D( GL_TEXTURE_2D, 0, 3, pTextureImage->sizeX, pTextureImage->sizeY, 0,
            GL_RGB, GL_UNSIGNED_BYTE, pTextureImage->data );
    }

    if( pTextureImage )
    {
        if( pTextureImage->data )
            free( pTextureImage->data );

        free( pTextureImage );
    }
}

//-----------------------------------------------------------------------------
// Name: init()
// Desc: 
//-----------------------------------------------------------------------------
void init( void )
{
	GLuint PixelFormat;

	PIXELFORMATDESCRIPTOR pfd;
	memset(&pfd, 0, 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 = 16;
    pfd.cDepthBits = 16;
	
	g_hDC = GetDC( g_hWnd );
	PixelFormat = ChoosePixelFormat( g_hDC, &pfd );
	SetPixelFormat( g_hDC, PixelFormat, &pfd );
	g_hRC = wglCreateContext( g_hDC );
	wglMakeCurrent( g_hDC, g_hRC );

	glClearColor( 0.0f, 0.0f, 0.0f, 1.0f );

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久免费视频.com| 亚洲国产精品自拍| 久久综合九色综合97_久久久| 91精品国产综合久久福利| 91精品国产福利在线观看| 亚洲国产日韩综合久久精品| 欧美少妇bbb| 久久你懂得1024| 夜夜嗨av一区二区三区中文字幕| 日本不卡一区二区| 一区二区三区在线观看欧美| 色婷婷综合久久久久中文一区二区| 欧美老女人第四色| 中文字幕一区二区三区不卡 | 国产成人h网站| 欧美人狂配大交3d怪物一区| 国产精品私人自拍| 日韩精品免费视频人成| 91视频观看免费| 国产欧美1区2区3区| 免费的国产精品| 久久先锋资源网| 97久久超碰国产精品| 亚洲午夜在线视频| 久久久久久久综合色一本| 国产精品一区二区你懂的| 91精选在线观看| 一区二区三区国产精品| 欧美丰满少妇xxxxx高潮对白| 另类小说图片综合网| 欧洲亚洲国产日韩| 国产精品美女久久久久久久久 | 综合激情成人伊人| 免费成人在线视频观看| 欧美草草影院在线视频| 亚洲国产精品人人做人人爽| 欧美一级免费大片| 亚洲精品欧美激情| 99精品一区二区| 亚洲成人免费在线| 欧美老肥妇做.爰bbww| 国内精品嫩模私拍在线| 日韩精品一区在线| 另类中文字幕网| 一区二区三区资源| 久久综合色8888| 欧美日韩精品一区二区三区四区 | 99久久免费国产| 男人的j进女人的j一区| 亚洲视频 欧洲视频| 日韩制服丝袜av| 日韩精品综合一本久道在线视频| 精品卡一卡二卡三卡四在线| 国产成人精品亚洲777人妖| 亚洲高清视频中文字幕| 国产精品三级电影| 精品不卡在线视频| 老司机一区二区| 亚洲精品欧美专区| 国产精品福利在线播放| av电影在线不卡| 日韩理论片中文av| 久久久国产午夜精品| 91精品国产综合久久香蕉麻豆| 99国产精品久久久久| 久久99精品久久久久婷婷| 日本一区二区视频在线| 欧美大度的电影原声| 欧美丰满少妇xxxxx高潮对白| 色天天综合色天天久久| av资源网一区| 粉嫩绯色av一区二区在线观看| 国产精品女人毛片| 久久一区二区视频| 丰满放荡岳乱妇91ww| 午夜亚洲国产au精品一区二区| 国产精品久久久久永久免费观看| 9191国产精品| 精品污污网站免费看| 久久精品国产亚洲高清剧情介绍| 一区二区三区四区乱视频| 亚洲特黄一级片| 亚洲日本在线天堂| **性色生活片久久毛片| 1024成人网| 亚洲欧美国产77777| 91精品国产91热久久久做人人 | 亚洲1区2区3区4区| 亚洲愉拍自拍另类高清精品| 欧美一区二区三区视频| 欧美巨大另类极品videosbest | 国产午夜一区二区三区| 欧美主播一区二区三区美女| 色综合天天综合色综合av| 久久99久久久久久久久久久| 99精品久久只有精品| 欧美日韩精品一区二区三区 | 一区二区三区日韩精品视频| 亚洲日本va午夜在线影院| 亚洲图片欧美激情| 一区二区三区电影在线播| 一区二区免费视频| 五月天中文字幕一区二区| 免费三级欧美电影| 国产真实乱子伦精品视频| 成人黄色小视频| 日韩成人一区二区| 久热成人在线视频| 成人午夜av影视| 久久国产三级精品| 国产成人免费xxxxxxxx| 91视频观看免费| 欧美精品乱码久久久久久按摩| 精品日韩一区二区三区免费视频| 精品处破学生在线二十三| 国产精品三级视频| 天涯成人国产亚洲精品一区av| 久99久精品视频免费观看| 久久99国产精品尤物| 日韩高清电影一区| 精品国偷自产国产一区| 国产精品视频线看| 亚洲伊人伊色伊影伊综合网| 看电影不卡的网站| 一本色道综合亚洲| 欧美大片拔萝卜| 日韩毛片在线免费观看| 麻豆国产欧美日韩综合精品二区| 亚洲午夜三级在线| 国产一区二区三区av电影| 激情六月婷婷综合| 91女人视频在线观看| 91精品国产综合久久久久久| 中文字幕日本不卡| 久久福利视频一区二区| 欧美在线小视频| 欧美国产亚洲另类动漫| 亚洲国产精品v| 手机精品视频在线观看| 成人av免费在线观看| 欧美一区二区三区喷汁尤物| 亚洲成精国产精品女| 国产剧情一区在线| 欧美人成免费网站| 亚洲日本一区二区| 欧美夫妻性生活| 久久99日本精品| 在线亚洲精品福利网址导航| 5858s免费视频成人| 国产精品久久久久久久久晋中| 蜜桃视频一区二区| 69精品人人人人| 亚洲成人手机在线| 在线这里只有精品| 欧美日韩一二三区| 国产精品国产馆在线真实露脸 | 亚洲精品国产精华液| 国产在线精品视频| 日韩视频一区二区| 日本不卡在线视频| 欧美日韩成人在线一区| 亚洲精品大片www| 一本色道亚洲精品aⅴ| 日韩理论片网站| 色综合天天综合在线视频| 自拍视频在线观看一区二区| 国产91丝袜在线播放0| 国产亚洲女人久久久久毛片| 国产一区二区伦理| 精品1区2区在线观看| 国产农村妇女毛片精品久久麻豆| 欧美一区二区三区四区在线观看| 亚洲人成在线观看一区二区| 国产精品视频观看| 国产精品一区在线观看你懂的| 日韩午夜在线观看| 久久精品国产第一区二区三区| 欧美一区二区三区在线观看视频| 日韩国产一二三区| 日韩一二在线观看| 国产在线视频一区二区| 久久久蜜臀国产一区二区| 国产suv精品一区二区6| 国产精品入口麻豆九色| 91伊人久久大香线蕉| 亚洲激情成人在线| 精品视频一区 二区 三区| 日韩av在线发布| 日韩女优电影在线观看| 国产一区二区三区美女| 国产精品免费看片| 一本大道久久a久久精二百| 亚洲激情av在线| 91精品国产91久久综合桃花| 麻豆精品国产91久久久久久| 国产亚洲一区二区三区| 91香蕉视频在线| 日韩—二三区免费观看av| 欧美r级电影在线观看| 成人中文字幕在线|