MaterialFilteringMode() filtert nicht ?!

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

MaterialFilteringMode() filtert nicht ?!

Beitrag 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
Zuletzt geändert von Chimorin am 08.08.2013 13:32, insgesamt 1-mal geändert.
Bild

- formerly known as Bananenfreak -
Benutzeravatar
Makke
Beiträge: 156
Registriert: 24.08.2011 18:00
Computerausstattung: AMD Ryzen 7 5700X - AMD Radeon RX 6800 XT - 32 GB DDR4 SDRAM
Wohnort: Ruhrpott
Kontaktdaten:

Re: MaterialFilteringMode() filtert nicht ?!

Beitrag 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.
---
Windows 11 (64 bit)
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: MaterialFilteringMode() filtert nicht ?!

Beitrag von Chimorin »

Das war ein Artefakt, bei mir liegt das Material in einem Unterordner. Ich habe einfach den String rausgenommen...
Bild

- formerly known as Bananenfreak -
Benutzeravatar
Makke
Beiträge: 156
Registriert: 24.08.2011 18:00
Computerausstattung: AMD Ryzen 7 5700X - AMD Radeon RX 6800 XT - 32 GB DDR4 SDRAM
Wohnort: Ruhrpott
Kontaktdaten:

Re: MaterialFilteringMode() filtert nicht ?!

Beitrag 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 ?
---
Windows 11 (64 bit)
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: MaterialFilteringMode() filtert nicht ?!

Beitrag 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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: MaterialFilteringMode() filtert nicht ?!

Beitrag 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.
Bild

- formerly known as Bananenfreak -
Benutzeravatar
Makke
Beiträge: 156
Registriert: 24.08.2011 18:00
Computerausstattung: AMD Ryzen 7 5700X - AMD Radeon RX 6800 XT - 32 GB DDR4 SDRAM
Wohnort: Ruhrpott
Kontaktdaten:

Re: MaterialFilteringMode() filtert nicht ?!

Beitrag 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.
---
Windows 11 (64 bit)
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: MaterialFilteringMode() filtert nicht ?!

Beitrag 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...
Bild

- formerly known as Bananenfreak -
Antworten