Win32 i DirectX. Czym jest DirectX ? API umożliwiające/ułatwiające zarządzanie głównie grafiką (2D/3D) i dźwiękiem zazwyczaj wykorzystywane w grach.

Slides:



Advertisements
Podobne prezentacje
Direct3D 9 Adam Sawicki Luty 2008.
Advertisements

Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. The OWASP.
Programowanie Windows
Jarosław Kuchta Komunikaty w Windows.
1 Dzisiejszy wykład Wzorce funkcji Wzorce klas. 2 Wzorce Często pojawia się konieczność pisania podobnych funkcji lub klas operujących na argumentach.
1 Dzisiejszy wykład Wzorce funkcji Wzorce klas Tablica asocjacyjna Składowe statyczne.
Analiza wywołania i przebiegu przerwań w systemie Linux
tworzenie połączeń sieciowych
Java Server Faces Tomasz Nowak.
ALLEGRO PIERWSZA GRA: WYŚCIG
DirectX Jacek Filipek IUz gr. 21.
Java vs C# Michał Prządka Tomasz Nowak
STL - Standard Template Library Autor: Błażej Chodarcewicz rainbow.mimuw.edu.pl/~bc189380/STL/
Mirosław Ochodek Sponsorzy: JFace Jak jeszcze szybciej tworzyć interfejsy? ECESIS Eclipse Community Education Project An.
Team Building Copyright, 2003 © Jerzy R. Nawrocki Requirements Engineering Lecture.
1 Przestrzenie nazw. 2 Globalna przestrzeń nazw jest jedna W programach pisanych przez wiele osób, lub korzystających z bibliotek napisanych przez innych,
Programowanie Lokalnych Aplikacji .NET
Ćwiczenie (1) Dostosuj poniższy program do swojego programy zaliczeniowego. (Plik z programem jest dostępny pod adresem
Rozdział 10: Item view classes
Współprogramy Plan: Motywacja Składnia Scenariusz obiektu współprogramu Przykłady Producent – konsument ( instrukcja attach ) Czytelnik -pisarze ( instukcja.
142 JAVA – sterowanie i wątki public class A20 extends javax.swing.JApplet implements ActionListener { private int licznik = 0; private JTextField t =
Exact Software Poland Sp z o.o. Adam Sasin AXA TUiR
„Tworzenie aplikacji sieciowych w języku Java”
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Tworzenie aplikacji sieciowych w języku Java Networking Prezentacja.
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Tworzenie aplikacji sieciowych w języku Java Exceptions Prezentacja.
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Tworzenie aplikacji sieciowych w języku Java Threads Prezentacja.
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Tworzenie aplikacji sieciowych w języku Java Java – overview.
Programowanie grafiki 3D
1 Building Integration System - Training Internal | ST-IST/PRM1 | 02/2008 | © Robert Bosch GmbH All rights reserved, also regarding any disposal,
Wstępna struktura serwisu internetowego BTW events wersja 1.0 Warszawa,
Wprowadzenie do grafiki komputerowej
YOUR PARTNER IN WIND ENERGY PROJECTS
Porysujmy trochę czyli Łączenie SQLa, AutoCADa i Delphi
XNA Szybki start Kurs ITA-106 (Grafika i multimedia) – Moduł 1
Programowanie w Środowisku Windows
PRZELICZNIK DŁUGOŚCI w programie NetBeans IDE autorzy: Michał Mrozek i Marcin Mrugała 2012.
Podstawy WINAPI - MessageBOX
Grafika 3D w C++/DirectX Oraz kombinowane XNA
Przekazywanie argumentów
Light pre-pass renderer
Odwzorowywanie tekstur
Programowanie strukturalne i obiektowe
Prezentacja Zbigniew Kosiński.
Podstawy programowania
Podstawy licencjonowania Exchange, SharePoint oraz Lync.
Warsztaty C# Część 2 Grzegorz Piotrowski Grupa.NET PO
KINECT – czyli z czym to się je?. Damian Zawada
Turbo Pascal umożliwia wykorzystanie w programach zbiorów teoriomnogościowych, których elementy muszą należeć do pewnego określonego typu. Typ zbiorowy.
Pliki elementowe – A. Jędryczkowski © 2007 Turbo Pascal umożliwia wykorzystanie w programach plików elementowych. Pliki takie zawierają informację zakodowaną
Budowa programu #include /*instrukcje preprocesora */ #include int main(void) { /*podstawowa funkcja programu */ int a=1; /*deklaracja i inicjalizacja.
Ecological song Piosenka ekologiczna.
HTML cz.3 Tabele cd. oraz ramki
Temat 1: Umieszczanie skryptów w dokumencie
Programowanie komponentowe jesień-zima 2013
Warsztaty użytkowników programu PLANS – Karwia06 Język makropoleceń JMP programu PLANS Część I mgr inż. Tomasz Zdun.
- przykłady.
Instrukcja switch switch (wyrażenie) { case wart_1 : { instr_1; break; } case wart_2 : { instr_2; break; } … case wart_n : { instr_n; break; } default.
Instrukcja switch switch (wyrażenie) { case wart_1 : { instr_1; break; } case wart_2 : { instr_2; break; } … case wart_n : { instr_n; break; } default.
Instrukcje sterujące: W instrukcjach sterujących podejmowane są decyzje o wykonaniu tych czy innych instrukcji programu. Decyzje te podejmowane są w zależności.
Rozdział 3: Bezpieczeństwo w sieci opartej na systemie Windows 2000.
TROCHĘ HISTORII Marek Zając PO CO UŻYWAĆ OPENCL? Marek Zając.
Algorytm testujący czy liczba jest liczbą pierwszą czy złożoną
Silverlight 4 dla Windows Phone 7
1.
Department | 1/11/2013 | © Robert Bosch GmbH All rights reserved, also regarding any disposal, exploitation, reproduction, editing, distribution,
Wydział Elektroniki Kierunek: AiR Zaawansowane metody programowania Wykład 6.
Systemy operacyjne Wykład 3a Działanie aplikacji okienkowej dr inż. Wojciech Bieniecki Instytut Nauk Ekonomicznych i Informatyki
Tworzenie graficznego interfejsu użytkownika (GUI)
Komunikaty Windows Jacek Matulewski 22 września 2012 Programowanie Windows
Tworzenie graficznego interfejsu użytkownika (GUI)
Zapis prezentacji:

Win32 i DirectX

Czym jest DirectX ? API umożliwiające/ułatwiające zarządzanie głównie grafiką (2D/3D) i dźwiękiem zazwyczaj wykorzystywane w grach.

Komponenty DirectX DirectDraw – obsługuje grafikę rastrową (bitmapową), następcą jest Direct2D, Direct3D (D3D) – obsługuje grafikę 3D, DirectGI – umożliwia bezpośrednią obsługę sprzętu do grafiki, DirectInput – przetwarza dane pochodzące z klawiatury, myszy, dżojstika lub innych kontrolerów, DirectPlay – wykorzystywany w grach sieciowych, DirectSound – służy do odtwarzania i nagrywania dźwięku, DirectMusic – odtwarza muzykę stworzoną przy użyciu programu DirectMusic Producer, DirectShow – służy do odtwarzania plików audio i wideo, DirectSetup – obsługuje instalację poszczególnych komponentów DirectX, DirectX Media Objects – spełnia podobne zadania, jak DirectShow, DirectWrite - wspomaga renderowanie tekstu. DirectCompute - umożliwia wykorzystanie DirectX do obsługi techniki GPGPU.

Jak wyświetlić kolorowy trójkąt? Okno GraphicsDevice Efekt Trójkąt

Referencje #include #include "resource.h"

Wyświetlenie okna int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow ) { if( FAILED( InitWindow( hInstance, nCmdShow ) ) ) return 0; // Main message loop MSG msg = {0}; while( WM_QUIT != msg.message ) { if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } else { Render(); } CleanupDevice(); return ( int )msg.wParam; }

Wyświetlenie okna HRESULT InitWindow( HINSTANCE hInstance, int nCmdShow ) { WNDCLASSEX wcex; wcex.cbSize = sizeof( WNDCLASSEX ); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.lpszMenuName = NULL; wcex.lpszClassName = L"TutorialWindowClass"; if( !RegisterClassEx( &wcex ) ) return E_FAIL; // Create window g_hInst = hInstance; RECT rc = { 0, 0, 640, 480 }; AdjustWindowRect( &rc, WS_OVERLAPPEDWINDOW, FALSE ); g_hWnd = CreateWindow( L"TutorialWindowClass", L"Direct3D 11 Tutorial 2: Rendering a Triangle", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.left, rc.bottom - rc.top, NULL, NULL, hInstance, NULL ); if( !g_hWnd ) return E_FAIL; ShowWindow( g_hWnd, nCmdShow ); return S_OK; }

Wyświetlenie okna LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) { PAINTSTRUCT ps; HDC hdc; switch( message ) { case WM_PAINT: hdc = BeginPaint( hWnd, &ps ); EndPaint( hWnd, &ps ); break; case WM_DESTROY: PostQuitMessage( 0 ); break; default: return DefWindowProc( hWnd, message, wParam, lParam ); } return 0; }

GraphicsDevice Należy stworzyć 4 obiekty: - Device - Immediate context - Swap chain - Viewport

Device, chain & context DXGI_SWAP_CHAIN_DESC sd; ZeroMemory( &sd, sizeof(sd) ); sd.BufferCount = 1; sd.BufferDesc.Width = 640; sd.BufferDesc.Height = 480; sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; sd.BufferDesc.RefreshRate.Numerator = 60; sd.BufferDesc.RefreshRate.Denominator = 1; sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; sd.OutputWindow = g_hWnd; sd.SampleDesc.Count = 1; sd.SampleDesc.Quality = 0; sd.Windowed = TRUE; if( FAILED( D3D11CreateDeviceAndSwapChain( NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, 0, featureLevels, numFeatureLevels, D3D11_SDK_VERSION, &sd, &g_pSwapChain, &g_pd3dDevice, NULL, &g_pImmediateContext ) ) ) { return FALSE; }

Viewport D3D11_VIEWPORT vp; vp.Width = (FLOAT)width; vp.Height = (FLOAT)height; vp.MinDepth = 0.0f; vp.MaxDepth = 1.0f; vp.TopLeftX = 0; vp.TopLeftY = 0; g_pImmediateContext->RSSetViewports( 1, &vp );

Efekty/shadery // // Vertex Shader // float4 VS( float4 Pos : POSITION ) : SV_POSITION { return Pos; } // // Pixel Shader // float4 PS( float4 Pos : SV_POSITION ) : SV_Target { return float4( 1.0f, 1.0f, 0.0f, 1.0f ); // Yellow, with Alpha = 1 }

Efekty/shadery HRESULT CompileShaderFromFile( WCHAR* szFileName, LPCSTR szEntryPoint, LPCSTR szShaderModel, ID3DBlob** ppBlobOut ) { HRESULT hr = S_OK; DWORD dwShaderFlags = D3DCOMPILE_ENABLE_STRICTNESS; ID3DBlob* pErrorBlob; hr = D3DX11CompileFromFile( szFileName, NULL, NULL, szEntryPoint, szShaderModel, dwShaderFlags, 0, NULL, ppBlobOut, &pErrorBlob, NULL ); if( FAILED(hr) ) { if( pErrorBlob != NULL ) OutputDebugStringA( (char*)pErrorBlob->GetBufferPointer() ); if( pErrorBlob ) pErrorBlob->Release(); return hr; } if( pErrorBlob ) pErrorBlob->Release(); return S_OK; }

Rysowanie werteksów struct SimpleVertex { XMFLOAT3 Pos; }; void Render() { // Clear the back buffer float ClearColor[4] = { 0.0f, 0.125f, 0.3f, 1.0f }; // red,green,blue,alpha g_pImmediateContext->ClearRenderTargetView( g_pRenderTargetView, ClearColor ); // Render a triangle g_pImmediateContext->VSSetShader( g_pVertexShader, NULL, 0 ); g_pImmediateContext->PSSetShader( g_pPixelShader, NULL, 0 ); g_pImmediateContext->Draw( 3, 0 ); // Present the information rendered to the back buffer to the front buffer (the screen) g_pSwapChain->Present( 0, 0 ); }

Efekt końcowy