Tåke (Fog) OpenGL innebygde tåke støtte som Grunnleggende Grafikk Våren 2007 Tåke og OpenGL Extensions Blender hver piksel med tåke fargen, bruker blend faktor som er avhengig av distansen til kamera, tettheten til tåken, og valgt tåke modus. Arnt Roald Kristoffersen arntrk@hin.no D3390 Color out = blendfactor x Color in + (1-blendFactor) Color fog ITE 1605 Grunnleggende Grafikk for Spillprogrammering og ITE1530 Datamaskingrafikk Tåke pname og param Må enable tåke glenable(gl_fog); Sett tåke tilstander glfog{fi(pname, param) glfog{fiv(pname, *param)
Tåke Modus Color out = blendfactor x Color in + (1-blendFactor) Color fog 3 ligninger som bestemmer blendfactor GL_LINEAR blendfactor = (end depth)/(end-start) GL_EXP (-density x depth) blendfactor = e GL_EXP2 (-density x depth)2 blendfactor = e Tåke Koordinater Beregne tåke på bakgrunn av Høyde fra hav overflaten Manipulerer på depth verdien density - GL_FOG_DENSITY start - GL_FOG_START end - GL_FOG_END Tåke Koordinater Extension navn EXT_fog_coord Kommando glfogcoord{fd(coord) glfogcoord{fdv(*coord) Token Tåke Koordinater Bytte til bruke tåke koordinater glfogi(gl_fog_coord_src, GL_FOG_COORD) Bytte tilbake til beregning av dybde verdi glfogi(gl_fog_coord_src, GL_FRAGMENT_DEPTH) GL_FOG_COORD_SRC_EXT GL_FOG_COORD_EXT GL_FRAGMENT_DEPTH_EXT
Hvorfor trenger vi Extension Windows plattformen Støtter OpenGL 1.1 utgitt i 1996 OpenGL 2.1 Utgitt den August 2, 2006 Eneste mulighet for å få tilgang til OpenGL funksjonalitet utover versjon 1.1, under Windows En spesifikasjon Extension Navn Hva er extension Se neste slide Navn Streng Bruk med glgetstring(gl_extensions) Funksjoner Kan introdusere en eller flere funksjoner Tokens Kan definere en eller flere tokens eller enum Prefix ARB EXT ATI ATIX NV SGI SGIS SUN WIN Meaning/Vendor Extension Names Extension approved by OpenGL's Archtectural Review Board (First introduced with OpenGL 1.2) Extension agreed upon by more then one OpenGL vendor ATI Technologies ATI Technologies (experimental) NVIDIA Corporation Silicon Graphics Silicon Graphics (spesialized) Sun Microsystems Microsoft Offisielle OpenGL Extenstion Register http://oss.sgi.com/projects/ogl-sample/registry/ Bruke en Extension 1) Finne ut om en extension er støttet 2) Få tak i entry point for hver funksjonene som du ønsker å bruke 3) Definere de token som du skal bruke
Støttes Extension Funksjon Entry Point bool checkextension(char *extensionname) { char *extensionlist = (char *)glgetstring(gl_extensions); if (!extensionname!extensionlist) return false; while (*extensionlist) { unsigned int length = strcspn(extensionlist, " "); if (strlen(extensionname) == length && strncmp(extensionname, extensionlist, length) == 0) { return true; extensionlist += length + 1; Extension funksjonen (EXT_fog_coord) typedef void (APIENTRY * PFNGLFOGCOORDFPROC) (Glfloat); Må inkludere windows.h -> (APIENTRY) Deklerasjon av extension PFNGLFOGCOORDFPROC myglfogcoordf; Finne funksjonens Entry Point myglfogcoordf = (PFNGLFOGCOORDFPROC) wglgetprocaddress("glfogcoordfext"); return false; Deklarasjon av enum For EXT_fog_coord #define GL_FOG_COORD_SRC 0x8450 #define GL_FOG_COORD 0x8451 #define GL_FRAGMENT_DEPTH 0x8452 CGfxOpenGL.h Eksempel EXT_fog_coord // extension function and constants typedef void (APIENTRY * PFNGLFOGCOORDFPROC) (GLfloat); #define GL_FOG_COORD_SRC 0x8450 #define GL_FOG_COORD 0x8451 #define GL_FRAGMENT_DEPTH 0x8452 class CgfxOpenGL { private: PFNGLFOGCOORDFPROC myglfogcoordf; ; CgfxOpenGL.cpp CgfxOpenGL::CGfxOpenGL() { myglfogcoordf = NULL; bool CGfxOpenGL::Init() { if (checkextension("gl_ext_fog_coord")) { myglfogcoordf = (PFNGLFOGCOORDFPROC) wglgetprocaddress("glfogcoordfext");
WGL Extensions Introduksjon til GLee Spesific for Windows system Isteden for const GLubyte *glgetstring(gl_extensions) Så bruker vi const char *wglgetextensionsstringarb(hdc hdc) HDC er handler til rendringskonteksten GLee OpenGL Easy Extension library http://elf-stone.com/getfile.php?title=glee Vi skal se på følgende Oppsett av GLee Bruk av GLee Bruk av GLee med Core Extensions Oppsett av GLee Bruk av GLee Linux Pakk ut tarballen, og kjør medfølgende script for installering Windows Kopier GLee.h til (Visual Studio.NET 2005) C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include\gl Før du bruker Glee kan brukes Så må GLboolean GLeeInit() kalles Returnerer GL_TRUE Start av GLee var vellykket Returnerer GL_FALSE const char *GLeeGetErrorString(); Kopier GLee.lib C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib Glee.h skal inkluderes isteden for gl.h
Bruk av GLee For å sjekke en extension (GLEE_) if (GLEE_ARB_point_sprite) { glenable(gl_point_sprite_arb); Hvis OpenGL 1.4 er støttet if (GLEE_VERSION_1_4) { glsecondarycolor3f(0.5f, 0.3f, 1.0f); GLee med Core Extension Mange extension er en del av OpenGL Core Slik at man kan bruke glfogcoordf(); Isteden for glfogcoordfext(); Man kan bli fristet til å, skrive if (GLEE_EXT_fog_coord) glfogcoordf(); Mer solid måte if (GLEE_VERSION_1_4) glfogcoordf(); else if (GLEE_EXT_fog_coord) glfogcoordext();