//-------------------------------------------------------------- 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; }
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(); }
//! (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; }