Textur als Rendertarget, Problem beim Rendern
-
Hallo,
Ich habe folgendes Problem mit DirectX:- Ich habe eine Textur als Rendertarget erschaffen.
- Diese Cleare ich und setze hierbei die Hintergrundfarbe auf rot.Wenn ich diese textur nun rendere (auf meinen bildschirm) wird auf der rechten Seite ein dünner dunkler Strich angezeigt.
Das ist nicht so gut!! für mich.
Kann es sein das der irgendwie versucht beim Rendern das rote Object an die Hintergrundfarb(blau anzupassen)? übergang fliessender zu gestalten.Wenn ja kann ich das irgendwo ausschalten.
Wenn jemand weiter weiß bin ich sehr dankbar.
muli
-
ich wuerde vermuten dass du die texture nur ein wenig falsch auf den bildschirm darstellst, also nicht breit genug, der duenne rand koennte dann ja dein hintergrund sein.
ansonsten muesste sich ein 'clear' auf den ganzen renderbereich beziehen.
-
Ich erschaffe doch nur eine Textur als RenderTarget und cleare diese.
Da diese Erscheinung auch nur auftritt wenn ich bestimmte Farbkombinationen verwende vermute ich das da irgendeine Farbinterpolation stattfindet.Vielleicht ein Filter??
Ich weis es nicht... wenn noch jemand eine Idee hat....
muli
-
nur wenn ich bestimmte Farbkombinationen verwende
Vielleicht ein Filter??Wenn alle Pixel die gleiche Farbe haben (Clear) kann er so viel filtern wie er will...
dass da irgendeine Farbinterpolation stattfindet.
Vielleicht auch nur im Monitor oder in Deinem Kopf

Zeig' doch mal 'nen Screenshot...
-
muli schrieb:
Ich erschaffe doch nur eine Textur als RenderTarget und cleare diese.
das ist zu 99% nicht das problem.
Ich weis es nicht... wenn noch jemand eine Idee hat....
ich vermute immer noch dass du es einfach falsch auf dem bildschirm darstellst. check das.
-
also ich glaube nicht das ich das falsch darstelle. Schaut euch mal bitte das hier an:
HRESULT h = D3DXCreateTexture(DxGraphObj->pDevice,breiteinPx,hoeheinPx,1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &pTexturen[ID]);Hier erschaffe ich das RenderTarget, denke das hab ich richtig gemacht.
nun:
TexMan->GetTextur(RenderTarget)->GetSurfaceLevel(0,&RenderTargetSurface); pDevice->GetRenderTarget(0,&AltesRenderTarget); pDevice->SetRenderTarget(0,RenderTargetSurface); if(FAILED(pDevice->Clear(0L,NULL,D3DCLEAR_TARGET,D3DCOLOR_ARGB(255,255,0,0),1.0f,0L))) pDevice->SetRenderTarget(0,AltesRenderTarget);Hier bei ist AltesRenderTarget der Buffer der zur Darstelllung auf dem Bildschirm verwendet wird.(ich hoffe ihr wisst was gemeint ist
)
Das AltesRenderTarget cleare ich ähnlich nur mit verschiedenen Farben und rendere dort drauf. Nur wenn ich verschiedene Farben verwendeDiese Textur als normale Textur zum Rendern. Ich benutze als Texturkoordinaten nur Nullen und Einsen Sprich Ich lege die Textur auf denTrianglestrip. Wo soll hier denn ein Fehler auftreten?
Screenshot habe ich gemacht weiß aber nicht wohin damit. kann aber versichern das da 2 senkrechte linien am Rand sind diese auchnoch in verschiedenen Farben sind.
Bin für jede Idee dankbar!
muli
-
muli schrieb:
Diese Textur als normale Textur zum Rendern. Ich benutze als Texturkoordinaten nur Nullen und Einsen Sprich Ich lege die Textur auf denTrianglestrip. Wo soll hier denn ein Fehler auftreten?
vielleicht beim umrechnen vom pixel zu texel coordinaten verrechnet?
siehe: http://msdn2.microsoft.com/en-us/library/bb219690.aspx
-
Das liest sich nicht schlecht. Scheint auf mein Problem zu passen. Ich werde mir das mal anlesen und dann versuchen umzusetzen.
erstmal vielen Dank
muli
-
ist zwar schon ein älterer Thread, aber ich hab trotzdem ne Frage zu dem Thema:
Gibts dazu ein Tutorial (am besten c++). Denn ich wüsste auch gerne, wie man ein anderes "rendertarget" angeben kann.Verstehe ich das richtig, dass man dann die Szene statt auf den Monitor in eine Textur rendern kann, ja? Welche Voraussetzungen müssen denn erfüllt sein (OpenGL-Version o.ä.) Das Code-Fragement da oben sieht mir ein wenig kryptisch aus

-
Also anscheinend sind die FBOs das, was ich suche.
Allerdings komm ich nicht klar damit.Das Programm schmiert schon immer bei
glGenFramebuffersEXT(1, &fbo);ab. Ich hab mal
glGetString(GL_EXTENSIONS)getestet und da kommt anscheinend schon NULL zurück. Ich bin mir aber sicher, dass schon Programme mit FBOs auf meinem rechner gelaufen sind. Kann mir jemand helfen?