Normalmapping mit OGRE und PureBasic

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

Wenn man genau hinschaut, sieht man das es unter den schwarzen Flecken vernünftig berechnet wird.
Sieht irgendwie aus als ob da Variablen zu hohe Werte bzw. irgendeine komische Klamotte mit der Präzision.

Also, dieser "Fehler" ist auf allen Karten mit R300 / R350 rekonstruierbar und das auch unter verschiedenen Treiberversionen.
I´a dllfreak2001
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

dllfreak2001 hat geschrieben:Wenn man genau hinschaut, sieht man das es unter den schwarzen Flecken vernünftig berechnet wird.
Sieht irgendwie aus als ob da Variablen zu hohe Werte bzw. irgendeine komische Klamotte mit der Präzision.

Also, dieser "Fehler" ist auf allen Karten mit R300 / R350 rekonstruierbar und das auch unter verschiedenen Treiberversionen.
Kannst du mal "data/normalmap.material" mit dem hier überschreiben:

Code: Alles auswählen

vertex_program normalVS/HLSL hlsl
{
   source normalmap_vs.hlsl
   entry_point main
   target vs_1_1
   
   default_params
   {
	param_named_auto worldViewProj      worldviewproj_matrix
	param_named_auto worldView          worldview_matrix
        param_named_auto view               view_matrix
	param_named_auto lightPosition      light_position 0
   }
}
fragment_program normalPS/HLSL hlsl
{
   source normalmap_ps.hlsl
   entry_point main
   target ps_2_0

   default_params
   {
	param_named_auto lightColorDiffuse  light_diffuse_colour 0
	param_named_auto lightColorSpecular light_specular_colour 0
	param_named      shininess          float                 127.0
   }
}

vertex_program normalVS unified
{
   delegate normalVS/HLSL
}
fragment_program normalPS unified
{
   delegate normalPS/HLSL
}


material Normalmap
{
	technique
	{
		// Draw it black
		pass
		{
			depth_write off
			lighting off
			scene_blend zero zero
		}
		
		// For the lights
		pass
		{
			depth_write off
			iteration once_per_light
			scene_blend add
			lighting on

			texture_unit
			{
				texture normalmap.png -1
			}
			
			vertex_program_ref normalVS
			{
			}

			fragment_program_ref normalPS
			{
			}
		}

		// For the original textures
		pass
		{
			depth_write on
			scene_blend modulate
			lighting off

			texture_unit
			{
				texture texture.png -1
			}
		}
	}

}
Vielleicht geht das jetzt. :freak:
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

:allright: Jetzt läufts einwandfrei :)
I´a dllfreak2001
Benutzeravatar
Thalius
Beiträge: 476
Registriert: 17.02.2005 16:17
Wohnort: Basel / Schweiz

Beitrag von Thalius »

:oops: ah fuck .. habs mir auch angesehen ... lag tatsächlich nur am depth-write .. gaah!
"...smoking hash-tables until until you run out of memory." :P
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Thalius hat geschrieben::oops: ah fuck .. habs mir auch angesehen ... lag tatsächlich nur am depth-write .. gaah!
Naja, nach dem
Wenn man genau hinschaut, sieht man das es unter den schwarzen Flecken vernünftig berechnet wird.
Wars ja kein Rätsel mehr. :freak:

Ich erkenn in den Artefakten aber meistens Streifen und nicht solche Muster wie bei den gezeigten Screenshots :lol: . Liegt vermutlich daran, dass sich die Streifenmuster der Passes überlagern und somit eher "grieselige" Rechtecke fehlen.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Plattformunabhängigkeit

Beitrag von Vermilion »

Gestern Abend habe ich festgestellt, dass man auf Mac OS X nichts außer einer glatten Kugel sieht. Dann bin ich darauf gekommen, das HLSL DirectX spezifisch ist und auf Mac OS X sowie Linux nur OpenGL verfügbar ist und OGRE auch mit dem OpenGL Rendersystem läuft. Dementsprechend sind für diese Betriebssysteme GLSL Programme nötig. Diese lassen sich aber nicht unter Windows benutzen. Das heißt, dass man letztendlich alle Materials bzw. Shader zwei mal erstellen muss, ein Mal für Windows als HLSL und ein Mal als GLSL für andere Betriebssysteme, die von PureBasic unterstützt werden.

Ich wollte nur neu gewonnenes Wissen bezüglich des Themas teilen.
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Antworten