1 / 19

Přednáška 6 17.3.2014 Jiří Šebesta

Počítače a programování 2. Přednáška 6 17.3.2014 Jiří Šebesta. TÉMA – grafika ve Visual C++. GDI, OpenGL, DirectX Událost Paint GDI - příklady. GDI, DirectX, OpenGL (1/2). GDI (Graphics Device Interface): 2D grafický ovladač

Download Presentation

Přednáška 6 17.3.2014 Jiří Šebesta

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Počítače a programování 2 Přednáška 6 17.3.2014 Jiří Šebesta

  2. TÉMA – grafika ve Visual C++ GDI, OpenGL, DirectX Událost Paint GDI - příklady

  3. GDI, DirectX, OpenGL (1/2) • GDI (Graphics Device Interface): • 2D grafický ovladač • standardní součást Widowssloužící k reprezentaci grafických objektů a jejich transformací do výstupních zařízení (obrazovka, tiskárna) • zajišťuje kreslení čar, křivek a dalších grafických objektů, renderování fontů, správu barevných palet atd. • nezajišťuje přímo vykreslování vlastních Windows objektů (okna, dialogy, menu, atd.), GDI je k těmto úkolům využívána uživatelským subsystémem (v knihovně user32.dll) • všechny dále uvedené příklady jsou řešené pomocí GDI

  4. DirectX (Graphics Device Interface): • - sada knihoven od Microsoftu pro funkce aplikačních rozhraní API pro Windows, mezi které jsou zařazeny i knihovny pro grafické výstupy DirectDraw (vykreslování 2D grafiky do okna, není jednoduché jako u GDI, avšak rychlejší) a Direct3D (výkonný 3D engine) GDI, DirectX, OpenGL (2/2) • OpenGL (Open Graphics Library): • - otevřenýAPI standard pro tvorbu aplikací počítačové grafiky ve3D, zdarma použivatelný. Hlavní výhodou je velký počet tutoriálů a návodůpro grafické výstupy.

  5. Většina ovládacích prvků (objektů) včetně vlastního formuláře nabízí aplikaci události Paint, která umožňuje grafický výstup v rámci plochy daného objektu. GDI - událost Paint (1/3) vložení události Paint do formuláře aplikace hlavička události Paint aktivace grafického objektu se jménem e private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) { Graphics ^ g = e->Graphics; }

  6. Modrá a červená čára ve formulářovém okně nový objekt pera se jménem MyPen GDI - událost Paint (2/3) private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) { Graphics ^ g = e->Graphics; Pen^ MyPen = gcnew Pen(Color::Blue,3.0f); Point point_A = Point(100,100); Point point_B = Point(300,300); e->Graphics->DrawLine(MyPen, point_A, point_B); e->Graphics->DrawLine(gcnew Pen(Color::Red,3.0f), 100, 300, 300, 100); } barva tloušťka bod se jménem point_A souřadnice x souřadnice y vykreslení čáry z point_A do point_B perem MyPen alternativní vykreslení čáry s přímou definicí pero XA YA XB YB

  7. Událost Paint se volá při vykreslování okna GDI - událost Paint (3/3) A=[100, 100] B=[300, 300] Projekt: Ex108

  8. Kreslení do objektu PictureBox ve smyčce GDI - příklady (1/11) • Událost Paint v PictureBoxu se jménem PictureBox

  9. private: System::Void PictureBox_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) { Graphics ^g = e->Graphics; Pen^ BluePen = gcnew Pen(Color::Blue,2.0f); Pen^ RedPen = gcnew Pen(Color::Red,2.0f); Pen^ MyPen; Point point_A = Point(200,200); Point point_B; intangle=0;// starting angle for radial lines intanstep=5;// step of angle intanstop=360;// ending angle for rad. lines intwidth=200;// initial width of rectangle intwstep=10;// step of rectangle width intwstop=400;// ending width of rectangle MyPen=RedPen;// initial pen is red GDI - příklady (2/11)

  10. while (angle<=anstop)//radial lines { point_B =Point((int)(200+100*cos(angle*PI/180.0)),(int)(200+100*sin(angle*PI/180.0))); e->Graphics->DrawLine(BluePen, point_A, point_B); angle+=anstep; } while (width<=wstop)//rectangles { e->Graphics->DrawRectangle(MyPen, 200-width/2, 200-width/2, width, width); width+=wstep; if (MyPen==RedPen)//color change MyPen=BluePen; else MyPen=RedPen; }} GDI - příklady (3/11) Projekt: Ex109

  11. Volání obnovení (překreslení) Refresh() + dialog ColorDialog GDI - příklady (4/11) • Při změně hodnoty v NUD se změní globální proměnná a udávající úhel koláče ve stup-ních a volá se refresh (překre-slení) PictureBoxu, ve kte-rém je koláč vykreslován. • Při stisku tlačítka Btn_Color je vyvolán ColorDialog, na-stavená barva se vloží do pro-měnné MyBrush, která definuje barvu koláče a následně se zavolá refresh (překreslení) koláče.

  12. #pragma once intangle=20;// global variable – angle of pie namespace Ex110{ public ref class Form1 : public System::Windows::Forms::Form { ……… private: System::Windows::Forms::Button^ Btn_Color; private: SolidBrush^ MyBrush;// private variable of Form1 – MyBrush ……… #pragma endregion private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {//MyBrush inicialization during Form1 loading - blue MyBrush = gcnew SolidBrush(Color::Blue); } GDI - příklady (5/11)

  13. private: System::Void PB_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) { Graphics ^ g = e->Graphics; e->Graphics->Clear(System::Drawing::Color::White); e->Graphics->FillPie(MyBrush,100,100,200,200,0,-a); } private: System::Void NUD_ValueChanged(System::Object^ sender, System::EventArgs^ e) { a = System::Convert::ToInt32(this->NUD->Value); this->PB->Refresh(); } GDI - příklady (6/11) vykreslení koláče mazání grafiky v objektu, plátno bílé poč. úhel úhlová délka koláče překre-slení koláče obdélník koláče

  14. private: System::Void Btn_Color_Click(System::Object^ sender, System::EventArgs^ e) { this->CDialog->ShowDialog(); MyBrush->Color = this->CDialog->Color; this->PB->Refresh(); } GDI - příklady (7/11) otevření dialogu barvy přiřazení barvy štětci pro kreslení koláče překreslení koláče Projekt: Ex110

  15. Výběr kreslených objektů: Drawxxx() GDI - příklady (8/11) • Příklad: DrawArc() e->Graphics->DrawArc(MyPen,180,10,100,100,-135,180);

  16. Text jako grafický objekt: DrawString() GDI - příklady (9/11) System::Drawing::Font^ MyTextFont = gcnewSystem::Drawing::Font("Arial",16); SolidBrush^ MyTextBrush = gcnew SolidBrush(Color::Black); String^ DrawRect_string = "DrawRectangle"; e->Graphics->DrawString(DrawRect_string, MyTextFont, MyTextBrush, 10, 130); e->Graphics->DrawString("DrawArc", MyTextFont, MyTextBrush, 190, 130); nový font string přes proměnnou string přímo jako parametr nový štětec pro text počáteční poloha textu

  17. Pole bodů pro DrawPolygon(), DrawCurve()atd. GDI - příklady (10/11) array<Point>^ PolyPoints = {Point(670,10), Point(690,50), Point(750,50), Point(670,100), Point(590,50), Point(640,50)}; e->Graphics->DrawPolygon(MyPen, PolyPoints);

  18. Výběr kreslených objektů: Fillxxx() GDI - příklady (11/11) • Příklad: FillPolygon() e->Graphics->FillPolygon(MyBrush, PolyPoints); Projekt: Ex111

  19. TÉMA NÁSLEDUJÍCÍ PŘEDNÁŠKY Úvod do Matlabu DĚKUJI ZA POZORNOST

More Related