Exemplo n.º 1
0
void GraphicEngine::initGL() {
	
	// Light init
	if (game->config->getInt("lighting"))
		glEnable(GL_LIGHTING);

	glEnable(GL_COLOR_MATERIAL);
	glEnable(GL_TEXTURE_2D);

	setAmbient(MGColor(0.5f, 0.5f, 0.5f, 1.0f));
	setClearColor(MGColor(0.0f, 0.0f, 0.0f, 1.0f));

	//glPolygonMode(GL_FRONT, GL_LINE);
	//glPolygonMode(GL_BACK, GL_LINE);	
	
	glShadeModel (GL_SMOOTH); // ћетод закраски: —√Ћј∆≈Ќџ… 
	glEnable (GL_DEPTH_TEST); // ¬ключаем тест глубины 
	// ¬ Ћ. ј¬“ќћј“»„≈— »… ѕ≈–≈—„≈“ Ќќ–ћјЋ≈… 
	//glEnable (GL_AUTO_NORMAL); 
	glEnable (GL_NORMALIZE); 
	// ¬ Ћ. ќ“—≈„≈Ќ»≈ «јƒЌ»’ √–јЌ≈… 
	glEnable (GL_CULL_FACE); // ¬ключаем отсечение граней 
	glCullFace (GL_BACK); // ”казываем, что отсекать будем задние грани	

	updateScreenSize();
	
	// Init fonts
	glEnable(GL_BLEND);
	setBlendFunc(getDefaultBlendFuncS(), getDefaultBlendFuncD());
	

	standart14Normal = FontCache::getInstance()->load("standart_14_normal");
	console8Normal = FontCache::getInstance()->load("console_8_normal");
	
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
	
	
	GLenum err = glGetError ();
	if (GL_NO_ERROR != err)
		Log::error("GraphicEngine::initGL(): OpenGL Error: %s", gluErrorString (err));
	
	Log::info("OpenGL initialized");
	  
}
Exemplo n.º 2
0
void GraphicEngine::writeText(string text, CVector position, FontStyle style, MGColor color) {
	
	glColor4f(color.getR(), color.getG(), color.getB(), color.getA());
	
	switch(style) {
		case STANDART_14_NORMAL:
			standart14Normal->Begin();
			//standart14Normal->DrawString(text.c_str(), 1.0f, position.x, position.y);
			standart14Normal->DrawString(text.c_str(), 1.0, position.x, position.y, MGColor(255,128,128,255).getByteComponents(), MGColor(128,255,128,255).getByteComponents());
			break;
		case CONSOLE_8_NORMAL:
			console8Normal->Begin();
			//console8Normal->DrawString(text.c_str(), 1.0f, position.x, position.y);
			console8Normal->DrawString(text.c_str(), 1.0, position.x, position.y);
			break;
		default:
			Log::error("undefined font style");
	}
	
}
Exemplo n.º 3
0
MGColor SafeColor(TiXmlElement *pElem, const std::string &sChild, MGColor const &Default = MGColor(0,0,0))
{
  MGColor uRes = Default;
  const string &sColor = SafeString(pElem, sChild.c_str());
  if (sColor != "")
  {
    unsigned color;
    sscanf_s(sColor.c_str(), "%x", &color);
    uRes.r = (float)((color>>16) & 0xFF) * 1.f/255.f;
    uRes.g = (float)((color>> 8) & 0xFF) * 1.f/255.f;
    uRes.b = (float)((color>> 0) & 0xFF) * 1.f/255.f;
  }
Exemplo n.º 4
0
void GraphicEngine::renderWorld()
{
	glMatrixMode(GL_MODELVIEW); // set modelview matrix
	glLoadIdentity(); // clear the current matrix

	// Offsets
	glTranslatef(masterPositionOffset.x, masterPositionOffset.y, masterPositionOffset.z);
	glRotatef(masterOrientationOffset.x, 1.0f, 0.0f, 0.0f);
	glRotatef(masterOrientationOffset.y, 0.0f, 1.0f, 0.0f);
	glRotatef(masterOrientationOffset.z, 0.0f, 0.0f, 1.0f);

	gluLookAt(game->camera->position.x, game->camera->position.y, game->camera->position.z,
			game->camera->lookAt.x + game->camera->position.x, game->camera->lookAt.y + game->camera->position.y, game->camera->lookAt.z + game->camera->position.z,
					game->camera->up.x, game->camera->up.y, game->camera->up.z);
	writeDebugText("Camera position: %0.0f  %0.0f  %0.0f ", game->camera->position.x, game->camera->position.y, game->camera->position.z);
	//writeDebugText("Camera look: %0.2f  %0.2f  %0.2f ", game->camera->lookAt.x, game->camera->lookAt.y, game->camera->lookAt.z);


	static vector<GameObject*> objects_for_drawing;
	static vector<GOLight*> lights;
	static vector<GameObject*> opaque_objects;
	static vector<GameObject*> transparent_objects;
	static vector<GameObject*> _2d_objects;
	objects_for_drawing.clear();
	lights.clear();
	opaque_objects.clear();
	transparent_objects.clear();
	_2d_objects.clear();

	for (unsigned int i = 0; i < game->objects.size(); i++ ) {
		if (game->objects.at(i)->getNeedDraw()) {
			objects_for_drawing.push_back(game->objects.at(i));
		}
	}

	if (Game::instance->drawBBoxes) {
		if (renderFilter) {
			renderFilter->debugDraw();
			for (unsigned int i = 0; i < objects_for_drawing.size(); i++ ) {
				GameObject* o = objects_for_drawing.at(i);
				renderFilter->debugObjectDraw(o);
			}
		} else {
			for (unsigned int i = 0; i < objects_for_drawing.size(); i++ ) {
				drawBBox(objects_for_drawing.at(i)->getBBox());
			}
		}
	}

	for (unsigned int i = 0; i < objects_for_drawing.size(); i++ ) {
		if (objects_for_drawing.at(i)->type == GO_LIGHT) {
			lights.push_back((GOLight*)objects_for_drawing.at(i));
		} else
		if (objects_for_drawing.at(i)->is2D) {
			_2d_objects.push_back(objects_for_drawing.at(i));
		} else
		if (objects_for_drawing.at(i)->opaque) {
			opaque_objects.push_back(objects_for_drawing.at(i));
		} else {
			transparent_objects.push_back(objects_for_drawing.at(i));
		}
	}

	if (renderFilter && !Game::instance->editorMode) {
		opaque_objects = renderFilter->doFilter(opaque_objects);
		transparent_objects = renderFilter->doFilter(transparent_objects);
	}
	game->drawnObjectsCount = opaque_objects.size();
	game->drawnObjectsCount += transparent_objects.size();
	game->drawnObjectsCount += _2d_objects.size();

	sort(transparent_objects.begin(), transparent_objects.end(), sortTransparent);

	for (unsigned int i = 0; i < lights.size(); i++ ) {
		lights.at(i)->draw();
	}

	for (unsigned int i = 0; i < opaque_objects.size(); i++ ) {
		opaque_objects.at(i)->draw();
		//writeDebugText("Type: %i, id: %s, z:%f", opaque_objects.at(i)->type, opaque_objects.at(i)->id.c_str(), opaque_objects.at(i)->position.z);
	}

	game->transparentObjectsCount = transparent_objects.size();
	for (unsigned int i = 0; i < transparent_objects.size(); i++ ) {
		transparent_objects.at(i)->draw();
		//writeDebugText("Type: %i, id: %s, z:%f", transparent_objects.at(i)->type, transparent_objects.at(i)->id.c_str(), (transparent_objects.at(i)->position - game->camera->position).Length());
	}

	if (game->debugPhysDraw) {
		if (game->debugPhysDrawIn2D)
			start2D();
			game->dynamicsWorld->debugDrawWorld();
		if (game->debugPhysDrawIn2D)
			end2D();
	}

	// Ligt reset
	for (unsigned int i = 0; i < lights.size(); i++ ) {
		lights.at(i)->cancel();
	}

#ifndef OPENGL_ES
	// for drawibg texts
	glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
#endif
	// save previous state of lighting
	bool lightingEnabled = glIsEnabled(GL_LIGHTING);
	glDisable(GL_LIGHTING);

	// Write 2D stuff
	start2D();

	// sort Z
	sort(_2d_objects.begin(), _2d_objects.end(), sort2D);

	game->_2dObjectsCount = _2d_objects.size();
	for (unsigned int i = 0; i < _2d_objects.size(); i++ ) {
		_2d_objects.at(i)->draw();
		//writeDebugText("Type: %i, id: %s, z:%f", opaque_objects.at(i)->type, opaque_objects.at(i)->id.c_str(), opaque_objects.at(i)->position.z);
	}

	// Draw debug texts
	for (unsigned int i = 0; i < debugStrings.size(); i++ ) {
		if (game->drawDebugText && !game->console->isOpened()) {
			std::pair <float, float>* size = new std::pair <float, float>();
			standart14Normal->GetStringSize(debugStrings.at(i).c_str(), size);

			static GOPlate* p = new GOPlate();
			p->setPositioningMode(GOPositioningModeTopLeft);
			p->color = MGColor(0.0f,0.0f,0.0f,0.4f);

			int h = (int)(size->second * 1.00);
			p->setSize(CVector(size->first, h));
			p->setPosition(CVector(5.0f, game->osAdapter->getScreenHeight() - (h * i)));
			p->draw();
			writeText(debugStrings.at(i), CVector(5.0f, game->osAdapter->getScreenHeight() - (h * i), 0.0f), STANDART_14_NORMAL, MGColor(0.0f, 1.0f, 0.0f, 1.0f));
		}
	}
	debugStrings.clear();

	game->luaVM->doString("_onDraw2D()");
	end2D();

	if (lightingEnabled) {
		glEnable(GL_LIGHTING);
	} else {
		glDisable(GL_LIGHTING);
	}

}