Seite 1 von 1

MaterialFilteringMode() filtert nicht ?!

Verfasst: 07.08.2013 11:13
von Chimorin
Heyho,

ich möchte in mein Programm als optionale Option die Materialfilterung einbauen(Keine, bi-, trilinear und Anisotropisch). Es funktioniert so weit (mein Programm), aber das Material wird einfach nicht gefiltert? Ist die Filterung nur im "Programm", wird also nicht in die Materialdatei geschrieben?

Speichert diesen Code in eine Datei mit der Endung "*.material"

Code: Alles auswählen

material Spielerstein
{
    technique
    {
        pass
        {
            texture_unit
            {
                texture Leermuster.png
                filtering trilinear
            }
        }
    }
}
Ich weiß nicht warum, aber das Material wird nie gefunden. Hat jemand ne Idee warum?

Code: Alles auswählen

EnableExplicit

InitEngine3D()
InitSprite()

Add3DArchive("Data/Materialien", #PB_3DArchive_FileSystem)
Parse3DScripts()

OpenScreen(1024, 768, 32, "blub")

MaterialFilteringMode(GetScriptMaterial(#PB_Any, "Holzende_0"), #PB_Material_Anisotropic, 16)

End

Re: MaterialFilteringMode() filtert nicht ?!

Verfasst: 07.08.2013 17:26
von Makke
Jetzt nur ein Schuss ins Blaue ohne das getestet zu haben, die Material Datei hast Du im gleichen Verzeichnis wie den Code ? Dann würde ich mal die Zeile:

Code: Alles auswählen

Add3DArchive("", #PB_3DArchive_FileSystem)
in folgende (Punkt):

Code: Alles auswählen

Add3DArchive(".", #PB_3DArchive_FileSystem)
abändern. In Deiner Version übergibst du einen Leerstring, also nichts. Sag mal ob es geklappt hat.

Re: MaterialFilteringMode() filtert nicht ?!

Verfasst: 07.08.2013 17:51
von Chimorin
Das war ein Artefakt, bei mir liegt das Material in einem Unterordner. Ich habe einfach den String rausgenommen...

Re: MaterialFilteringMode() filtert nicht ?!

Verfasst: 07.08.2013 20:13
von Makke
Hm,

also, ändern folgende Zeile mal ab:

Code: Alles auswählen

InitEngine3D()
in:

Code: Alles auswählen

InitEngine3D(#PB_Engine3D_DebugLog)
und schau Dir dann die OGRE.log im Verzeichnis des Quellcodes an. Wenn ich Verzeichnisse einbinde tauchen dann solche Zeilen auf:

Code: Alles auswählen

Added resource location 'D:\PBProjects\MasterOfOrion\scripts\' of type 'FileSystem' to resource group 'General'
Und ?

Re: MaterialFilteringMode() filtert nicht ?!

Verfasst: 08.08.2013 00:06
von PMV
Ich würd dir ja empfehlen OGRE auch mit zu teilen, das es nun die Ordner durchsuchen soll. :mrgreen:

Code: Alles auswählen

Parse3DScripts()
Kommt in deinem Pseudo-Beispiel nicht vor. :wink:

MFG PMV

Re: MaterialFilteringMode() filtert nicht ?!

Verfasst: 08.08.2013 13:32
von Chimorin
Kacke -.- Wie man doch auf dem Schlauch steht :D
Danke, PMV :D
Ich habs mal geändert, nun funktioniert es :D

Kann es einer von euch mal testen?
Achja, ihr müsst halt den Pfad anpassen.

EDIT: Bei mir wird nichts gefiltert.

Re: MaterialFilteringMode() filtert nicht ?!

Verfasst: 09.08.2013 16:07
von Makke
Hi,

probier doch mal folgenden Code aus, siehst Du da die Unterschiede zwischen den Filtermodii ?

Code: Alles auswählen

EnableExplicit

Structure fVector3
  x.f
  y.f
  z.f
EndStructure

Define.f           distance1, distance2
Define.i           tempTexture, tempMaterial, tempMaterialB, tempMaterialT, tempMaterialA4, tempMaterialA16, tempMesh, camera, light, entPlane1, entPlane2, entPlane3, entPlane4, entPlane5
Define.fVector3    point1, point2, point3, point4, linecenter1, linecenter2

; init
InitEngine3D()
InitSprite()
InitKeyboard()

OpenWindow(0,0,0,1024,768,"Material Filter Modes",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0), WindowHeight(0), 0, 0, 0, #PB_Screen_WaitSynchronization)

; create line entities
tempTexture = CreateTexture(#PB_Any, 64, 64)
StartDrawing(TextureOutput(tempTexture))
Box(0, 0, 64, 64, RGB(128, 128, 128))
Box(0, 31, 64, 3, RGB(255, 255, 255))
Box(31, 0, 3, 64, RGB(255, 255, 255))
StopDrawing()

tempMaterial = CreateMaterial(#PB_Any, TextureID(tempTexture))
MaterialFilteringMode(tempMaterial, #PB_Material_None)

tempMaterialB = CreateMaterial(#PB_Any, TextureID(tempTexture))
MaterialFilteringMode(tempMaterialB, #PB_Material_Bilinear)

tempMaterialT = CreateMaterial(#PB_Any, TextureID(tempTexture))
MaterialFilteringMode(tempMaterialT, #PB_Material_Trilinear)

tempMaterialA4 = CreateMaterial(#PB_Any, TextureID(tempTexture))
MaterialFilteringMode(tempMaterialA4, #PB_Material_Anisotropic, 4)

tempMaterialA16 = CreateMaterial(#PB_Any, TextureID(tempTexture))
MaterialFilteringMode(tempMaterialA16, #PB_Material_Anisotropic, 16)

tempMesh = CreatePlane(#PB_Any, 500, 5000, 1, 1, 5, 50)

entPlane1 = CreateEntity(#PB_Any, MeshID(tempMesh), MaterialID(tempMaterial), -1010, 0, 0)
entPlane2 = CreateEntity(#PB_Any, MeshID(tempMesh), MaterialID(tempMaterialB), -505, 0, 0)
entPlane3 = CreateEntity(#PB_Any, MeshID(tempMesh), MaterialID(tempMaterialT), 0, 0, 0)
entPlane4 = CreateEntity(#PB_Any, MeshID(tempMesh), MaterialID(tempMaterialA4), 505, 0, 0)
entPlane5 = CreateEntity(#PB_Any, MeshID(tempMesh), MaterialID(tempMaterialA16), 1010, 0, 0)

; create light
light = CreateLight(#PB_Any, RGB(225, 225, 225), 0, 250, 0, #PB_Light_Directional)
LightLookAt(light, 0,0,0)

; create camera
camera = CreateCamera(#PB_Any, 0, 0, 100, 100)
MoveCamera(camera, 0, 1000, 2500, #PB_Absolute)
RotateCamera(camera, -30, 0, 0, #PB_Relative)

AmbientColor(RGB(32,32,32))

FreeMesh(tempMesh)
FreeMaterial(tempMaterial)
FreeMaterial(tempMaterialB)
FreeMaterial(tempMaterialT)
FreeMaterial(tempMaterialA4)
FreeMaterial(tempMaterialA16)
FreeTexture(tempTexture)

Repeat
 
  While WindowEvent() : Wend
 
  ExamineKeyboard()
 
  RenderWorld()
  FlipBuffers()
 
Until KeyboardReleased(#PB_Key_Escape)

End
Wenn Du da schon keinen Unterschied siehst, würde ich tippen das mit Deinen Grafikeinstellungen nicht passt.

Ansonsten habe ich hier noch auf die schnelle ein Material Script mit den Filteroptionen:

Code: Alles auswählen

material test/nofilter
{
    technique
    {
        pass
        {
            texture_unit
            {
                texture test_texture.bmp
                filtering none
            }
        }
    }
}

material test/bilinear
{
    technique
    {
        pass
        {
            texture_unit
            {
                texture test_texture.bmp
                filtering bilinear
            }
        }
    }
}

material test/trilinear
{
    technique
    {
        pass
        {
            texture_unit
            {
                texture test_texture.bmp
                filtering trilinear
            }
        }
    }
}

material test/ani4
{
    technique
    {
        pass
        {
            texture_unit
            {
                texture test_texture.bmp
                filtering anisotropic
                max_anisotropy 4
            }
        }
    }
}

material test/ani16
{
    technique
    {
        pass
        {
            texture_unit
            {
                texture test_texture.bmp
                filtering anisotropic
                max_anisotropy 16
            }
        }
    }
}
Als test_texture.bmp nimmst Du am besten etwas mit geraden Linien so wie in dem oben gepostetem Beispiel.

Re: MaterialFilteringMode() filtert nicht ?!

Verfasst: 10.08.2013 09:23
von Chimorin
Hey Makke,
danke für den tollen Code :)
Nein, natürlich funktioniert bei mir das Filtern richtig. Ich habe aber erwartet, dass die Filterung auch in der Materialdatei gespeichert wird (Wohl zu viel erwartet ;) ).
Die Anisotropische Filterung ist ja mal um Lääängen besser...