//--------------------------------------------------------------
void testApp::keyPressed(int key) {
	switch(key) {
		case 32: //SPACE BAR
			of_key_backspace_pressed=true;
			break;		
		case OF_KEY_PAGE_UP:
			of_key_page_up_pressed=true;
			break;
		case OF_KEY_PAGE_DOWN:
			of_key_page_down_pressed=true;
			break;
		case OF_KEY_LEFT:
			of_key_left_pressed=true;
			break;
		case OF_KEY_RIGHT:
			of_key_right_pressed=true;
			break;
		case OF_KEY_UP:
			of_key_up_pressed=true;
			break;
		case OF_KEY_DOWN:
			of_key_down_pressed=true;
			break;
		//COLOR AMBIENT LIGHT -QWE Keys _RGB
		case 113:	//Q // R
			ambient_red_value=fmodf((ambient_red_value+=0.01),1.0);
			setAmbientLightColor();
			break;
		case 119:	//W // G
			ambient_green_value=fmodf((ambient_green_value+=0.01),1.0);
			setAmbientLightColor();
			break;
		case 101:	//E // B
			ambient_blue_value=fmodf((ambient_blue_value+=0.01),1.0);
			setAmbientLightColor();
			break;
		//COLOR DIRECTIONAL LIGHT -ASD Keys _RGB
		case 97:	//A // R
			direct_red_value=fmodf((direct_red_value+=0.01),1.0);
			setDirectLightColor();
			break;
		case 115:	//S // G
			direct_green_value=fmodf((direct_green_value+=0.01),1.0);
			setDirectLightColor();
			break;
		case 100:	//D // B
			direct_blue_value=fmodf((direct_blue_value+=0.01),1.0);
			setDirectLightColor();
			break;
	}
	
}
    bool LightsHolder::init(std::vector<LightEffect *> effectsArray, Sprite *image) {
        if (initGLProgramState("Assets/image/makkajai/Shaders3D/pointlight.frag")) {
            _effectsArray = effectsArray;
            int idx = 0;

            sprite = image;
            for (auto &ef : _effectsArray) {

                if (ef != nullptr) {

                    v3Color[idx] = Vec3(ef->getLightColor().r, ef->getLightColor().g, ef->getLightColor().b) / 255;

                    lightCutoffRadius[idx] = ef->getLightCutoffRadius();
                    lightHalfRadius[idx] = ef->getLightHalfRadius();

                    Point posRelToSprite = PointApplyAffineTransform(Point(ef->getLightPos().x, ef->getLightPos().y),
                            sprite->getWorldToNodeAffineTransform());
                    _lightPos[idx] = Vec3(posRelToSprite.x, posRelToSprite.y, ef->getLightPos().z);


                    brightness[idx] = ef->getBrightness();
                }
                idx++;
            }
            _lightsNumber = idx;
            setLightColor();
            setAmbientLightColor(cocos2d::Color3B(55, 55, 55));
            setLightCutoffRadius();
            setLightHalfRadius();
            //  setBrightness();
            return true;
        }
        return false;
    }
示例#3
0
bool LightEffect::init()
{
    if (initGLProgramState("pointlight.frag"))
    {
        setLightColor(cocos2d::Color3B::WHITE);
        setAmbientLightColor(cocos2d::Color3B(127,127,127));
        setLightCutoffRadius(500.0f);
        setLightHalfRadius(0.5f);
        return true;
    }
    return false;
}
	static void render()
	{
		glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //clear the draw buffer

		glEnable( GL_BLEND );

		currentCamera->setAspectRatio(resolution.x/resolution.y);
		setCameraTransMatrix(currentCamera->getCameraTransformationMatrix());
		setPerspectiveMatrix(currentCamera->getPerspectiveMatrix());
		setCameraPosition(currentCamera->getTranslate());
		setLights(wLights,LIGHT_COUNT);
		setAmbientLightColor(vec3(.1,.05,.075));
		setAmbientLightColor(vec3(.1,.1,.2));

		//
		//Draw non-transparent models, pushing transparent ones onto a max-heap
		TransparencyQueue transparencyQueue;
		drawOpaqueEntities(wEntities, transparencyQueue); //Draw Every GameEntity
		drawOpaqueEntities(wWalls, transparencyQueue); //Draw Every Wall
		drawOpaqueEntities(wSoftEntities, transparencyQueue);

		//Draw transparent models, furthest from camera first
		//Disable updating the z-buffer, but still conduct the
		//test so that nearer opaque objects completely occlude
		//farther transparent objects.

		glEnable( GL_BLEND );
		glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
		glDepthMask(GL_FALSE);
		while(!transparencyQueue.empty()) {
			transparencyQueue.top()->draw();
			transparencyQueue.pop();
		}
		glDepthMask(GL_TRUE);

		glDisable(GL_BLEND);
	}
	void callbackDisplay() {
		//Render all the TVCameras.
		CameraEntity* const originalCamera = currentCamera;
		for(TVCameraList::iterator i = wTVCameras.begin(); i != wTVCameras.end(); ++i) {
			currentCamera = &(*i)->cameraEntity;
			(*i)->framebuffer.render(&render, 160, 160);
		}
		currentCamera = originalCamera;

		//Render to the screen.
		render();

		//UI hack
		glEnable(GL_BLEND);

		setAmbientLightColor(vec3(1,1,1));
		setCameraTransMatrix(mat4());
		setPerspectiveMatrix(currentCamera->getOrthographicMatrix());
		setCameraPosition(vec3(0,0,.5));

		Wall w=Wall();
		w.translate(-(.4)*(resolution.x/resolution.y),.48,-10);
		w.scale((Globals::getPlayer()->getHealth()/Player::MAX_HEALTH)*.5,.025,.1);

		DrawableEntity d=DrawableEntity(NULL,"Resources/cube.obj");
		d.translate(.5,0,0);
		d.setAlpha(.75);

		w.setModel(d);
		w.draw();

		w.translate(0,-.02,0);
		w.setScale((Globals::getPlayer()->getShieldCharge()/Player::MAX_SHIELD)*.5,.01,.1);
		w.draw();

		glDisable(GL_BLEND);

		//Draw UI Text
		if(useText) {
			Globals::setModelTransMatrix(mat4());
			Text2D n; 
			n.draw_stuff("HEALTH",vec4(1,1,1,1), -0.495*(resolution.x/resolution.y), .4725 );
			n.draw_stuff("SHIELD",vec4(1,1,1,1), -0.495*(resolution.x/resolution.y), .449 );

			char* weaponText="";
			switch(getPlayer()->getWeapon()){
			case 2:
				weaponText="CURVY BULLET";
				break;
			case 0:
				weaponText="MACHINE GUN";
				break;
			case 1:
				weaponText="MORTAR";
				break;

			}
			n.draw_stuff(weaponText,vec4(1,1,1,1), -0.495*(resolution.x/resolution.y), .449-(.4725-.449) );

			if(wScenes[currentLevel]->_beaten){
				n.draw_stuff("You Won!!",vec4(1,1,1,1),-.025,.05);
				n.draw_stuff("Press 'esc' to quit",vec4(1,1,1,1),-.1,0);
			}
		}

		glutSwapBuffers();
	}
示例#6
0
//! (internal)
void ColorCubeGenerator::processColorCubes(FrameContext& context, Node * _node, uint32_t nodeCount, uint32_t triangleCount) {
	//cerr << "begin processing color cubes !" << endl;
	//  0: create the ambient light
	static LightingState * preprolight = nullptr;
	if (!preprolight) {
		auto ln = new LightNode(Rendering::LightParameters::DIRECTIONAL);
		ln->setAmbientLightColor( Util::Color4f(1, 1, 1, 1));
		ln->setDiffuseLightColor( Util::Color4f(0, 0, 0, 0));
		ln->setSpecularLightColor(Util::Color4f(0, 0, 0, 0));
		preprolight = new LightingState(ln);
	}

	preprolight->enableState(context, _node, 0);

	struct Vis : public NodeVisitor {
		ColorCubeGenerator & ccpro;
		bool processed;
		FrameContext& rc;

		uint32_t maxNodeCount;  	// maximum number of geometry nodes in a subtree
		uint32_t maxTriangleCount;	// maximum number of triangles in a subtree

		Vis(ColorCubeGenerator & _ccpro, FrameContext& _context, uint32_t _nodeCount, uint32_t _triangleCount) :
			ccpro(_ccpro), processed(false), rc(_context), maxNodeCount(_nodeCount), maxTriangleCount(_triangleCount) {
		}
		virtual ~Vis() {}


		// ---|> NodeVisitor
		NodeVisitor::status enter(Node * node) override {
			if (node->getWorldBB().getExtentMax() <= 0.0f) { // there are boxes with zero-extension (e.g. looseOctree/octree)
				if (!ColorCube::hasColorCube(node))
					ColorCube::attachColorCube(node, ColorCube());
				return BREAK_TRAVERSAL;
			}
			if (ColorCube::hasColorCube(node)) {
				processed = true;
				return BREAK_TRAVERSAL;
			}

			if (node->isClosed())
				return BREAK_TRAVERSAL;
			return CONTINUE_TRAVERSAL;
		}


		// ---|> NodeVisitor
		NodeVisitor::status leave(Node * node) override {
			if (node->getWorldBB().getExtentMax() <= 0.0f) // there are boxes with zero-extension (e.g. looseOctree/octree)
				return CONTINUE_TRAVERSAL;
			if (processed) {
				processed = false;
				return CONTINUE_TRAVERSAL;
			}

			deque<Node*> children;
			bool drawgeometry = fulfillsProcessingConditions(node, maxNodeCount, maxTriangleCount );
			if (!node->isClosed() && !drawgeometry) {
				const auto newChildren = getChildNodes(node);
				children.insert(children.end(), newChildren.begin(), newChildren.end());
			}
			ccpro.processColorCube(rc, node, children);
			return CONTINUE_TRAVERSAL;
		}

	} visitor(*this, context, nodeCount, triangleCount);
	_node->traverse(visitor);

	preprolight->disableState(context, _node, 0);
	//cerr << "end of processing" << endl;
}