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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ogl_benchmark_sphere.cpp

?? 一個VC編寫的顯示地球小程序員,可隨鼠標移動轉動
?? 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 );

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品视频在线看| 一本色道久久综合亚洲aⅴ蜜桃| 一区二区三区日韩精品| 国产三区在线成人av| 精品国产青草久久久久福利| 欧美理论在线播放| 欧美日韩一级片网站| 精品视频一区 二区 三区| 欧洲一区二区av| 欧美视频精品在线观看| 欧美蜜桃一区二区三区 | 在线成人av网站| 欧美日韩国产在线观看| 欧美军同video69gay| 日韩一区二区中文字幕| 日韩精品中文字幕在线不卡尤物 | 欧美羞羞免费网站| 一本大道久久a久久综合婷婷| 91免费观看视频在线| 在线亚洲一区观看| 5858s免费视频成人| 精品欧美一区二区三区精品久久| 久久尤物电影视频在线观看| 国产人妖乱国产精品人妖| 国产精品免费av| 亚洲激情校园春色| 日本伊人色综合网| 久久99精品久久久| 国产精品一区二区久激情瑜伽| 国产不卡视频一区二区三区| 91亚洲精品久久久蜜桃| 欧美日韩一区二区电影| 精品成人一区二区三区四区| 中文字幕二三区不卡| 亚洲综合av网| 免费精品视频在线| 国产福利91精品| 在线一区二区三区做爰视频网站| 欧美精品在线观看一区二区| 欧美大片国产精品| 国产精品理论片| 亚洲成人福利片| 国产乱理伦片在线观看夜一区| 91免费视频观看| 欧美一二区视频| 亚洲视频你懂的| 六月丁香综合在线视频| 成av人片一区二区| 欧美一激情一区二区三区| 欧美韩国日本不卡| 亚洲成人av在线电影| 国产一区欧美一区| 欧美视频精品在线观看| 国产日韩欧美精品综合| 亚洲成a人片综合在线| 国产黑丝在线一区二区三区| 欧美在线观看一区二区| 国产亚洲精品久| 亚洲成年人网站在线观看| 高清国产一区二区三区| 欧美电影在线免费观看| 日本一区二区三区国色天香| 日韩av电影免费观看高清完整版| 成人看片黄a免费看在线| 欧美一级一级性生活免费录像| 中文字幕一区二区三区视频 | 日本高清视频一区二区| 精品久久久网站| 亚洲成人精品一区二区| av福利精品导航| 26uuu精品一区二区在线观看| 亚洲成人资源网| 色综合色综合色综合色综合色综合| 欧美v亚洲v综合ⅴ国产v| 亚洲国产一区二区a毛片| bt7086福利一区国产| 欧美精品一区二区高清在线观看| 亚洲成人av电影在线| 91免费小视频| 1024精品合集| 国产suv精品一区二区883| 日韩欧美在线1卡| 亚洲国产成人高清精品| 日本精品一区二区三区高清 | 一级特黄大欧美久久久| 成人永久aaa| 久久久夜色精品亚洲| 奇米精品一区二区三区四区| 欧美性大战xxxxx久久久| 亚洲欧美日韩在线| 91在线小视频| 国产精品麻豆99久久久久久| 国产精品88av| 久久久久国产精品厨房| 看片网站欧美日韩| 欧美一区2区视频在线观看| 午夜天堂影视香蕉久久| 欧美日韩亚洲综合一区二区三区| 一区二区三区四区中文字幕| 97成人超碰视| 一区二区三区在线免费| 91搞黄在线观看| 亚洲激情自拍视频| 欧美午夜影院一区| 亚洲在线观看免费视频| 欧洲在线/亚洲| 性欧美疯狂xxxxbbbb| 在线成人av网站| 蜜臀av性久久久久蜜臀aⅴ四虎 | 精品国免费一区二区三区| 另类的小说在线视频另类成人小视频在线 | 日本二三区不卡| 亚洲久草在线视频| 在线免费观看视频一区| 午夜久久久久久| 日韩一区二区三区在线| 老司机免费视频一区二区三区| 日韩精品在线看片z| 国产精品综合av一区二区国产馆| 久久久久国产精品厨房| heyzo一本久久综合| 亚洲欧美日韩国产另类专区 | 久久精品一区四区| 国产大片一区二区| 亚洲欧美中日韩| 91久久国产综合久久| 亚洲成av人片在线| 欧美成人高清电影在线| 国产91富婆露脸刺激对白| 综合电影一区二区三区| 色国产综合视频| 久久精品国产亚洲a| 日韩精品国产欧美| 日韩一级成人av| 国产成人av一区二区| 国产精品久久久久久亚洲毛片 | 国产在线不卡一区| 国产精品色哟哟网站| 色妞www精品视频| 日日夜夜一区二区| 久久精品亚洲乱码伦伦中文 | 欧美日韩国产在线观看| 老鸭窝一区二区久久精品| 国产精品欧美一级免费| 在线看不卡av| 国精产品一区一区三区mba视频| 亚洲欧美怡红院| 91精品国产品国语在线不卡| 顶级嫩模精品视频在线看| 亚洲一区成人在线| www激情久久| 欧美三级在线视频| 国产成人综合在线播放| 亚洲一级二级在线| 国产网红主播福利一区二区| 色呦呦网站一区| 国内不卡的二区三区中文字幕| 亚洲免费观看高清完整版在线观看 | 91在线视频在线| 另类中文字幕网| 亚洲综合自拍偷拍| 国产午夜精品在线观看| 欧美在线视频日韩| 粉嫩一区二区三区性色av| 亚洲一区视频在线| 中文在线资源观看网站视频免费不卡| 欧美亚洲国产一区二区三区 | 777色狠狠一区二区三区| 国产成人午夜精品影院观看视频| 亚洲国产美女搞黄色| 国产欧美日韩精品一区| 日韩一区二区电影| 在线免费观看一区| a在线播放不卡| 国产精品亚洲人在线观看| 偷窥国产亚洲免费视频| 成人免费在线播放视频| 日韩免费观看2025年上映的电影| 91麻豆精品在线观看| 高清在线不卡av| 久久成人精品无人区| 午夜一区二区三区在线观看| 亚洲视频免费在线观看| 欧美极品少妇xxxxⅹ高跟鞋 | 亚洲激情自拍偷拍| 国产精品蜜臀av| 久久久久久久久久久久久夜| 欧美一区二区三区婷婷月色| 欧美伊人精品成人久久综合97| 成人av手机在线观看| 国内精品久久久久影院一蜜桃| 日本视频免费一区| 亚洲二区视频在线| 亚洲区小说区图片区qvod| 国产欧美精品国产国产专区| 精品国产sm最大网站免费看| 日韩欧美一级二级三级久久久| 欧美精品在线视频| caoporn国产一区二区| 蜜臀av性久久久久蜜臀aⅴ|