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

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

?? lesson15.cpp

?? 關于OpenGL的實例教程源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*
 *		This Code Was Created By Jeff Molofee 2000
 *		A HUGE Thanks To Fredric Echols For Cleaning Up
 *		And Optimizing The Base Code, Making It More Flexible!
 *		If You've Found This Code Useful, Please Let Me Know.
 *		Visit My Site At nehe.gamedev.net
 */

#include <windows.h>		// Header File For Windows
#include <math.h>			// Header File For Math Library
#include <stdio.h>			// Header File For Standard Input/Output
#include <gl\gl.h>			// Header File For The OpenGL32 Library
#include <gl\glu.h>			// Header File For The GLu32 Library
#include <gl\glaux.h>		// Header File For The Glaux Library

HDC			hDC=NULL;		// Private GDI Device Context
HGLRC		hRC=NULL;		// Permanent Rendering Context
HWND		hWnd=NULL;		// Holds Our Window Handle
HINSTANCE	hInstance;		// Holds The Instance Of The Application

bool	keys[256];			// Array Used For The Keyboard Routine
bool	active=TRUE;		// Window Active Flag Set To TRUE By Default
bool	fullscreen=TRUE;	// Fullscreen Flag Set To Fullscreen Mode By Default

GLuint	texture[1];			// One Texture Map
GLuint	base;				// Base Display List For The Font Set

GLfloat	rot;				// Used To Rotate The Text

LRESULT	CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);	// Declaration For WndProc

GLvoid BuildFont(GLvoid)								// Build Our Bitmap Font
{
	GLYPHMETRICSFLOAT	gmf[256];						// Address Buffer For Font Storage
	HFONT	font;										// Windows Font ID

	base = glGenLists(256);								// Storage For 256 Characters

	font = CreateFont(	-12,							// Height Of Font
						0,								// Width Of Font
						0,								// Angle Of Escapement
						0,								// Orientation Angle
						FW_BOLD,						// Font Weight
						FALSE,							// Italic
						FALSE,							// Underline
						FALSE,							// Strikeout
						SYMBOL_CHARSET,					// Character Set Identifier
						OUT_TT_PRECIS,					// Output Precision
						CLIP_DEFAULT_PRECIS,			// Clipping Precision
						ANTIALIASED_QUALITY,			// Output Quality
						FF_DONTCARE|DEFAULT_PITCH,		// Family And Pitch
						"Wingdings");					// Font Name

	SelectObject(hDC, font);							// Selects The Font We Created

	wglUseFontOutlines(	hDC,							// Select The Current DC
						0,								// Starting Character
						255,							// Number Of Display Lists To Build
						base,							// Starting Display Lists
						0.1f,							// Deviation From The True Outlines
						0.2f,							// Font Thickness In The Z Direction
						WGL_FONT_POLYGONS,				// Use Polygons, Not Lines
						gmf);							// Address Of Buffer To Recieve Data
}

GLvoid KillFont(GLvoid)									// Delete The Font
{
  glDeleteLists(base, 256);								// Delete All 256 Characters
}

GLvoid glPrint(char *text)								// Custom GL "Print" Routine
{
  if (text == NULL)										// If There's No Text
    return;												// Do Nothing

  glPushAttrib(GL_LIST_BIT);							// Pushes The Display List Bits
    glListBase(base);									// Sets The Base Character to 32
    glCallLists(strlen(text), GL_UNSIGNED_BYTE, text);	// Draws The Display List Text
  glPopAttrib();										// Pops The Display List Bits
}

AUX_RGBImageRec *LoadBMP(char *Filename)				// Loads A Bitmap Image
{
	FILE *File=NULL;									// File Handle

	if (!Filename)										// Make Sure A Filename Was Given
	{
		return NULL;									// If Not Return NULL
	}

	File=fopen(Filename,"r");							// Check To See If The File Exists

	if (File)											// Does The File Exist?
	{
		fclose(File);									// Close The Handle
		return auxDIBImageLoad(Filename);				// Load The Bitmap And Return A Pointer
	}

	return NULL;										// If Load Failed Return NULL
}

int LoadGLTextures()									// Load Bitmaps And Convert To Textures
{
	int Status=FALSE;									// Status Indicator

	AUX_RGBImageRec *TextureImage[1];					// Create Storage Space For The Texture

	memset(TextureImage,0,sizeof(void *)*1);           	// Set The Pointer To NULL

	// Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit
	if (TextureImage[0]=LoadBMP("Data/Lights.bmp"))
	{
		Status=TRUE;									// Set The Status To TRUE

		glGenTextures(1, &texture[0]);					// Create The Texture

		glBindTexture(GL_TEXTURE_2D, texture[0]);
		gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
		glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
		glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
		glEnable(GL_TEXTURE_GEN_S);
		glEnable(GL_TEXTURE_GEN_T);
	}

	if (TextureImage[0])									// If Texture Exists
	{
		if (TextureImage[0]->data)							// If Texture Image Exists
		{
			free(TextureImage[0]->data);					// Free The Texture Image Memory
		}

		free(TextureImage[0]);								// Free The Image Structure
	}

	return Status;										// Return The Status
}

GLvoid ReSizeGLScene(GLsizei width, GLsizei height)		// Resize And Initialize The GL Window
{
	if (height==0)										// Prevent A Divide By Zero By
	{
		height=1;										// Making Height Equal One
	}

	glViewport(0,0,width,height);						// Reset The Current Viewport

	glMatrixMode(GL_PROJECTION);						// Select The Projection Matrix
	glLoadIdentity();									// Reset The Projection Matrix

	// Calculate The Aspect Ratio Of The Window
	gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);

	glMatrixMode(GL_MODELVIEW);							// Select The Modelview Matrix
	glLoadIdentity();									// Reset The Modelview Matrix
}

int InitGL(GLvoid)										// All Setup For OpenGL Goes Here
{
	if (!LoadGLTextures())								// Jump To Texture Loading Routine
	{
		return FALSE;									// If Texture Didn't Load Return FALSE
	}
	BuildFont();										// Build The Font

	glShadeModel(GL_SMOOTH);							// Enable Smooth Shading
	glClearColor(0.0f, 0.0f, 0.0f, 0.5f);				// Black Background
	glClearDepth(1.0f);									// Depth Buffer Setup
	glEnable(GL_DEPTH_TEST);							// Enables Depth Testing
	glDepthFunc(GL_LEQUAL);								// The Type Of Depth Testing To Do
	glEnable(GL_LIGHT0);								// Quick And Dirty Lighting (Assumes Light0 Is Set Up)
	glEnable(GL_LIGHTING);								// Enable Lighting
	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);	// Really Nice Perspective Calculations
	glEnable(GL_TEXTURE_2D);							// Enable Texture Mapping
	glBindTexture(GL_TEXTURE_2D, texture[0]);			// Select The Texture
	return TRUE;										// Initialization Went OK
}

int DrawGLScene(GLvoid)									// Here's Where We Do All The Drawing
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);	// Clear The Screen And The Depth Buffer
	glLoadIdentity();									// Reset The View
	glTranslatef(1.1f*float(cos(rot/16.0f)),0.8f*float(sin(rot/20.0f)),-3.0f);
	glRotatef(rot,1.0f,0.0f,0.0f);						// Rotate On The X Axis
	glRotatef(rot*1.2f,0.0f,1.0f,0.0f);					// Rotate On The Y Axis
	glRotatef(rot*1.4f,0.0f,0.0f,1.0f);					// Rotate On The Z Axis
	glTranslatef(-0.35f,-0.35f,0.1f);					// Center On X, Y, Z Axis
	glPrint("N");										// Draw A Skull And Crossbones Symbol
	rot+=0.1f;											// Increase The Rotation Variable
	return TRUE;										// Keep Going
}

GLvoid KillGLWindow(GLvoid)								// Properly Kill The Window
{
	if (fullscreen)										// Are We In Fullscreen Mode?
	{
		ChangeDisplaySettings(NULL,0);					// If So Switch Back To The Desktop
		ShowCursor(TRUE);								// Show Mouse Pointer
	}

	if (hRC)											// Do We Have A Rendering Context?
	{
		if (!wglMakeCurrent(NULL,NULL))					// Are We Able To Release The DC And RC Contexts?
		{
			MessageBox(NULL,"Release Of DC And RC Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
		}

		if (!wglDeleteContext(hRC))						// Are We Able To Delete The RC?
		{
			MessageBox(NULL,"Release Rendering Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
		}
		hRC=NULL;										// Set RC To NULL
	}

	if (hDC && !ReleaseDC(hWnd,hDC))					// Are We Able To Release The DC
	{
		MessageBox(NULL,"Release Device Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
		hDC=NULL;										// Set DC To NULL
	}

	if (hWnd && !DestroyWindow(hWnd))					// Are We Able To Destroy The Window?
	{
		MessageBox(NULL,"Could Not Release hWnd.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
		hWnd=NULL;										// Set hWnd To NULL
	}

	if (!UnregisterClass("OpenGL",hInstance))			// Are We Able To Unregister Class
	{
		MessageBox(NULL,"Could Not Unregister Class.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
		hInstance=NULL;									// Set hInstance To NULL
	}

	KillFont();
}

/*	This Code Creates Our OpenGL Window.  Parameters Are:					*
 *	title			- Title To Appear At The Top Of The Window				*
 *	width			- Width Of The GL Window Or Fullscreen Mode				*
 *	height			- Height Of The GL Window Or Fullscreen Mode			*
 *	bits			- Number Of Bits To Use For Color (8/16/24/32)			*
 *	fullscreenflag	- Use Fullscreen Mode (TRUE) Or Windowed Mode (FALSE)	*/
 
BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag)
{
	GLuint		PixelFormat;			// Holds The Results After Searching For A Match
	WNDCLASS	wc;						// Windows Class Structure
	DWORD		dwExStyle;				// Window Extended Style
	DWORD		dwStyle;				// Window Style
	RECT		WindowRect;				// Grabs Rectangle Upper Left / Lower Right Values
	WindowRect.left=(long)0;			// Set Left Value To 0
	WindowRect.right=(long)width;		// Set Right Value To Requested Width
	WindowRect.top=(long)0;				// Set Top Value To 0
	WindowRect.bottom=(long)height;		// Set Bottom Value To Requested Height

	fullscreen=fullscreenflag;			// Set The Global Fullscreen Flag

	hInstance			= GetModuleHandle(NULL);				// Grab An Instance For Our Window
	wc.style			= CS_HREDRAW | CS_VREDRAW | CS_OWNDC;	// Redraw On Size, And Own DC For Window.
	wc.lpfnWndProc		= (WNDPROC) WndProc;					// WndProc Handles Messages
	wc.cbClsExtra		= 0;									// No Extra Window Data
	wc.cbWndExtra		= 0;									// No Extra Window Data
	wc.hInstance		= hInstance;							// Set The Instance
	wc.hIcon			= LoadIcon(NULL, IDI_WINLOGO);			// Load The Default Icon
	wc.hCursor			= LoadCursor(NULL, IDC_ARROW);			// Load The Arrow Pointer
	wc.hbrBackground	= NULL;									// No Background Required For GL
	wc.lpszMenuName		= NULL;									// We Don't Want A Menu

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人18精品视频| 亚洲综合激情另类小说区| 色偷偷久久人人79超碰人人澡| 免费av网站大全久久| 亚洲不卡在线观看| 亚洲电影欧美电影有声小说| 亚洲免费在线电影| 亚洲激情图片小说视频| 1024成人网| 91久久香蕉国产日韩欧美9色| 欧美午夜理伦三级在线观看| 国产校园另类小说区| 日韩欧美一级二级三级| 色综合久久综合网欧美综合网| 色综合天天视频在线观看| 成人av网站免费观看| 91香蕉国产在线观看软件| 色综合久久88色综合天天6 | 成人av高清在线| 99视频国产精品| 欧美亚洲日本一区| 在线综合+亚洲+欧美中文字幕| 91精品国产手机| 久久蜜桃香蕉精品一区二区三区| 中文字幕欧美区| 亚洲综合精品久久| 久久国产精品区| av在线免费不卡| 欧美日韩一区二区电影| 精品国产自在久精品国产| 国产精品久久二区二区| 亚洲色图欧洲色图婷婷| 日韩成人免费在线| 国产成人av影院| 欧美亚洲禁片免费| 亚洲精选免费视频| 日韩中文字幕91| 国产成人精品亚洲午夜麻豆| 欧美主播一区二区三区| 精品人伦一区二区色婷婷| 中文字幕日韩精品一区 | 色婷婷久久99综合精品jk白丝 | 久久国产婷婷国产香蕉| 不卡欧美aaaaa| 日韩欧美一区二区不卡| 亚洲精品伦理在线| 国产一区二区不卡| 69p69国产精品| 最新成人av在线| 国产在线播放一区| 欧美精品少妇一区二区三区| 国产精品国产自产拍高清av| 全国精品久久少妇| 在线观看国产精品网站| 久久久精品黄色| 蜜臀av亚洲一区中文字幕| 日本乱人伦aⅴ精品| 欧美激情中文不卡| 国产一区在线观看麻豆| 日韩一区二区影院| 亚洲成av人片在线观看| 色老汉av一区二区三区| 成人免费一区二区三区在线观看| 久久国产剧场电影| 日韩精品中文字幕一区 | 欧美妇女性影城| 亚洲精品免费播放| 91麻豆精品一区二区三区| 国产精品视频免费看| 黄一区二区三区| 欧美成人精品福利| 麻豆精品国产91久久久久久 | 日韩在线播放一区二区| 91久久一区二区| 亚洲一区二区三区视频在线| 日韩国产精品久久久久久亚洲| 欧美色综合网站| 亚洲高清视频中文字幕| 欧美三区在线观看| 五月天欧美精品| 国产精品夜夜爽| 日韩在线一二三区| 亚洲卡通欧美制服中文| 国产二区国产一区在线观看| 色琪琪一区二区三区亚洲区| 狠狠色狠狠色合久久伊人| 欧美日韩国产色站一区二区三区| 一二三区精品福利视频| 欧美日韩亚洲综合在线| 日本中文一区二区三区| ww久久中文字幕| 成人午夜视频福利| 亚洲三级电影网站| 欧美色图12p| 麻豆国产精品官网| 国产午夜精品理论片a级大结局| 国产精品一品视频| 亚洲免费av在线| 91精品国产91综合久久蜜臀| 亚洲国产一二三| 欧美成人精品高清在线播放| 在线不卡免费欧美| 欧美日韩精品一区二区天天拍小说 | 国产精品18久久久久久久网站| 久久精品欧美一区二区三区不卡| 99久久99久久综合| 一区二区三国产精华液| 日韩一区二区三区视频在线观看| 国产精品正在播放| 亚洲影院理伦片| 精品久久久网站| 91激情五月电影| 精品一区二区三区久久| 亚洲欧美一区二区不卡| 日韩欧美国产1| 91麻豆精品视频| 国产精品自拍三区| 午夜精品久久久久| 国产精品毛片高清在线完整版| 欧美区一区二区三区| 成人黄色av网站在线| 日韩av二区在线播放| 日本韩国精品一区二区在线观看| 国产成人精品免费看| 成人在线视频首页| av资源网一区| 色八戒一区二区三区| 精品视频一区二区三区免费| 国内精品伊人久久久久av一坑| 久久天天做天天爱综合色| 欧美精品亚洲一区二区在线播放| 成人午夜视频网站| 国产一区欧美二区| 麻豆精品在线播放| 亚洲第一激情av| 亚洲激情欧美激情| 亚洲日穴在线视频| 国产精品丝袜一区| 精品国产乱码久久久久久1区2区 | 成人动漫一区二区在线| 毛片一区二区三区| 日韩精品国产精品| 宅男在线国产精品| 91精品国产综合久久香蕉麻豆| 亚洲精品在线观看网站| 国产精品久久久久国产精品日日| 色噜噜狠狠色综合欧洲selulu| 久久精工是国产品牌吗| 丝袜国产日韩另类美女| 天天综合天天综合色| 亚洲午夜免费福利视频| 亚洲精品第1页| 亚洲激情图片一区| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲午夜激情网站| **性色生活片久久毛片| 国产精品久久久久永久免费观看 | 欧美精品99久久久**| 午夜精品久久久久久久| 亚洲一区二区免费视频| 加勒比av一区二区| 不卡一区二区三区四区| 国产成人在线视频免费播放| 亚洲精品日产精品乱码不卡| 亚洲精品国产a| 一区二区三区在线免费播放| 亚洲午夜成aⅴ人片| 日本一道高清亚洲日美韩| 麻豆国产精品官网| 国产一区二区三区| 99久久精品一区| 欧美在线free| 日韩欧美一区二区不卡| 国产网站一区二区| ㊣最新国产の精品bt伙计久久| 亚洲少妇30p| 日韩精品久久久久久| 国内精品国产成人国产三级粉色| 国产成人aaaa| 91精品1区2区| 精品少妇一区二区三区视频免付费| 26uuu久久天堂性欧美| 欧美国产亚洲另类动漫| 一区二区三区四区激情| 免费一级欧美片在线观看| 另类的小说在线视频另类成人小视频在线 | 久久综合色之久久综合| 中文字幕在线不卡视频| 午夜精品久久久久影视| 国产麻豆精品在线| 在线观看日韩电影| 久久综合久久综合九色| 亚洲乱码中文字幕| 久久狠狠亚洲综合| 一本一道久久a久久精品| 日韩精品一区在线| 亚洲免费高清视频在线| 国产精品中文字幕一区二区三区| 欧洲生活片亚洲生活在线观看| 精品久久久久一区|