void GSceneManager::drawShadow(GLuint& glui_shaderProgram) { // Binde Tiefenmatrizen (aus Sicht der Lichtquelle) bindUniformDepthMatrices(glui_shaderProgram); // Betrachte zur Schattenberechnung drawShadow(sn_p_rootSceneNodeWorld, glui_shaderProgram); drawShadow(sn_p_rootSceneNodeDynamic, glui_shaderProgram); drawShadow(sn_p_rootSceneNodeInteract, glui_shaderProgram); }
void MSLayout::computeSize(void) { drawBackground(); placement(); positionLabel(); drawShadow(); }
void MSLayout::updateTitle(void) { undrawShadow(); label()->freeze(); label()->foreground(titleForeground()); int h=label()->height(); int w=label()->width(); label()->font(titleFont()); MSBoolean doPlacement=MSFalse; label()->label(title()); int ml=label()->columns(); if (ml==0&&label()->mapped()==MSTrue) { label()->unmap(); doPlacement=MSTrue; } else if (ml>0&&label()->mapped()==MSFalse) { label()->map(); doPlacement=MSTrue; } positionLabel(); label()->unfreeze(); if (label()->height()!=h||label()->width()!=w||doPlacement==MSTrue) adjustSize(); else if (label()->mapped()==MSTrue) label()->redraw(); drawShadow(); }
void LabelImpl::draw(CL_GraphicContext &p_gc) { G_ASSERT(m_parent->isLoaded()); float ax, ay; const CL_Size s = m_parent->size(p_gc); calculateAttachPoint(s.width, s.height, ax, ay); CL_Pointf position; position.x = m_pos.x - ax; position.y = m_pos.y - ay - m_fontMetrics.get_descent(); if (m_shadowVisible) { drawShadow(p_gc, position); } m_clFont->draw_text(p_gc, position.x, position.y, m_text, m_color); #if !defined(NDEBUG) && defined(DRAW_LABEL_BOUNDS) // draw label frame debug code CL_Pen newPen; newPen.set_line_width(1.0f); const CL_Pen oldPen = p_gc.get_pen(); p_gc.set_pen(newPen); const float y2 = y + m_fontMetrics.get_descent(); CL_Draw::box(p_gc, x, y2 - s.height, x + s.width, y2, CL_Colorf::red); p_gc.set_pen(oldPen); #endif // !NDEBUG && DRAW_LABEL_BOUNDS }
void BaseShadowRenderImage::render(TSRenderContext &rc) { // don't get bit by matrix flag bug -- set translation flag just in case transform.flags |= TMat3F::Matrix_HasTranslation; rc.getCamera()->pushTransform(transform); if (!forcedDetailLevel) currentDetail = shape->selectDetail(rc); if (currentDetail == -1) { rc.getCamera()->popTransform(); return; } if (animateShape) shape->animate(); if (drawShape) shape->render(rc); rc.getCamera()->popTransform(); if (castShadow && !IsEqual(shadowDetailScale,0.0f)) drawShadow(rc); }
/* * This function draws the widget. */ static void _drawCDKUScale (CDKOBJS *object, boolean Box) { CDKUSCALE *widget = (CDKUSCALE *)object; /* Draw the shadow. */ if (widget->shadowWin != 0) { drawShadow (widget->shadowWin); } /* Box the widget if asked. */ if (Box) { drawObjBox (widget->win, ObjOf(widget)); } drawCdkTitle (widget->win, object); /* Draw the label. */ if (widget->labelWin != 0) { writeChtype (widget->labelWin, 0, 0, widget->label, HORIZONTAL, 0, widget->labelLen); wrefresh (widget->labelWin); } wrefresh (widget->win); /* Draw the field window. */ drawCDKUScaleField (widget); }
void MSPrimitive::redraw(void) { if (mapped()==MSTrue) { drawBackground(); drawShadow(); } }
void MSArrowButton::redraw(void) { if (mapped()==MSTrue) { drawShadow(); arrow()->draw(); } }
void Draw(GLContext *_context) { UserData *_user = (UserData *)_context->userObject; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); drawShadow(_context); drawShadowLight(_context); // Matrix _identity; // _user->_testSprite->render(&_identity,_user->_lightRender->_depthTextureId); }
void shadow::drawShadowShape(float spread)//int levels, { //cout << "draw on top" << endl;-1 fadeIndex++; if(fadeIndex== pathsShaderTopS.size()){ fadeIndex = 0; } int i = fadeIndex; // //for (int i = 0;i <pathsShaderTopS.size() - 1;i++) { int index = i; for (int j = 0;j < pathsShaderTopS.size();j++) { //&& j <index + levels //&& j <index + (pathsShaderTopS.size()-j) if ( j> index ) { masker.beginLayer(maskLayer); { //if (i == 0) //ofClear(255, 255, 255, 0); //ofClear(0, 0, 0, 255); ofClear(0, 0, 0, 255); ofSetColor(255, 255, 255); ofBackground(255, 255, 255, 0); drawShadow(spread + (j), spread*0.5, ofColor(0, 0, 0, 235), index);//- (5 * i) )) } masker.endLayer(maskLayer); //Draw mask #1 masker.beginMask(maskLayer); { ofClear(0, 0, 0, 255); //ofClear(255, 255, 255, 0); //ofClear(255, 255, 255, 255); //ofBackground(255, 255, 255, 1 ); ofSetColor(255, 255, 255); if (j + 1 < pathsShaderTopS.size()) { for (int k = 0; k < pathsShaderTopS[j + 1].size();k++) { pathsShaderTopS[j + 1][k].setColor(ofColor(255, 255, 255)); pathsShaderTopS[j + 1][k].draw(); } } }masker.endMask(maskLayer); masker.draw(); } } //} }
void BackgroundWidget::paintEvent(QPaintEvent *) { QStyleOption opt; opt.init(this); QPainter painter(this); style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this); if (mHasShadow) { drawShadow(painter); } }
/** Calls all the methods to draw a complete Dialog * * This method must be called by the subclasses. */ void RainbruRPG::Terminal::Dialog::drawDialog(){ if (visible){ drawEmpty(); drawBorder(); drawShadow(); if (title.length()>0) drawTitle(); drawCaption(); drawButtons(); } }
// функция отрисовки корабля void Ship::draw(QPainter *painter) { QPen pen; // карандаш(определяет контур фигур) QBrush brush; // кисть(определяет заливку фигур) if(conflicted) // корабль конфликтный { drawShadow(painter); // рисуем "тень" brush.setColor(Qt::red); // выбираем цвет заливки } else if(active) // корабль не конфликтный, но активный { drawShadow(painter); // рисуем "тень" brush.setColor(Qt::green); // выбираем цвет заливки } else { brush.setColor(Qt::blue); // выбираем цвет заливки } brush.setStyle(Qt::SolidPattern); // определяем стиль закраски фигур (SolidPattern - сплошная закраска) pen.setWidth(2); // устанавливаем толщину карандаша if(active) pen.setColor(Qt::darkGreen); // выбираем цвет заливки else pen.setColor(Qt::gray); // выбираем цвет заливки painter->setPen(pen); // передаем карандаш рисовальщику painter->setBrush(brush); // передаем кисть рисовальщику // отрисовываем все "квадраты" корабля в зависимости от его ориентации for(int i = 0 ; i < size ; i++) { switch(dir) { case HORIZONTAL: painter->drawRect(i * CELL + drawPoint.x(), drawPoint.y(), CELL, CELL); break; case VERTICAL: painter->drawRect(drawPoint.x(), i * CELL + drawPoint.y(), CELL, CELL); break; } } }
/* * This function draws the scrolling list widget. */ static void _drawCDKScroll (CDKOBJS *object, boolean Box) { CDKSCROLL *scrollp = (CDKSCROLL *)object; /* Draw in the shadow if we need to. */ if (scrollp->shadowWin != 0) drawShadow (scrollp->shadowWin); drawCdkTitle (scrollp->win, object); /* Draw in the scolling list items. */ drawCDKScrollList (scrollp, Box); }
/* * This function draws the scale widget. */ static void _drawCDKFScale (CDKOBJS *object, boolean Box) { CDKFSCALE *scale = (CDKFSCALE *)object; int x; /* Draw the shadow. */ if (scale->shadowWin != 0) { drawShadow (scale->shadowWin); } /* Box the widget if asked. */ if (Box) { attrbox (scale->win, scale->ULChar, scale->URChar, scale->LLChar, scale->LRChar, scale->HChar, scale->VChar, scale->BoxAttrib); } /* Draw in the title if there is one. */ if (scale->titleLines != 0) { for (x=0; x < scale->titleLines; x++) { writeChtype (scale->win, scale->titlePos[x], x + 1, scale->title[x], HORIZONTAL, 0, scale->titleLen[x]); } } /* Draw the label. */ if (scale->labelWin != 0) { writeChtype (scale->labelWin, 0, 0, scale->label, HORIZONTAL, 0, scale->labelLen); } touchwin (scale->win); wrefresh (scale->win); /* Draw the field window. */ drawCDKFScaleField (scale); }
//------------------------------------------------------------- void Polaroidframe::draw(){ drawShadow(); drawFrames(); drawBottomBanner(); drawPic(); ofPushMatrix(); ofTranslate(pos); ofRotateZ(angle); ofSetColor(color); ofRect(frame); ofPopMatrix(); animation(); }
void Window::paintEvent(QPaintEvent *) { QPainter painter(this); if (_hasShadow) { drawShadow(painter, _borderWidth, _radius, QColor(120, 120, 120, 32), QColor(255, 255, 255, 0), 0.0, 1.0, 0.6, width(), height()); } else { painter.setBrush(QColor("#FFFFFF")); painter.setPen(Qt::NoPen); painter.setRenderHint(QPainter::Antialiasing); QPainterPath path; path.setFillRule(Qt::WindingFill); path.addRoundedRect(QRect(0, 0, width(), height()), _radius, _radius); painter.drawPath(path.simplified()); } }
/* * This draws the file selector widget. */ static void _drawCDKFselect (CDKOBJS *object, boolean Box GCC_UNUSED) { CDKFSELECT *fselect = (CDKFSELECT *)object; /* Draw in the shadow if we need to. */ if (fselect->shadowWin != 0) { drawShadow (fselect->shadowWin); } /* Draw in the entry field. */ drawCDKEntry (fselect->entryField, ObjOf(fselect->entryField)->box); /* Draw in the scroll field. */ drawCDKScroll (fselect->scrollField, ObjOf(fselect->scrollField)->box); }
/* * This draws the file selector widget. */ static void _drawCDKAlphalist (CDKOBJS *obj, boolean Box GCC_UNUSED) { CDKALPHALIST *alphalist = (CDKALPHALIST *)obj; /* Does this widget have a shadow? */ if (alphalist->shadowWin != 0) { drawShadow (alphalist->shadowWin); } /* Draw in the entry field. */ drawCDKEntry (alphalist->entryField, ObjOf (alphalist->entryField)->box); /* Draw in the scroll field. */ drawMyScroller (alphalist); }
/* * This draws the button widget. */ static void _drawCDKButton (CDKOBJS *object, boolean Box GCC_UNUSED) { CDKBUTTON *button = (CDKBUTTON *)object; /* Is there a shadow? */ if (button->shadowWin != (WINDOW *)NULL) { drawShadow (button->shadowWin); } /* Box the widget if asked. */ if (ObjOf (button)->box) { drawObjBox (button->win, ObjOf (button)); } drawCDKButtonText (button); wrefresh (button->win); }
void GSceneManager::drawShadow(GSceneNode* sn_p_drawNode, GLuint& glui_shaderProgram) { // Vertexliste zeichnen // Für alle Knoten zeichnen // Binde Modelmatrix bindUniformModelMatrix(sn_p_drawNode, glui_shaderProgram); for (GLuint glui_meshIter = 0; glui_meshIter < (sn_p_drawNode->returnNumOfMesh()); glui_meshIter++) { glBindVertexArray( sn_p_drawNode->returnMeshVA(glui_meshIter) ); glDrawElements(GL_TRIANGLES, sn_p_drawNode->returnNumOfMeshFaces(glui_meshIter)*3 , GL_UNSIGNED_INT, 0); } //Rekursiv alle Kinderknoten aufrufen und zeichnen for (unsigned int ui_numNode = 0; ui_numNode < sn_p_drawNode->returnChildrenVector().size(); ui_numNode++) { drawShadow(sn_p_drawNode->returnChildrenVector()[ui_numNode], glui_shaderProgram); } }
/* * This draws the marquee widget on the screen. */ static void _drawCDKMarquee (CDKOBJS *object, boolean Box) { CDKMARQUEE *widget = (CDKMARQUEE *)object; /* Keep the box information. */ ObjOf (widget)->box = Box; /* Do we need to draw a shadow??? */ if (widget->shadowWin != 0) { drawShadow (widget->shadowWin); } /* Box it if needed. */ if (Box) { drawObjBox (widget->win, ObjOf (widget)); } /* Refresh the window. */ wrefresh (widget->win); }
/* * This function draws the dialog widget. */ static void _drawCDKDialog (CDKOBJS *object, boolean Box) { CDKDIALOG *dialog = (CDKDIALOG *)object; int x = 0; /* Is there a shadow? */ if (dialog->shadowWin != 0) { drawShadow (dialog->shadowWin); } /* Box the widget if they asked. */ if (Box) { attrbox (dialog->win, dialog->ULChar, dialog->URChar, dialog->LLChar, dialog->LRChar, dialog->HChar, dialog->VChar, dialog->BoxAttrib); } /* Draw in the message. */ for (x=0; x < dialog->messageRows; x++) { writeChtype (dialog->win, dialog->infoPos[x], x + 1, dialog->info[x], HORIZONTAL, 0, dialog->infoLen[x]); } /* Draw in the buttons. */ drawCDKDialogButtons (dialog); /* Refresh the window. */ touchwin (dialog->win); wrefresh (dialog->win); }
void display(void) { //時間計測 static double time1, time2, drawTime, frame; if(ang <= 0.001) time1 = timeGetTime(); //カラーバッファ,デプスバッファのクリア glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity();//視点を変えるときはこの位置に必要 if(cos(M_PI * view.theta /180.0) >= 0.0)//カメラ仰角90度でビューアップベクトル切替 gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, 1.0, 0.0); else gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, -1.0, 0.0); //光源設定//'l'を押した後光源位置可変 glLightfv(GL_LIGHT0, GL_POSITION, lightPos); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_3D, texName[0]); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_3D, texName[1]); // シェーダプログラムの適用 glUseProgram(shaderProg); GLint scaleLoc = glGetUniformLocation(shaderProg, "scale"); glUniform1f(scaleLoc, scaleTex); GLint coordLoc = glGetUniformLocation(shaderProg, "coord"); if(coord == OBJECT) glUniform1i(coordLoc, 0); else glUniform1i(coordLoc, 1); GLint texLoc = glGetUniformLocation(shaderProg, "smpl3D"); glUniform1i(texLoc, 0);//GL_TEXTURE0を適用 draw0(); glUniform1i(texLoc, 1);//GL_TEXTURE1を適用 draw1(); // シェーダプログラムの適用を解除 glUseProgram(0); drawFloor0(10.0, 10.0, 10, 10); //影 drawShadow(); //回転角度更新 ang += dang; if(ang >= 360.0) { time2 = timeGetTime(); drawTime = (time2 - time1) * 0.001;//1回転当たりの描画時間 printf("描画時間 = %4.4f[s] \n", drawTime); frame = (360.0 / dang) / drawTime; printf("フレーム数 = %4.4f[fps] \n", frame); ang = 0.0; } if(flagHelp) { printf("矢印キーによるアフィン変換/光源移動 \n"); printf(" →,←:x軸 \n"); printf(" ↑,↓:y軸 \n"); printf(" [Shift]+↑,↓:z軸 \n"); printf(" 'r'を押した後:回転 \n"); printf(" 't'を押した後:平行移動 \n"); printf(" 's'を押した後:スケーリング \n"); printf(" 'l'を押した後、光源位置の移動可 \n"); printf("マウス操作で視点変更可 \n"); printf(" dolly:中央付近を左ボタンクリックで近づき,右ボタンクリックで遠ざかる \n"); printf(" pan:左横および右横を右ボタンクリックで注視点が左右に変化する \n"); printf(" tilt:真上および真下を右ボタンクリックで注視点が上下に変化する \n"); printf(" tumble:左右にドラッグすると視点が左右に変化する \n"); printf(" crane:上下にドラッグすると視点が上下に変化する \n"); printf(" zoom:左下を右ボタンクリックでズームイン \n"); printf(" 右下を右ボタンクリックでズームアウト \n"); printf("[Shift]+'r'でリセット \n"); printf("[F1]キー:テクスチャの倍率調整 \n"); printf("[F2]キー:座標系の切り替え \n"); flagHelp = false; } //終了 glutSwapBuffers(); }
void MapWidget::tfListenerProcess() { QPointF position; double heading = 0.0; bool shadow_changed = false; std::stringstream stream; while (ros::ok() && !tf_listener_thread_.interruption_requested()) { if (getRobotPosition("/agent1/base_link", position, heading)) { drawShadow(position,heading); shadow_changed = true; emit tfChangedSignal("agent1", position, heading); } if (getRobotPosition("/agent2/base_link", position, heading)) { drawShadow(position,heading); shadow_changed = true; emit tfChangedSignal("agent2", position, heading); } if (getRobotPosition("/agent3/base_link", position, heading)) { drawShadow(position,heading); shadow_changed = true; emit tfChangedSignal("agent3", position, heading); } if (getRobotPosition("/agent4/base_link", position, heading)) { drawShadow(position,heading); shadow_changed = true; emit tfChangedSignal("agent4", position, heading); } if (getRobotPosition("/agent5/base_link", position, heading)) { drawShadow(position,heading); shadow_changed = true; emit tfChangedSignal("agent5", position, heading); } if (getRobotPosition("/agent6/base_link", position, heading)) { drawShadow(position,heading); shadow_changed = true; emit tfChangedSignal("agent6", position, heading); } if (getRobotPosition("/agent7/base_link", position, heading)) { drawShadow(position,heading); shadow_changed = true; emit tfChangedSignal("agent7", position, heading); } if (getRobotPosition("/agent8/base_link", position, heading)) { drawShadow(position,heading); shadow_changed = true; emit tfChangedSignal("agent8", position, heading); } if (getRobotPosition("/agent9/base_link", position, heading)) { drawShadow(position,heading); shadow_changed = true; emit tfChangedSignal("agent9", position, heading); } if (getRobotPosition("/agent10/base_link", position, heading)) { drawShadow(position,heading); shadow_changed = true; emit tfChangedSignal("agent10", position, heading); } if (true == shadow_changed) { shadow_changed = false; emit mapChangedSignal(map_shadow_); } boost::this_thread::sleep(boost::posix_time::milliseconds(200)); }//while }
/*! Sets the client's active state to \a act. This function does only change the visual appearance of the client, it does not change the focus setting. Use Workspace::activateClient() or Workspace::requestFocus() instead. If a client receives or looses the focus, it calls setActive() on its own. */ void Client::setActive( bool act, bool updateOpacity_) { if ( active == act ) return; active = act; workspace()->setActiveClient( act ? this : NULL, Allowed ); if (updateOpacity_) updateOpacity(); if (isModal() && transientFor()) { if (!act) transientFor()->updateOpacity(); else if (!transientFor()->custom_opacity) transientFor()->setOpacity(options->translucentActiveWindows, options->activeWindowOpacity); } updateShadowSize(); if ( active ) { Notify::raise( Notify::Activate ); if (options->shadowEnabled(true)) { if (options->shadowEnabled(false)) { // Wait for inactive shadow to expose occluded windows and give // them a chance to redraw before painting the active shadow removeShadow(); drawDelayedShadow(); if (!isDesktop() && this != workspace()->topClientOnDesktop(desktop())) // If the newly activated window's isn't the desktop, wait // for its shadow to draw, then redraw any shadows // overlapping it. drawOverlappingShadows(true); } else drawShadow(); } } else { removeShadow(); if (options->shadowEnabled(false)) { if (this == workspace()->topClientOnDesktop(desktop())) { /* If the newly deactivated window is the top client on the * desktop, then the newly activated window is below it; ensure * that the deactivated window's shadow draws after the * activated window's shadow. */ if ((shadowAfterClient = workspace()->activeClient())) { drawShadowAfter(shadowAfterClient); } } else { drawDelayedShadow(); } } } if( !active ) cancelAutoRaise(); if( !active && shade_mode == ShadeActivated ) setShade( ShadeNormal ); StackingUpdatesBlocker blocker( workspace()); workspace()->updateClientLayer( this ); // active windows may get different layer // TODO optimize? mainClients() may be a bit expensive ClientList mainclients = mainClients(); for( ClientList::ConstIterator it = mainclients.begin(); it != mainclients.end(); ++it ) if( (*it)->isFullScreen()) // fullscreens go high even if their transient is active workspace()->updateClientLayer( *it ); if( decoration != NULL ) decoration->activeChange(); updateMouseGrab(); updateUrgency(); // demand attention again if it's still urgent }
void display(void) { //時間計測 curTime = timeGetTime(); float dt = (float)(curTime - lastTime) * 0.001;//secに変換 elapseTime1 += dt; elapseTime2 += dt; fps ++; printf("elapseTime2 = %f \n", elapseTime2); if(elapseTime1 >= 1.0) { printf("frame per sec = %d \n", fps); elapseTime1 = 0.0; fps = 0; } lastTime = curTime; //波データを作成し、投影マップを設定 if(kindWave == 0) makeWaveCircle(amp, elapseTime2); else if(kindWave == 1) makeWavePlane(amp, elapseTime2); else makeWaveMix(amp, elapseTime2); makeTexImage(); setTexture(); if(flagWireframe)//'w'でwireframeとsolid model切り替え { glPolygonMode(GL_FRONT,GL_LINE); glPolygonMode(GL_BACK,GL_POINT); } else glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); resize(width, height); //カラーバッファのクリア glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if(cos(M_PI * view.theta /180.0) > 0.0)//カメラ仰角90度でビューアップベクトル切替 gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, 1.0, 0.0); else gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, -1.0, 0.0); //光源設定//'l'を押した後光源位置可変 glLightfv(GL_LIGHT0, GL_POSITION, lightPos); //fragment shaderのユニフォーム変数インデックスを取得 GLint texLoc = glGetUniformLocation(shaderProg, "smplCaustics"); glUniform1i(texLoc, 0);//GL_TEXTURE0を適用 // シェーダプログラムの適用 glUseProgram(shaderProg); //描画 fish1.motion1(elapseTime2); fish2.motion1(elapseTime2); drawFloor0(10.0, 10.0, 10, 10); // シェーダプログラムの適用を解除 glUseProgram(0); //テクスチャ、半透明物体があるとき glDepthMask(GL_FALSE); //デプスバッファを書き込み禁止 glEnable(GL_BLEND);//アルファブレンディングを有効にする glBlendFunc(GL_DST_ALPHA,GL_ONE_MINUS_SRC_ALPHA);//色混合係数を決める //半透明描画 drawWave(); //テクスチャ、半透明物体があるとき glDepthMask(GL_TRUE); //デプスバッファの書き込みを許可 glDisable(GL_BLEND); //影 drawShadow(); drawLight(); if(flagHelp) { printf("矢印キーによる光源/投影中心移動 \n"); printf(" →,←:x軸 \n"); printf(" ↑,↓:y軸 \n"); printf(" [Shift]+↑,↓:z軸 \n"); printf(" 'l'を押した後、光源位置の移動可 \n"); printf("'w'でワイヤーフレームとソリッドモデル切り替え \n"); printf("マウス操作で視点変更可 \n"); printf(" dolly:中央付近を左ボタンクリックで近づき,右ボタンクリックで遠ざかる \n"); printf(" pan:左横および右横を右ボタンクリックで注視点が左右に変化する \n"); printf(" tilt:真上および真下を右ボタンクリックで注視点が上下に変化する \n"); printf(" tumble:左右にドラッグすると視点が左右に変化する \n"); printf(" crane:上下にドラッグすると視点が上下に変化する \n"); printf(" zoom:左下を右ボタンクリックでズームイン \n"); printf(" 右下を右ボタンクリックでズームアウト \n"); printf("[Shift]+'r'でリセット \n"); printf("[F1]キー:投影マッピングの視野角fovの増減 \n"); printf("[F2]キー:波の振幅amp \n"); printf("[F3]キー:波の種類(円形波と平面波)の切り替え \n"); printf("[F4]キー:円形波の個数切り替え \n"); flagHelp = false; } //終了 glutSwapBuffers(); }
void display(void) { //時間計測 static double time1, time2, drawTime, frame; if(ang <= 0.001) time1 = timeGetTime(); //カラーバッファ,デプスバッファのクリア glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity();//視点を変えるときはこの位置に必要 if(cos(M_PI * view.theta /180.0) >= 0.0)//カメラ仰角90度でビューアップベクトル切替 gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, 1.0, 0.0); else gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, -1.0, 0.0); if(flagWireframe)//'w'でwireframeとsolid model切り替え { glPolygonMode(GL_FRONT,GL_LINE); glPolygonMode(GL_BACK,GL_POINT); } else glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); setLight(); glUseProgram(shaderProg); //描画 draw0(); draw1(); drawFloor(20.0, 20.0, 20, 20); glUseProgram(0); //影 drawShadow(0);//光源0に対する影 drawShadow(1);//光源1に対する影 //光源描画 drawLight(); drawSpotlight(); //回転角度更新 ang += dang; if(ang >= 360.0) { time2 = timeGetTime(); //1回転当たりの描画時間 drawTime = (time2 - time1) * 0.001; frame = (360.0 / dang) / drawTime; printf("フレーム数 = %4.4f[fps] \n", frame); //フレームあたりの描画時間 drawTime = 1.0 / frame; printf("描画時間 = %4.4f[spf] \n", drawTime); ang = 0.0; } if(flagHelp) { printf("矢印キーによるアフィン変換/光源移動 \n"); printf(" →,←:x軸 \n"); printf(" ↑,↓:y軸 \n"); printf(" [Shift]+↑,↓:z軸 \n"); printf(" 'r'を押した後:回転 \n"); printf(" 't'を押した後:平行移動 \n"); printf(" 's'を押した後:スケーリング \n"); printf(" 'l'を押した後、光源位置の移動可 \n"); printf("'w'でワイヤーフレームとソリッドモデル切り替え \n"); printf("マウス操作で視点変更可 \n"); printf(" dolly:中央付近を左ボタンクリックで近づき,右ボタンクリックで遠ざかる \n"); printf(" pan:左横および右横を右ボタンクリックで注視点が左右に変化する \n"); printf(" tilt:真上および真下を右ボタンクリックで注視点が上下に変化する \n"); printf(" tumble:左右にドラッグすると視点が左右に変化する \n"); printf(" crane:上下にドラッグすると視点が上下に変化する \n"); printf(" zoom:左下を右ボタンクリックでズームイン \n"); printf(" 右下を右ボタンクリックでズームアウト \n"); printf("[Shift]+'r'でリセット \n"); printf("[Page Up]キー:回転角度+0.1 \n"); printf("[Page Dn]キー:回転角度-0.1 \n"); printf("[F1]:光源の減衰モード切りかえ \n"); printf("[F2]キー:スポットライト指数調整 \n"); printf("[F3]キー:スポットライトのカットオフ角度調整 \n"); flagHelp = false; } //終了 glutSwapBuffers(); }
void display(void) { //時間計測 static double time1, time2, drawTime, frame; if(ang <= 0.001) time1 = timeGetTime(); //カラーバッファ,デプスバッファのクリア glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity();//視点を変えるときはこの位置に必要 if(cos(M_PI * view.theta /180.0) >= 0.0)//カメラ仰角90度でビューアップベクトル切替 gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, 1.0, 0.0); else gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, -1.0, 0.0); //光源設定//'l'を押した後光源位置可変 glLightfv(GL_LIGHT0, GL_POSITION, lightPos); if(flagWireframe)//'w'でwireframeとsolid model切り替え { glPolygonMode(GL_FRONT,GL_LINE); glPolygonMode(GL_BACK,GL_POINT); } else glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, texName); //fragment shaderのユニフォーム変数texのインデックスを取得 GLint texLoc = glGetUniformLocation(shaderProg, "sampler"); glUniform1i(texLoc, 0);//GL_TEXTURE0を適用 // シェーダプログラムの適用 glUseProgram(shaderProg); //描画 draw0(); draw1(); drawFloor0(5.0, 5.0, 5, 5); // シェーダプログラムの適用を解除 glUseProgram(0); //影 drawShadow(); //回転角度更新 ang += dang; if(ang >= 360.0) { time2 = timeGetTime(); drawTime = (time2 - time1) * 0.001; frame = (360.0 / dang) / drawTime; printf("フレーム数 = %4.2f[fps] \n", frame); //フレームあたりの描画時間 drawTime = 1.0 / frame; printf("描画時間 = %4.5f[spf] \n", drawTime); ang = 0.0; } if(flagHelp) { printf("矢印キーによるアフィン変換/光源移動 \n"); printf(" →,←:x軸 \n"); printf(" ↑,↓:y軸 \n"); printf(" [Shift]+↑,↓:z軸 \n"); printf(" 'r'を押した後:回転 \n"); printf(" 't'を押した後:平行移動 \n"); printf(" 's'を押した後:スケーリング \n"); printf(" 'l'を押した後、光源位置の移動可 \n"); printf("マウス操作で視点変更可 \n"); printf(" dolly:中央付近を左ボタンクリックで近づき,右ボタンクリックで遠ざかる \n"); printf(" pan:左横および右横を右ボタンクリックで注視点が左右に変化する \n"); printf(" tilt:真上および真下を右ボタンクリックで注視点が上下に変化する \n"); printf(" tumble:左右にドラッグすると視点が左右に変化する \n"); printf(" crane:上下にドラッグすると視点が上下に変化する \n"); printf(" zoom:左下を右ボタンクリックでズームイン \n"); printf(" 右下を右ボタンクリックでズームアウト \n"); printf("[Shift]+'r'でリセット \n"); printf("[F1]キー:ラップモードの変更 \n"); printf("[F2]キー:透視投影マッピングの視野角の変更 \n"); printf("[F3]キー:投影中心の切り替え \n"); printf("[F4]キー:テクスチャの回転ON/OFF \n"); printf("[Page Up]キー:回転角度+0.1 \n"); printf("[Page Dn]キー:回転角度-0.1 \n"); flagHelp = false; } //終了 glutSwapBuffers(); }
void display(void) { //時間計測 static double time1, time2, drawTime, frame; if(ang <= 0.001) time1 = timeGetTime(); //step1:textureの作成 glClearColor( 0.7, 0.6, 0.6, 1.0 );//背景色 //framebuffer objectを有効化 glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, fbName ); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glViewport( 0, 0, TEX_WIDTH, TEX_HEIGHT ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluPerspective(fb_view.fovY, (double)TEX_WIDTH/(double)TEX_HEIGHT, fb_view.nearZ, fb_view.farZ); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); gluLookAt(fb_view.pos[0], fb_view.pos[1], fb_view.pos[2], fb_view.cnt[0], fb_view.cnt[1], fb_view.cnt[2], 0.0, 1.0, 0.0); glUseProgram(shaderProg2); draw1(); drawFloor(10.0, 10.0, 10, 10); glUseProgram(0); drawShadow(1); //framebuffer objectの無効化 glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 ); //step2:通常にrendering resize(width, height); glClearColor(0.2, 0.2, 0.3, 1.0);//背景色 //カラーバッファ,デプスバッファのクリア glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity();//視点を変えるときはこの位置に必要 if(cos(M_PI * view.theta /180.0) >= 0.0)//カメラ仰角90度でビューアップベクトル切替 gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, 1.0, 0.0); else gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, -1.0, 0.0); //光源設定//'l'を押した後光源位置可変 glLightfv(GL_LIGHT0, GL_POSITION, lightPos); //描画 glBindTexture(GL_TEXTURE_2D, texName); glUseProgram(shaderProg1); GLint samplerLoc = glGetUniformLocation(shaderProg1, "sampler"); glUniform1i(samplerLoc, 0);//GL_TEXTURE0を適用 draw0(); drawFloor(10.0, 10.0, 10, 10); glUseProgram(0); glBindTexture(GL_TEXTURE_2D, 0); //影 drawShadow(0); //回転角度更新 ang += dang; if(ang >= 360.0) { time2 = timeGetTime(); //1回転当たりの描画時間 drawTime = (time2 - time1) * 0.001; frame = (360.0 / dang) / drawTime; printf("フレーム数 = %4.2f[fps] \n", frame); //フレームあたりの描画時間 drawTime = 1.0 / frame; printf("描画時間 = %4.5f[spf] \n", drawTime); ang = 0.0; } if(flagHelp) { printf("矢印キーによるアフィン変換/光源移動 \n"); printf(" →,←:x軸 \n"); printf(" ↑,↓:y軸 \n"); printf(" [Shift]+↑,↓:z軸 \n"); printf(" 'r'を押した後:回転 \n"); printf(" 't'を押した後:平行移動 \n"); printf(" 's'を押した後:スケーリング \n"); printf(" 'l'を押した後、光源位置の移動可 \n"); printf("マウス操作で視点変更可 \n"); printf(" dolly:中央付近を左ボタンクリックで近づき,右ボタンクリックで遠ざかる \n"); printf(" pan:左横および右横を右ボタンクリックで注視点が左右に変化する \n"); printf(" tilt:真上および真下を右ボタンクリックで注視点が上下に変化する \n"); printf(" tumble:左右にドラッグすると視点が左右に変化する \n"); printf(" crane:上下にドラッグすると視点が上下に変化する \n"); printf(" zoom:左下を右ボタンクリックでズームイン \n"); printf(" 右下を右ボタンクリックでズームアウト \n"); printf("[Shift]+'r'でリセット \n"); printf("[Page Up]キー:回転角度+0.1 \n"); printf("[Page Dn]キー:回転角度-0.1 \n"); flagHelp = false; } //終了 glutSwapBuffers(); }