Пример #1
0
/**
*	Pinta el estado actual del juego
**/
void Game_Render(TGAME * lsGame)
{
	//*****************************************************************************
	//Limpiar los buffers
	GraphicManager_ClearBuffer(&(lsGame->mGraphic));

	//Visualizar la escena
	Scene_Render(&(lsGame->mScene),&(lsGame->mGraphic));

	//Visualizar buffer
	GraphicManager_SwapBuffer(&(lsGame->mGraphic));
}
Пример #2
0
void GlassViewer::draw(gcn::Graphics *g) {
	sceneobj_t sc;
	int x,y;
	vec4_t rect;
	if(isCulled(g))
		return;
	
	getAbsolutePosition(x, y);
	
	gcn::Rectangle r = g->getCurrentClipArea();
	
	//setup camera
	Cam_DefaultCamera(&cam, r.width, r.height, 0.1, Cvar_GetValue("gfx_farclip"));
	cam.fovx = fov;
	cam.fog_near = cam.fog_far = 10000;
	cam.x = x;
	cam.y = Vid_GetScreenH()-y-mDimension.height;
	cam.use_viewport = true;
	Cam_CalcFovy(&cam);
	//Cam_SetDistance(&cam, 1000);
	
	M_CopyVec3(target, cam.viewaxis[AXIS_FORWARD]);
	M_GetAxisFromForwardVec(cam.viewaxis[AXIS_FORWARD], cam.viewaxis);
	M_CopyVec3(camPos, cam.origin);
	
	cam.time = Host_Milliseconds()/1000.0f;
	
	SET_VEC4(rect, 0, 0, r.width, r.height);
	
	if(mOpaque) {
		g->setColor(getBackgroundColor());
		g->fillRectangle(gcn::Rectangle(0,0,getWidth(),getHeight()));
	}
	
	Scene_Clear();
	
	Scene_SetFrustum(&cam, rect);
	
	if(model!=(residx_t)-1) {
		CLEAR_SCENEOBJ(sc);
		
		//SET_VEC3(cam.viewaxis[AXIS_FORWARD], target[0]-camPos[0], target[1]-camPos[1], target[2]-camPos[2]);
		//M_Normalize(cam.viewaxis[AXIS_FORWARD]);
		//M_GetAxisFromForwardVec(cam.viewaxis[AXIS_FORWARD], cam.viewaxis);
		M_MultVec3(cam.viewaxis[AXIS_FORWARD], -distance, cam.origin);
		
		M_AddVec3(cam.origin, camPos, cam.origin);
		
		sc.model = model;
		sc.skeleton = &skeleton;
		sc.flags = SCENEOBJ_NEVER_CULL | SCENEOBJ_USE_AXIS;
		SET_VEC3(sc.rimColor, 1.0, 1.0, 1.0);
		
		if(animState.size() > 0) {
			Geom_BeginPose(sc.skeleton, sc.model);
			Geom_SetBoneAnim("", animState.c_str(), Host_Milliseconds(), Host_Milliseconds(), 0, 0);
			Geom_EndPose();
		}
		
		M_CopyVec3(position, sc.pos);
		
		sc.angle[0] = sc.angle[1] = 0;
		sc.angle[2] = angle;
		M_GetAxis(sc.angle[0], sc.angle[1], sc.angle[2], sc.axis);
		
		if(mAutoRotate)
			angle = int(angle + dAngle) % 360;
		
		if(angle<0)
			angle +=360;
		
		Scene_AddObject(&sc);
	}
	
	if(!world) {
		cam.fog_near = 9000;
		cam.fog_far = 10000;
		cam.flags |= CAM_NO_WORLD;
	} else {
		cam.flags &= ~CAM_NO_WORLD;
		cam.fog_near = Cvar_GetValue("gfx_fog_near");
		cam.fog_far = Cvar_GetValue("gfx_fog_far");
		WO_RenderEmitters(cam.origin);
		WL_RenderLights(cam.origin);
	}
	
	//FIXME: add post-processing with viewers
	int old = gfx_postProcessing.integer;
	
	Cvar_SetVarValue(&gfx_postProcessing, 0);
	
	GL_EndFrame();
	
	GL_Enable(GL_CULL_FACE);
	
	Scene_Render(&cam, cam.origin, 0);
	
	GL_Disable(GL_CULL_FACE);
	
	GL_BeginFrame();
	Cvar_SetVarValue(&gfx_postProcessing, old);
	
	if(animState.size() > 0 && model != (residx_t)-1)
		Geom_FreeSkeleton(&skeleton);
	
}
Пример #3
0
void CamWnd::Cam_Draw() {
	glViewport(0, 0, m_Camera.width, m_Camera.height);

	// enable depth buffer writes
	glDepthMask(GL_TRUE);

	Vector3 clearColour(0, 0, 0);
	clearColour = ColourSchemes().getColourVector3("camera_background");

	glClearColor(clearColour[0], clearColour[1], clearColour[2], 0);
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	render::RenderStatistics::Instance().resetStats();

	Cull_ResetStats();

	glMatrixMode(GL_PROJECTION);
	glLoadMatrixf(m_Camera.projection);

	glMatrixMode(GL_MODELVIEW);
	glLoadMatrixf(m_Camera.modelview);

	// one directional light source directly behind the viewer
	{
		GLfloat inverse_cam_dir[4], ambient[4], diffuse[4];//, material[4];

		ambient[0] = ambient[1] = ambient[2] = 0.4f;
		ambient[3] = 1.0f;
		diffuse[0] = diffuse[1] = diffuse[2] = 0.4f;
		diffuse[3] = 1.0f;

		inverse_cam_dir[0] = m_Camera.vpn[0];
		inverse_cam_dir[1] = m_Camera.vpn[1];
		inverse_cam_dir[2] = m_Camera.vpn[2];
		inverse_cam_dir[3] = 0;

		glLightfv(GL_LIGHT0, GL_POSITION, inverse_cam_dir);

		glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
		glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);

		glEnable(GL_LIGHT0);
	}

	unsigned int globalstate = RENDER_DEPTHTEST | RENDER_COLOURWRITE | RENDER_DEPTHWRITE | RENDER_ALPHATEST
			| RENDER_BLEND | RENDER_CULLFACE | RENDER_COLOURARRAY | RENDER_COLOURCHANGE;
	switch (getCameraSettings()->getMode()) {
	case drawWire:
		break;
	case drawSolid:
		globalstate |= (RENDER_FILL | RENDER_LIGHTING | RENDER_SMOOTH | RENDER_SCALED);
		break;
	case drawTexture:
		globalstate |= (RENDER_FILL | RENDER_LIGHTING | RENDER_TEXTURE_2D | RENDER_SMOOTH | RENDER_SCALED);
		break;
	default:
		globalstate = 0;
		break;
	}

	if (!getCameraSettings()->solidSelectionBoxes()) {
		globalstate |= RENDER_LINESTIPPLE;
	}

	{
		CamRenderer renderer(globalstate, m_state_select2, m_state_select1, m_view.getViewer());

		Scene_Render(renderer, m_view);

		renderer.render(m_Camera.modelview, m_Camera.projection);
	}

	// greebo: Draw the clipper's points (skipping the depth-test)
	{
		glDisable(GL_DEPTH_TEST);

		glColor4f(1, 1, 1, 1);

		glPointSize(5);

		if (GlobalClipper().clipMode()) {
			GlobalClipper().draw(1.0f);
		}

		glPointSize(1);
	}

	// prepare for 2d stuff
	glColor4f(1, 1, 1, 1);
	glDisable(GL_BLEND);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(0, (float) m_Camera.width, 0, (float) m_Camera.height, -100, 100);
	glScalef(1, -1, 1);
	glTranslatef(0, -(float) m_Camera.height, 0);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();

	if (GlobalOpenGL().GL_1_3()) {
		glClientActiveTexture(GL_TEXTURE0);
		glActiveTexture(GL_TEXTURE0);
	}

	glDisableClientState(GL_TEXTURE_COORD_ARRAY);
	glDisableClientState(GL_NORMAL_ARRAY);
	glDisableClientState(GL_COLOR_ARRAY);

	glDisable(GL_TEXTURE_2D);
	glDisable(GL_LIGHTING);
	glDisable(GL_COLOR_MATERIAL);
	glDisable(GL_DEPTH_TEST);
	glLineWidth(1);

	// draw the crosshair
	if (m_bFreeMove) {
		glBegin(GL_LINES);
		glVertex2f((float) m_Camera.width / 2.f, (float) m_Camera.height / 2.f + 6);
		glVertex2f((float) m_Camera.width / 2.f, (float) m_Camera.height / 2.f + 2);
		glVertex2f((float) m_Camera.width / 2.f, (float) m_Camera.height / 2.f - 6);
		glVertex2f((float) m_Camera.width / 2.f, (float) m_Camera.height / 2.f - 2);
		glVertex2f((float) m_Camera.width / 2.f + 6, (float) m_Camera.height / 2.f);
		glVertex2f((float) m_Camera.width / 2.f + 2, (float) m_Camera.height / 2.f);
		glVertex2f((float) m_Camera.width / 2.f - 6, (float) m_Camera.height / 2.f);
		glVertex2f((float) m_Camera.width / 2.f - 2, (float) m_Camera.height / 2.f);
		glEnd();
	}

	glRasterPos3f(1.0f, static_cast<float> (m_Camera.height) - 1.0f, 0.0f);
	GlobalOpenGL().drawString(render::RenderStatistics::Instance().getStatString());

	glRasterPos3f(1.0f, static_cast<float> (m_Camera.height) - 11.0f, 0.0f);
	GlobalOpenGL().drawString(Cull_GetStats());

	// bind back to the default texture so that we don't have problems
	// elsewhere using/modifying texture maps between contexts
	glBindTexture(GL_TEXTURE_2D, 0);
}