Multisampling in Irrlicht aktivieren?

7

Ich arbeite an einem kleinen Spiel, das Irrlicht verwendet. Ich bin ziemlich neu in Irrlicht und habe mich gefragt, wie ich Multisampling aktivieren kann. Der Gerätetreiber wird EDT_OPENGLals solcher initiiert:

IrrlichtDevice *device = createDevice(video::EDT_OPENGL,
                                        core::dimension2d<u32>(800, 700),
                                        16,
                                        NO);

Wie aktiviere ich Multisampling?

Rechtsfalte
quelle

Antworten:

4

Hier ist eine Lösung, aber Sie müssen createDeviceEx anstelle der aktuellen Funktion aufrufen .

Sie müssen eine SIrrlichtCreationParameters- Struktur an die obige Funktion übergeben, wobei das AntiAlias-Member auf true gesetzt ist (oder ein anderer Wert? Es scheint, dass die Variable eine vorzeichenlose Ganzzahl und kein Bool ist, was Sie nie bemerkt haben). Natürlich müssen Sie einige andere Strukturelemente definieren, um dasselbe IrrlichtDevice wie das in Ihrer Frage zu haben. ;)

Hier ist ein Code, wenn Sie es vorziehen: (Warnung: Ich habe Irrlicht seit 1 Jahr nicht mehr verwendet)

SIrrlichtCreationParameters params = SIrrlichtCreationParameters();
params.AntiAlias = true;
params.DriverType = video::EDT_OPENGL;
params.WindowSize = core::dimension2d<u32>(800, 700);
IrrlichtDevice *device = createDeviceEx(params);

Sehen Sie hier für (leider nicht viel) Informationen. (das Irrlicht-Dokument ist in der Tat leider nicht sehr hilfreich)

Hoffe das hilft, gute Nacht! :-)

Minishlink
quelle
Ich denke, eine Kombination aus Ihrer Antwort und der von user1201210 ist richtig. Es sollte "params.AntiAlias ​​= 8;" sein. Je höher, desto besser scheint es.
James Zaghini
Der AntiAlias-Wert soll ein u8 und kein Boolescher Wert sein. Gültige Werte sind Zweierpotenzen, also 2, 4, 8, 16. Das Gerät greift normalerweise auf die nächsthöhere Zahl zurück, wenn Sie einen zu hohen Faktor angeben. 1 ist normalerweise dasselbe wie 0, aber es hängt davon ab, ob die Hardware eine spezielle Bedeutung für 1 als AntiAlias-Wert hat.
Octopus
2

Kurzer Nachtrag zu Minishlinks Antwort: Gibt AntiAliasdie Anzahl der Samples an, die für das Anti-Aliasing verwendet werden sollen. Das folgende Snippet stammt aus Irrlichts COpenGLDriver.cpp.

// This value determines the number of samples used for antialiasing
// My experience is that 8 does not show a big
// improvement over 4, but 4 shows a big improvement
// over 2.
if(AntiAlias > 32)
    AntiAlias = 32;
user1201210
quelle