|
|
Ja oké, valamiért nem jutott eszembe jobbra görgetni
|
|
|
Idézet Lord_Crusare :
A cikk végén a két kép a randomizálás/rekonstrukcióról nálam ugyanarra az egy képre mutat.
Ami két kép egymás mellett (könnyebb összehasonlítani).
|
|
|
|
|
Én azért használom, mert elmászna a beállított dir fény. Abból is csak egyet. De pl ha az ambient mondjuk lilás, a diffuse meg fehér, akkor az átmeneten szépen látszik is, meg az ambient nem szól bele a diffuse-ba, mert ugye a max miatt csak addig érvényesülnek a színek (egyesével), míg a diffuse fölé nem megy. Ha hozzá adjuk, akkor mindig lilásra színezi, és nem a hátoldalra fisszapattanó fényt "szimulálja".
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
|
|
|
Ez is leírja, hogy mivel lusta disznó tone mappelni inkább a [0, 1]-be skálázza. Egyébként jó nagy baromságot ír, szóval ha ez új cikk, akkor egyes.
|
|
|
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
|
|
|
Ezt _azért_ alkalmazták annakidején mert nem volt még hardveres sRGB support (a pow pedig baromi drága volt). De ez csak egy része a megoldásnak, mert amint additív blendinget használsz elkerülhetetlen a _tone mapping_ is.
De ilyen max sosem volt. Az ambient + ndotl*diff-et skálázták be a [0, 1] intervallumba.
|
|
|
Jó, én hagyományos fénykezelésben gondolkodtam, a gtao meg ezek szerint PBR-es. Az viszont, hogy a fény mindig additív, csak részben igaz, mert hagyományosban a "szebb" az az, amit már említettem.
teljesen kiírva
Kód: finalcolor=max(ambient*color, diffuse*color+specular);
itt az ambient az ambientek összege, már ha több lenne vhogy, a diffuse meg a diffuse-ok összege és a specular a specularok összege. a color a textúra példa kedvéért.
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
|
|
|
Te abszolút nem vagy tisztában a PBR-el (olvasd el a cikkemet...). A fények _mindig_ additívek.
|
|
|
Az ambient color minimum color, nem additív a fényhez. ezért a kettő közül a max érvényesül. Legalábbis úgy a szebb, meg a szín tartomány túlzottan fel menne.
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
|
|
|
?????
Kód: outColor = ambient * ao + color / pi * dot(n, l);
|
|
|
Ja hogy ja. Akkor ezt
Kód: max(AO*color, color*diffuse)
-nál kell használni? ... Meg úgy általában az ssao-t is?
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
|
|
|
1) árnyékolt textúra a PBR óta TILOS
2) a lightmap az csak far field occlusion, a GTAO akkor is segít (vagy nem is kell)
3) direkt megvilágításba TILOS AO-t rakni (csakis az ambiens fénybe)
|
|
|
Igen, a közeli függönyökön szépen mutat, de jobb helyeken a függöny textúrája tartalmazná az árnyékot, vagy éppen hagyományos fényekkel és monokróm textúrákkal sem lenne ekkora különbség.
Általános jelenetekben árnyékolt textúrákat alkalmaznak és lightmapet.
De azért szépen működik.
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
|
|
|
Itt egy összehasonlító kép (GTAO). Annyit megjegyeznék, hogy a Sponza pont rossz ehhez, mert pre-bakelt AO-t tartalmaz sok helyen (pl. oroszlán).
|
|
|
|
Idézet Asylum :
A point cloud hogy jön a bloomhoz?
Csak valami vec2 array-t neveztem felhőnek, mivel véletlen pontokat kéne generálnom egy körön belül. kb 32-t. Na mindegy, megírom azt, ha nincs egy jó array.
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
|
|
|
Qrvára nem tűnik el (most nem tudok shotot csinálni, majd holnap).
A point cloud hogy jön a bloomhoz?
|
|
|
GL 3.3-am van.
Jól néz ki innen. Csak az a gond ezekkel, hogy színekkel már eltűnik az egész. Ezért is hanyagolom a sima ssao-t.
---
Van vmi tipp "pont felhőre" bloom shaderhez? ki akarom azt is javítani, mert most kicsit csúnya, amit rögtönöztem.
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
|
|
|
GLSL 150 kell csak (és GL 3.2).
A fő problémát amúgy sikerült megoldani, még egy apróság van amit ki kell tenyésztenem.
|
|
|
Én ránéznék, attól függően, hogy milyen shader model kell hozzá. Asszem van glsl 330-am. De azt se teszteltem még.
Persze segíteni nem biztos, hogy tudok.
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
|
|
|
A GTAO-val kissé zsákutcában vagyok...ha nyitok neki egy projektet, akkor lenne kedvetek/időtök beszállni? (több szem többet lát alapon)
Az alapokhoz már megírtam a cikket, de jelenleg olyan pontatlanságokkal küzdök, ami gyak. lehetetlen hogy előálljon.
|
|
|
Megpróbálhatnál simán kirajzolni egy fullscreen quadot egyetlen textúrával és egy nagyon egyszerű shaderrel. Ha az működik, akkor a shaderrel lesz a gond, ha nem, akkor működik, akkor pedig lehet tovább kutatni.
Amúgy ahogy Asylum is mondta, glEnable nem kell, ha shadert használsz.
|
|
|
Kód: GL.Enable(EnableCap.Texture2D);
GL.ActiveTexture(TextureUnit.Texture0);
Ez itt fordítva van (bár ugyanazt csinálja), de ha nincs shader, akkor minden stage-et külön kell engedélyezni (ha meg van shader, akkor nem kell glEnable)
Kód: // ha NINCS shader
GL.ActiveTexture(TextureUnit.Texture0);
GL.Enable(EnableCap.Texture2D);
GL.ActiveTexture(TextureUnit.Texture1);
GL.Enable(EnableCap.Texture2D);
// stb.
|
|
|
Ha jol latom, itt ugyanez a problema: http://stackoverflow.com/questions/12936188/opentk-texture-showing-up-full-black
Probalj hibat kiiratni texture betoltes es kirajzolas utan is, hatha van valami (ezt javasoljak ott is) :
Kód: #if DEBUG GLError error = glGetError(); if (error != GLError.NO_ERROR) { Console.WriteLine("Error {0} occured at {1}", error, "Location"); } #endif
De akar a shader-rel is lehet gond. Esetleg unsigned helyett signed, vagy float van atadva, ahol nem az kene, es linuxnal nem volt gond, itt igen.. Nem tudom, tippelgetek csak
|
|
|
Tuti, de most odáig jutottam, hogy a textura engedélyezéssel/tiltással van a baj. Van Shaderem is multitexturával, 5 db texturával, amit terrain előtt betöltök aztán render után unbindelek mindent és utánna renderelem a modelleket. Megint bindelek render, unbind. Na és itt van valami baj a bind/unbind-nél. Van hogy látszanak a modellek legalábbis ha nem unbindelem a terrain texturáit.
Ezek a fv-ek vannak (A Terrainbol vettem ki, de bind,unbind a modelleknél is igy néz ki):
Kód: public void BindBuffers() {
GL.BindBuffer(BufferTarget.ArrayBuffer, VBOid[0]);
GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, Vertex.SIZE_IN_BYTE, 0);
GL.VertexAttribPointer(1, 3, VertexAttribPointerType.Float, false, Vertex.SIZE_IN_BYTE, 3 * sizeof(float));
GL.VertexAttribPointer(2, 2, VertexAttribPointerType.Float, false, Vertex.SIZE_IN_BYTE, 6 * sizeof(float));
GL.BindBuffer(BufferTarget.ElementArrayBuffer, VBOid[1]);
}
public void BindTextures() {
GL.Enable(EnableCap.Texture2D);
GL.ActiveTexture(TextureUnit.Texture0);
GL.BindTexture(TextureTarget.Texture2D, DirtTexture);
GL.ActiveTexture(TextureUnit.Texture1);
GL.BindTexture(TextureTarget.Texture2D, GrassTexture);
GL.ActiveTexture(TextureUnit.Texture2);
GL.BindTexture(TextureTarget.Texture2D, SandTexture);
GL.ActiveTexture(TextureUnit.Texture3);
GL.BindTexture(TextureTarget.Texture2D, StoneTexture);
GL.ActiveTexture(TextureUnit.Texture4);
GL.BindTexture(TextureTarget.Texture2D, BlendMap);
}
public void UnBindTextures() {
GL.BindTexture(TextureTarget.Texture2D, 0);
GL.Disable(EnableCap.Texture2D);
}
public void UnBindBuffers() {
GL.BindBuffer(BufferTarget.ElementArrayBuffer, 0);
GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
}
Kód: terrain.BindBuffers();
terrain.BindTextures();
GL.DrawElements(PrimitiveType.Triangles, localizator.Area.TriangleCount, DrawElementsType.UnsignedInt, IntPtr.Zero);
terrain.UnBindTextures();
terrain.UnBindBuffers();
ArgumenException: A megadott DependencyObject nem ehhez a Freezable elemhez tartozó környezet. Paraméter neve: context
:oO Mi a???
|
|
|
@Bukta: a Bitmap-ban tuti betoltodik az adat, nem lehet hogy path problema van? Video driver rendben van?
|
|
|
Hali!
Elővettem az OpenGL-es projektemet - amit közbe-közbe szoktam fejlesztgetni. Eddig Ubuntu alatt csináltam, de most átjöttem win-re a VS2012 miatt. Na most olyan problémám van, hogy win-en nem jelenik meg az 1x16-os Bitmap-ból krehált textúra -ami egy ProgressBar-é. Meg a *.obj fájlokat se rajzolja ki, pedig ott már nagyobb mint 64x64-es textura van (mondjuk az 5x16os textura már megjelenik a ProgressBaron). Magában a kódban nincs logikai hiba, mert egérrel működik a kijelölés szóval ott vannak a modellek csak épp nem látni őket. Viszont a terrain faxán megjelenik, meg úgy a Controlok is csak ez az 1x16os textura nem. Mi lehet a baj? Van valami win speckó dolog amit be kell állítani? Vagy valamit elcsesztem, nem állítottam be és az ubuntu cseszett rá a win meg azt mondja h "megállj van!"?
Itt a textúra betöltő:
Kód: public static Texture2D CreateTexture2D(Bitmap bmp) {
int id = GL.GenTexture();
GL.BindTexture(TextureTarget.Texture2D, id);
BitmapData data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, data.Width, data.Height, 0, OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, data.Scan0);
bmp.UnlockBits(data);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.Repeat);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.Repeat);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
return new Texture2D(id, bmp.Width, bmp.Height);
}
Ja igen C# mert OpenTK ami OpenGL wrapper, de mindig opengl-t írok be google-ba, ugyanaz a megoldás még ha c++-os a kód akkor is, már ha van valami gond. És általában OpenGLből nem tudok valamit és azért rossz. (Ami c#-ba GL.GenBuffer az ogl-be glGenBuffer ennyi a különbség.
Ezt a hozzászólást Bukta módosította (2017.01.18 08:03 GMT+1 óra, 1056 nap)
ArgumenException: A megadott DependencyObject nem ehhez a Freezable elemhez tartozó környezet. Paraméter neve: context
:oO Mi a???
|
|
|
Bár tudom h kód önmagában nem sokat segít, de bemásolom. Egyébként nem vagyok már annyira szigorú az enginemmel kapcsolatban, szóval tudok adni teljes forráskódot igény esetén (csak el kell magyaráznom a fordítást).
Kód: void qWin32Application::AdjustWindow(quint32& width, quint32& height)
{
RECT realrect;
RECT sourcerect;
RECT targetrect;
LONG screenwidth = workarea.right - workarea.left;
LONG screenheight = workarea.bottom - workarea.top;
float ratio = (float)width / (float)height;
GetWindowRect(hwnd, &sourcerect);
DwmGetWindowAttribute(hwnd, DWMWA_EXTENDED_FRAME_BOUNDS, &realrect, sizeof(RECT));
LONG windowwidth = realrect.right - realrect.left;
LONG windowheight = realrect.bottom - realrect.top;
LONG errorwidth = windowwidth - (sourcerect.right - sourcerect.left);
LONG errorheight = windowheight - (sourcerect.bottom - sourcerect.top);
if( windowwidth > screenwidth )
{
windowwidth = screenwidth;
windowheight = (LONG)floor(windowwidth / ratio);
}
if( windowheight > screenheight )
{
windowheight = screenheight;
windowwidth = (LONG)floor(windowheight * ratio);
}
// get back window bounds
LONG targetwidth = windowwidth - errorwidth;
LONG targetheight = windowheight - errorheight;
targetrect.left = (screenwidth - targetwidth) / 2;
targetrect.top = (screenheight - targetheight) / 2;
targetrect.right = (screenwidth + targetwidth) / 2;
targetrect.bottom = (screenheight + targetheight) / 2;
MoveWindow(hwnd, targetrect.left, targetrect.top, targetwidth, targetheight, FALSE);
GetClientRect(hwnd, &sourcerect);
// update client area
width = (quint32)(sourcerect.right - sourcerect.left);
height = (quint32)(sourcerect.bottom - sourcerect.top);
}
Kód: void qWin32Application::AdjustFrame(RECT& out, quint32 width, quint32 height, DWORD style)
{
LONG screenwidth = workarea.right - workarea.left;
LONG screenheight = workarea.bottom - workarea.top;
out.left = (qint32)(screenwidth - width) / 2;
out.top = (qint32)(screenheight - height) / 2;
out.right = (qint32)(screenwidth + width) / 2;
out.bottom = (qint32)(screenheight + height) / 2;
AdjustWindowRectEx(&out, style, FALSE, 0);
}
|
|
|
Asylum: A lentebbi kódban az AdjustWindow mit csinál? Az AdjustFrame gondolom a rect-et állítja be a paraméterei alapján, utána pedig átméretezed az ablakot.
További apróság csak, hogy a fullscreen-re való állításkor csak az if (hrc) előtti rész különbözik, szóval elég annyit az if-else-be rakni gondolom.
|
|
|
Mivel egyébként is textúrába renderelem az egész jelenetet, így az ablak tényleges mérete nem számít, csak a textúráké.
De a képfelbontás az eredeti marad, tehát számít. Régebbi hardveren simán teljesitményt veszitesz vele. Bár nem tudom mi a célcsoport, de jobban jársz szerintem ha támogatod a rendes fullscreen-re váltást is.
|
|
|
Ja, nem a tiédre értettem, hanem amivel anno én próbálkoztam. 
Köszi, megnézem majd!
|
|
|
Akkor az egy régebbi verzió lehetett, mert a mostani tökéletesen működik. Kód (hosszú):
Kód: void qWin32Application::Resize(quint32& width, quint32& height, bool fullscreen)
{
RECT rect;
DWORD style = WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
dimension.x = width;
dimension.y = height;
if( fullscreen )
style |= WS_POPUP;
else
style |= WS_SYSMENU|WS_BORDER|WS_CAPTION|WS_MINIMIZEBOX; // |WS_MAXIMIZEBOX
if( !fullscreen )
{
if( !windowed )
ChangeDisplaySettings(NULL, 0);
// w/fs -> w
AdjustFrame(rect, width, height, style);
SetWindowLong(hwnd, GWL_STYLE, style);
SetWindowPos(hwnd, HWND_NOTOPMOST, rect.left, rect.top, rect.right - rect.left,
rect.bottom - rect.top, SWP_FRAMECHANGED);
AdjustWindow(width, height);
}
else
{
if( windowed )
{
SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, width, height, SWP_NOACTIVATE);
SetWindowLong(hwnd, GWL_STYLE, style);
SetWindowPos(hwnd, NULL, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_FRAMECHANGED);
// w -> fs
if( hrc )
{
SetForegroundWindow(hwnd);
devmode.dmSize = sizeof(DEVMODE);
devmode.dmBitsPerPel = 32;
devmode.dmPelsWidth = dimension.x;
devmode.dmPelsHeight = dimension.y;
devmode.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
if( DISP_CHANGE_SUCCESSFUL != ChangeDisplaySettings(&devmode, CDS_FULLSCREEN) )
Console().Error("qWin32Application::Resize(): Could not change display settings");
}
}
else
{
// fs -> fs
SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, width, height, 0);
if( hrc )
{
SetForegroundWindow(hwnd);
devmode.dmSize = sizeof(DEVMODE);
devmode.dmBitsPerPel = 32;
devmode.dmPelsWidth = dimension.x;
devmode.dmPelsHeight = dimension.y;
devmode.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
if( DISP_CHANGE_SUCCESSFUL != ChangeDisplaySettings(&devmode, CDS_FULLSCREEN) )
Console().Error("qWin32Application::Resize(): Could not change display settings");
}
}
}
windowed = !fullscreen;
}
|
|
|
Idézet proof88 :
Ha fullscreen-t akar a user és nem desktop felbontást, akkor hogyan állítod át a képfelbontást?
Mivel egyébként is textúrába renderelem az egész jelenetet, így az ablak tényleges mérete nem számít, csak a textúráké.
Idézet Asylum :
A korábbi demómban meg van csinálva rendesen;
Ja, anno én is próbálgattam, de voltak vele gondok: pl., ha egyszerre állítottam a fullscreen state-et meg a felbontást.
Idézet Asylum :
Az ikonokat nem cseszi szét ha kilépés előtt visszaállítod az eredetit.
Pontosabban, ha visszaállítom akkor, amikor nem aktív az ablak (pl. alt-tab)
|
|
|
Fullscreenben optimálisabban tud működni a grafikus api, cserébe ilyenekkel megküzdeni pl. dx9 alatt, hogy alt-tab esetén minden GPU erőforrás törlődik (device lost). A korábbi demómban meg van csinálva rendesen; ha beértem a munkahelyre mgenézem a kódot.
Az ikonokat nem cseszi szét ha kilépés előtt visszaállítod az eredetit.
|
|
|
régebben minden ezt használta, manapság viszont már nem szabad használni, csak ha az user a játék beállításaiban (ha van) KIFEJEZETTEN ezt kéri.
|
|
|
Ha fullscreen-t akar a user és nem desktop felbontást, akkor hogyan állítod át a képfelbontást? Szerintem kb az összes játék használja ezt a függvényt. Sőt még a frissítési frekvenciát is lehet vele állítani.
Azt nem tudom mit jelent hogy szétcseszi az ikonokat.
|
|
|
Nem nagyon találtam arról infót, hogy van-e értelme fullscreen módot használni. Itt van Windows-on a ChangeDisplaySettings amit mindenféle OGL tutorialban lehet látni. Van egyáltalán értelme használni? Általában csak szétcseszi az asztalon az ikonokat meg minden ilyesmi. Én személy szerint nem örülnék neki, ha a display device beállításait túrkálná egy játék.
Jelenleg csak annyit csinálok, hogyha fullscreent akar, hogy az ablakot átméretezem akkorára, amekkora a jelenlegi felbontása a monitornak, és beállítom, hogy ne legyen kerete. Van bármi előnye a másiknak ezzel szemben?
|
|
|
Éppen postprocessen dolgozom és lenne egy kérdésem. Hogy hasonlítom össze a depth texture mintáját az új adattal? A gl_Position z-je nem működik. De akkor mivel lehet összehasonlítani?
Jó, megtaláltam. gl_FragCoord.z.
Ezt a hozzászólást ddbwo módosította (2017.01.04 19:13 GMT+1 óra, 1070 nap)
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
|
|
|
Jól van, ma újra ránéztem és észre vettem, hogy létezik egy ilyen is:
Kód: float colour[4] = {1.0f, 1.0f, 1.0f, 1.0f};
glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, colour);
azaz "a színe pedig fehér"...
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
|
|
|
biztos hogy clamp? mert a szélét kapja meg vele. csak az ifek segítenek.
Amúgy egy sima bf2-s árnyékon próbálkoztam orthoban a naptól nézve, ami elég ferde.
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
|
|
|
GL_CLAMP_TO_BORDER
http://darthasylum.blog.hu/2013/11/24/a_karbantartas_fontossaga
Idézet
Feltételezem mindenki eljutott odáig, hogy a shadowmap címzési módja GL_BORDER, a színe pedig fehér. Ennek ellenére a shadowmap körül fekete részek jelennek meg.
Kód: float d = cpos.z / cpos.w;
Általában jó. Itt nem. Hiszen d simán a far plane mögé eshet, és akkor d <= sd nem teljesül, azaz árnyék keletkezik. A helyes megoldás:
Kód: float d = saturate(cpos.z / cpos.w);
|
|
|
azt hogy oldom meg szépen, hogy az ST-n kívülről vett minta ne legyen árnyék? Feltételvizsgálattal megtudom shaderben, de van rá "normális" megoldás is?
(nem CSM-hez, csak sima shadow mappinghoz)
Ezt a hozzászólást ddbwo módosította (2017.01.01 15:48 GMT+1 óra, 1073 nap)
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
|
|
|
|
Találkozott valaki kültéri árnyékokkal? spot és pointlight megvan, de hogy rendereljek árnyékot egy hatalmas terepnek?
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
|
|
|
Nos, szerintem ez driver bug lehet, mert eddig mindenki másnál működött a dolog.
3257-testapp.zip
|
|
|
Nem is igazán tudom, hogy ez most WinAPI, vagy OpenGL probléma, de a helyzet a következő:
Működik:
- window size change
- window style and size change
Nem működik:
- window style change
Tehát ha van egy 1280x720-as client area ablakom windowed módban (azaz maga az ablak 1296x758 a keret miatt), majd átváltok borderless módba, szintén 1280x720-as mérettel (nincs keret, szóval maga az ablak is ekkora), tehát a client area nem változik (1280x720), akkor teljesen rossz az egész.
Olyan, mintha az ablaknak lenne egy újrarajzolatlan része, pontosan ott, ahol előtte a caption és border volt. Egyelőre a teszt kedvéért minden frame-ben hívok egy glViewport-ot és egy glClear()-t, hogy biztosan ne ezekkel legyen a gond:
Kód: glViewport(0,0,1280,720)
glClearColor(1.000000,0.000000,0.000000,1.000000)
glClear(GL_COLOR_BUFFER_BIT)
wglSwapBuffers(FF0117F9)=true
Ha az ablaknak változik a mérete is, akkor működik a dolog. Kell még OpenGL esetén valamivel trükközni, amikor ilyesmit csinálok, vagy ez inkább WinAPI dolog lesz?
szerk.:
Na itt van a dolog, ami nem csinál semmit, így könnyebb megnézni, hogy mi nem jó.
3257-windowstylechange.zip
Stílusváltás F1, F2 billentyűkkel.
Ezt a hozzászólást Instalok módosította (2016.06.03 10:43 GMT+1 óra, ---)
|
|
|
Hehe, jópofa. Ha a shaderben egy define többször előfordul, akkor nem fog sírni, hogy multiple definition, vagy akármi, hanem simán lefordul.  Azt hiszem írok egy saját preprocessort, úgyis kell az include-oláshoz.
|
|
|
De mondom, hogy kell, használom  Olvasom a shaderben, meg használom hardwares tesztekhez. Amit küldtél képet, az már valószínűleg nem aktuális, legalábbis RenderDoc-ban nem láttam olyan esetet, hogy bindolva van a textúra és attacholva is van FBO-hoz, a lenti példát leszámítva. Az viszont jelenleg must have, mert kell. Ha nagyon nem lesz jó sok helyen, akkor jön a depth-copy és használom azt.
|
|
|
Legújabb project:
Smashed Potatoes
Legutóbb frissített project:
Smashed Potatoes
Friss kép a galériából:
|