OpenGL V.

Slides:



Advertisements
Hasonló előadás
BKÁE- ÁFK, BCE-KIK Közigazgatás szervezéstan és technológia A funkcionális, a divizionális, a programorientált és a team- orientált szervezet bemutatása.
Advertisements

BINARIT TIMESHEET Több, mint munkaidő nyilvántartás Virág Zsolt (BINARIT Informatikai Kft.)„Hogyan legyek milliomos?” konferencia – BKIK ( )
Grafikus hardver/szoftver alapok Szirmay-Kalos László.
Forrás: Reiter István C_Sharp programozás lépésről lépésre (frissített tartalommal )
Szécsi László 3D Grafikus Rendszerek 15. előadás
GPGPU – CUDA 1..
Nagyméretű állományok küldése
OpenCL bővítmények.
2. előadás Viszonyszámok
Áramlástani alapok évfolyam
Általános célú számítások a GPU-n
Komplex természettudomány 9.évfolyam
Számítógépes hálózati alapismeretek - vázlat
OpenGL 2. gyakorlat Valasek Gábor
Vásárolj úgy, ahogy tetszik!
Kiskunfélegyháza Város Polgármesteri Hivatal
A KINOVEA mozgáselemző rendszer használata
Monte Carlo módszerek.
Programozás I. Gyakorlás egydimenziós tömbökkel Többdimenziós tömbök
 : a forgásszög az x tengelytől pozitív forgásirányában felmért szög
Az Országos Egészségfejlesztési Intézet fejlesztési projektjei az iskolai egészségfejlesztés területén DR. TÖRÖK KRISZTINA.
Végeselemes modellezés matematikai alapjai
Monte Carlo integrálás
Lexikális elemző: lex (flex)
Eloszlásjellemzők I.: Középértékek
Komplex természettudomány 9.évfolyam
Vállalati brosúra A cég általános célkitűzése
Általános kémia
Munka és Energia Műszaki fizika alapjai Dr. Giczi Ferenc
 : a forgásszög az x tengelytől pozitív forgásirányában felmért szög
A gyermeki személyiségfejlődés nyomon követése a gyakorlatban
De ki nyújt ma minőségi szolgáltatást?
Tartalékolás 1.
Adatbázis-kezelés (PL/SQL)
INFOÉRA 2006 Véletlenszámok
Varianciaanalízis- ANOVA (Analyze Of VAriance)
OpenGL III.
OpenGL II.
Közigazgatási alapvizsga a Probono rendszerben
? A modell illesztése a kísérleti adatokhoz
Kiskunfélegyháza Város Polgármesteri Hivatal
Dr. habil. Gulyás Lajos, Ph.D. főiskolai tanár
Az elemi folyadékrész mozgása
Életfeltételek, források
IDŐZÍTÉS PROGRAMOZÁSA
Hosszúidejű Spektrogram mérés az ELQ 35 - el
3. előadás.
A Microsoft SharePoint testreszabása Online webhely
Tremmel Bálint Gergely ELTE-TTK, környezettudomány MSc
2. A KVANTUMMECHANIKA AXIÓMÁI
Az iskolai szervezet és fejlesztése
A szállítási probléma.
Dr. Varga Beatrix egyetemi docens
Játékosított keretrendszerben történő tanulás log-adatainak elemzése
Hosszúidejű Spektrogram mérés az ELQ 30A+ - al
Matematika II. 5. előadás Geodézia szakmérnöki szak 2015/2016. tanév
Családi vállalkozások
Űrkutatás súlytalanság.
3. előadás.
Szöveges adatok tárolása
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Bevezetés Tematika Számonkérés Irodalom
Vektorok © Vidra Gábor,
A geometriai transzformációk
Mesterséges intelligencia
Várhatóérték, szórás
Algoritmusok.
Munkaszámos munkaidő nyilvántartás
Az európai gazdaság: együtt erősebb
Egyenletesen változó mozgás
Előadás másolata:

OpenGL V

Compute shader

Compute shader Miért jó? Általános célú számítások Elérhetőek az OpenGL objektumok GLSL nyelvű shader

Compute shader Shader storage buffer object Általános célú buffer Tetszőlegesen írható és olvasható! C szerűen strukturálható const unsigned int particlesNum = 1024; struct xyzw { float x, y, z, w; }; Gluint positionBuffer; glGenBuffers(1, &positionBuffer); glBindBuffer(GL_SHADER_STORAGE_BUFFER, positionBuffer); glBufferData(GL_SHADER_STORAGE_BUFFER, particlesNum * sizeof(xyzw), NULL, GL_STATIC_DRAW);

Compute shader Shader storage buffer object Host oldali elérés xyzw* pos = (xyzw*)glMapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, particlesNum * sizeof(xyzw), GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT); for (unsigned int i = 0; i < particlesNum; ++i) { pos[i].x = 2.0f * ((float)rand() / (float)RAND_MAX) - 1.0f; pos[i].y = 2.0f * ((float)rand() / (float)RAND_MAX) - 1.0f; pos[i].z = 2.0f * ((float)rand() / (float)RAND_MAX) - 1.0f; pos[i].w = 1.0f; } glUnmapBuffer(GL_SHADER_STORAGE_BUFFER);

Compute shader Shader storage buffer object Beköthető az indexelt pontok egyikére Beköthető geometriai leíróként Elérés a shaderből glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, positionBuffer); glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, positionBuffer); glVertexAttribPointer((GLuint)0, 4, GL_FLOAT, GL_FALSE, sizeof(xyzw), (GLvoid*)0); layout(std430, binding = 0) buffer positionBuffer { vec4 position[]; };

Compute shader Munka méret 1-3 dimenziós probléma tér Minden shader példány egyedi azonosítót kap A shader példányok csoportokba rendezhetőek A munkacsoport méretet a shaderben adjuk meg // Munkacsoportonkénti szálak száma const unsigned int workGroupSize = 256; // Elindítandó munkacsoportok száma glDispatchCompute(particlesNum / workGroupSize, 1, 1); layout(local_size_x = 256, local_size_y = 1, local_size_z = 1) in;

Compute shader Munka méret Alternatív definíció Shaderbeli definíció glDispatchComputeGroupSize( num_groups_x, num_groups_y, num_groups_z, work_group_size_x, work_group_size_y, work_group_size_z); layout(local_size_variable) in;

Compute shader Előre definiált változók Munkacsoporton osztott változók Szinkronizáció munkacsoporton in uvec3 gl_NumWorkGroups // Munkacsoportok száma const uvec3 gl_WorkGroupSize // Munkacsoport méret in uvec3 gl_WorkGroupID // Aktuális munkacsoport azonosító in uvec3 gl_LocalInvocationID // Munkacsoporton belüli azonosító in uvec3 gl_GlobalInvocationID // Globális azonosító int uint gl_LocalInvocationIndex // Lineáris munkacsoporton belüli id layout(shared) vec4 xyzw[cont size]; memory_barrier_shared();

Példa: Részecske rendszer

Példa: Részecske rendszer #version 430 #extension GL_ARB_compute_shader : enable #extension GL_ARB_shader_storage_buffer_object : enable layout(std430, binding = 0) buffer positionBuffer { vec4 position[]; }; layout(std430, binding = 1) buffer velocityBuffer vec4 velocity[]; layout(local_size_x = 256, local_size_y = 1, local_size_z = 1) in; const float dt = 0.01; // …

Példa: Részecske rendszer // … void main() { uint gid = gl_GlobalInvocationID.x; vec3 pos = position[gid].xyz; vec3 vel = velocity[gid].xyz; vec3 npos = pos + vel * dt; if(npos.x < -1.0 || npos.x > 1.0) vel.x = -vel.x; if(npos.y < -1.0 || npos.y > 1.0) vel.y = -vel.y; if(npos.z < -1.0 || npos.z > 1.0) vel.z = -vel.z; position[gid].xyz = npos; velocity[gid].xyz = vel; }

Feladat A részecskék kövessenek egy attraktort Az attraktor legyen vezérelhető Egérrel vagy kurzor gombokkal

Feladat: N-Body Két test közötti gravitációs erő Eredő erő Gyorsulás m_i, m_j : tömeg r_ij : az i testből a j testbe mutató vektor G : gravitációs állandó a túlzott közelség ne okozzon gondot