⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scene.cpp

📁 environment_mapped_bump_mapping using opengl
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////
// scene.cpp: implementation of the scene class.
//
//////////////////////////////////////////////////////////////////////

#include "scene.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

scene::scene()
{
	if(!extInit()){ error=1; return;}
	font0 = NULL;

	ReadInit("data/init.txt");

	//////////////////////////////////////
	// smerniky na instancie na triedy nastavim na NULL, aby som ich potom nemazal
	c = NULL;

	//zistime podporu cube mapping
	if(!ext.ARB_multitexture)
	{	MessageBox(hWnd,english ? "GL_ARB_multitexture unsupported !":"GL_ARB_multitexture nepodporovany !", "ERROR", MB_OK);	error=1;return;}
	if(!(ext.max.max_texture_units>2))
	{	MessageBox(hWnd,english ? "Require 3 texture units!" : "Pozadovane su 3 jednotky pre multitexturing!", "ERROR", MB_OK);	error=1;return;}
	if(!ext.ARB_texture_env_combine)
	{	MessageBox(hWnd,english ? "GL_ARB_texture_env_combine unsupported !":"GL_ARB_texture_env_combine nepodporovany !", "ERROR", MB_OK);	error=1;return;}
	if(!ext.ATI_envmap_bumpmap)
	{	MessageBox(hWnd,english ? "GL_ATI_envmap_bumpmap unsupported !":"GL_ATI_envmap_bumpmap nepodporovany !", "ERROR", MB_OK);	error=1;return;}

	font0 = new Font("data/font.bmp",&error);		// vytvorenie fontu
	if(error)return;

	//////////////////////////////////////
	// prepinace

	fps = 200;							// v pripade ze nieco zavisy od fps
	clip_distance = vzdialena_orezavacia_rovina;
	svetlo=0; texturovanie=0; ciary=0; kurzor=1;
	
	//////////////////////////////////////
	// nacitanie textur
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);	//cisti buffer v aktualnom viewporte a to iba color a hlbkovy bit
	glEnable(GL_TEXTURE_2D);
	font0->Begin();
	font0->Print_xy_scale(100,400,"Environment mapped bump mapping (EMBM)",0,1.5f,2);
	font0->Print_xy_scale(300,320,"Marek Mizanin",0,1.5f,1.5f);
	font0->Print_xy_scale(260,280,"www.mizanin.szm.sk",0,1.5f,1.5f);
	font0->Print_xy_scale(english ? 340:300,240,english ? "Key H - help" : "Klavesa H - Help",0,1.0f,1.0f);
	font0->End();
	SwapBuffers(hDC);

	spheremap.setForCopyToTexture( renderableTexture, renderableTexture, 0, filterForCubeMap);
	zem.load("data/base.jpg",0,3,0);
	dudv.MakeDOT3( "data/bump.jpg", 1, 1, 0, 1.0f, NULL);	//"data/dudv.bmp");
//	dudv.loadDUDV( "data/dudv.bmp", 1, 1, 0);

//	LoadTextureSkyBox("data/nvidia_skybox/","jpg", skybox);
//	cubemap.loadCube("data/nvidia_skybox/","jpg",1);

	LoadTextureSkyBox("data/opengl/","jpg", skybox);
	cubemap.loadCube("data/opengl/","jpg",filterForCubeMap);
	
	//////////////////////////////////////
	// vytvarame instancie pouzivanych tried
	c = new camera;

	if(error)return;
	InitGL();		// nastavenie z-buffra,svetla,...
}

scene::~scene()
{
//	int i;
	//////////////////////////////////////
	// mazeme instancie tried
	if(font0!=NULL)delete font0;
	if(c!=NULL)delete c;
	//////////////////////////////////////
	KillGL();
}

void scene::InitGL(void)
{
	if(!kurzor)ShowCursor(0);
	if(!fullscreen)
	{
		RECT		WindowRect;					// miesto pre velkost okna
		WindowRect.left=(long)0;
		WindowRect.top=(long)0;
		GetClientRect(hWnd,&WindowRect);				//zistenie rozmerov uzivatelskej casti okna
		ReSizeGLScene(WindowRect.right,WindowRect.bottom);	//nastavenie perspektivy
	}
	else ReSizeGLScene(screen_x, screen_y);	//definovana v tomto subore

	glEnable(GL_TEXTURE_2D);		// Povolenie zobrazovanie text鷕
	glShadeModel(GL_SMOOTH);		/*nastavuje tienovanie
	GL_SMOOTH - objekty su tienovane t.j. prechody medzi farbami bodov su plinule (gouradovo (s)tienovanie)
	GL_FLAT   - objekty nie su tienovane ziadne plinule prechody */

	glClearColor(0.0f, 0.0f, 0.0f, 0.0f); //specifikuje hodnoty na cistenie pomocou glClear par.: red, green, blue, alpha (cierny podklad)
//	glClearColor(0.6f, 0.6f, 0.6f, 0.0f); //specifikuje hodnoty na cistenie pomocou glClear par.: red, green, blue, alpha (cierny podklad)
	glClearDepth(1.0f);  //specifikuje hodnoty na cistenie pomocou glClear par.: depth (hlbka)
	
	/* ZAPNUTIE HLBKOVEHO TESTU */
	glEnable(GL_DEPTH_TEST);		// zapne h錬kov

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -