myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grafik und Sound » [DX]Multitexturing will nicht
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

[DX]Multitexturing will nicht

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
byte3
myCSharp.de-Mitglied

Dabei seit: 06.11.2007
Beiträge: 3


byte3 ist offline

[DX]Multitexturing will nicht

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi

Ich probier mich seit einiger Zeit an einem eigenem Strategiespiel und möchte nun Multitexturing einbauen. Hab mir dazu schon per Google ein paar Sachen rausgesucht, aber so ganz glücklich wurde ich damit nicht. Ein Fehler tritt zwar nicht auf, aber dargestellt wird auch nichts.

Ich Poste einfach mal den Code:

Customvertex Struct:

C#-Code:
public struct Transformed2Textured
    {
        public float Rhw;
        public float X;
        public float Y;
        public float Z;
        public float W;
        public float Tu0;
        public float Tv0;
        public float Tu1;
        public float Tv1;
        public static readonly D3D.VertexFormats Format = D3D.VertexFormats.Transformed | D3D.VertexFormats.Texture1 | D3D.VertexFormats.Texture2;

        public DX.Vector4 Position
        {
            get { return new DX.Vector4(X, Y, Z, W); }
            set
            {
                X = value.X;
                Y= value.Y;
                Z = value.Z;
                W = value.W;
            }
        }
    }

Erstellung des VertexBuffer:

C#-Code:
vb = new Microsoft.DirectX.Direct3D.VertexBuffer(typeof(Transformed2Textured), 6, Graphics.Instance.getDevice(),
                Microsoft.DirectX.Direct3D.Usage.WriteOnly | Microsoft.DirectX.Direct3D.Usage.Dynamic, Transformed2Textured.Format,
                Microsoft.DirectX.Direct3D.Pool.Default);

Code zum Zeichnen:

C#-Code:
                        Graphics.Instance.getDevice().SetTexture(0, Graphics.Instance.getTexture(textures[i].TextureID));
                        Graphics.Instance.getDevice().TextureState[0].ColorArgument1 = Microsoft.DirectX.Direct3D.TextureArgument.TextureColor;
                        Graphics.Instance.getDevice().TextureState[0].ColorOperation = Microsoft.DirectX.Direct3D.TextureOperation.SelectArg1;

                        Graphics.Instance.getDevice().SetTexture(1, Graphics.Instance.getTexture(textures[i].TextureID));
                        Graphics.Instance.getDevice().TextureState[1].ColorArgument1 = Microsoft.DirectX.Direct3D.TextureArgument.Current;
                        Graphics.Instance.getDevice().TextureState[1].ColorArgument2 = Microsoft.DirectX.Direct3D.TextureArgument.TextureColor;
                        Graphics.Instance.getDevice().TextureState[1].ColorOperation = Microsoft.DirectX.Direct3D.TextureOperation.BlendFactorAlpha;
                        Graphics.Instance.getDevice().RenderState.TextureFactor = Color.FromArgb(128, 0, 0, 0).ToArgb();

                        Graphics.Instance.getDevice().SetStreamSource(0, vb, 0);
                        Graphics.Instance.getDevice ().DrawPrimitives(Microsoft.DirectX.Direct3D.PrimitiveType.TriangleList, 0, 2);

                        Graphics.Instance.getDevice().SetTexture(0, null);
                        Graphics.Instance.getDevice().SetTexture(1, null);

Ich hab mich dabei etwas an dem Beitrag von Actarus orientiert:
 Multitexturing (Textur Koordinaten)

Die Texturen werden richtig geladen, Position und Tu/Tv Werte sich auch korrekt.
Bei mir sind die Tu/Tv werte der ersten Textur identisch mit dennen der zweiten, ich denke aber das ist ok so.

Ohne das Multitexturing hat das ganze schon Funktioniert, seitdem hat sich nur weniges geändert.

1. D3D.CustomVertex.TransformedTextured wurde durch Transformed2Textured ersetzt.
2. Code zum zeichnen wurde angepasst.


Ich hoffe mir kann heir jemand bei der Lösung des Problems behilflich sein.
Danke!

bye
29.06.2008 19:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
mcs mcs ist männlich
myCSharp.de-Mitglied

Dabei seit: 13.11.2004
Beiträge: 8
Entwicklungsumgebung: VS .net 2003, 2005, Netbeans


mcs ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

hi,

ist ein bisschen schwer ohne den restlichen Code, aber was mir aufgefallen ist:

C#-Code:
Graphics.Instance.getDevice().SetTexture(0, Graphics.Instance.getTexture(textures[i].TextureID));  // hier
                        Graphics.Instance.getDevice().TextureState[0].ColorArgument1 = Microsoft.DirectX.Direct3D.TextureArgument.TextureColor;
                        Graphics.Instance.getDevice().TextureState[0].ColorOperation = Microsoft.DirectX.Direct3D.TextureOperation.SelectArg1;

                        Graphics.Instance.getDevice().SetTexture(1, Graphics.Instance.getTexture(textures[i].TextureID)); // und hier (textures[i]) zweimal die gleiche Textur

mfg
01.07.2008 19:43 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
byte3
myCSharp.de-Mitglied

Dabei seit: 06.11.2007
Beiträge: 3

Themenstarter Thema begonnen von byte3

byte3 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ja, ist mir bekannt das dort zwei mal die gleiche Textur verwendet wird. Ich dachte das sei kein Problem, habs aber nun mal geändert, mir wird dennoch nichts angezeigt.

Welcher restliche Code würde denn zur Problemlösung beitragen?
Ich dachte mir da das ganze vorher, ohne dem Multitexturing, funktioniert hat und ich dort auch nichts verändert habe, ich den Code nicht Posten brauch.

Das einzige was mir dazu noch einfällt wär, das ich evtl. etwas beim erstellen des Direct3D Device vergessen hab.

Hier der Code dazu:

C#-Code:
presentParams.Windowed = true;
presentParams.EnableAutoDepthStencil = true;
presentParams.AutoDepthStencilFormat = Microsoft.DirectX.Direct3D.DepthFormat.D16;
frm.ClientSize = new System.Drawing.Size(1024, 768);
presentParams.SwapEffect = D3D.SwapEffect.Discard;
presentParams.BackBufferWidth = 1024;
presentParams.BackBufferHeight = 768;
presentParams.BackBufferFormat = Microsoft.DirectX.Direct3D.Format.A8R8G8B8;
presentParams.BackBufferCount = 0;
presentParams.PresentationInterval = Microsoft.DirectX.Direct3D.PresentInterval.Immediate;
device = new D3D.Device(0, D3D.DeviceType.Hardware, frm, D3D.CreateFlags.SoftwareVertexProcessing, presentParams);
device.DeviceResizing += new System.ComponentModel.CancelEventHandler(cancelResize);

device.RenderState.AlphaBlendEnable = true;
device.RenderState.SourceBlend = D3D.Blend.SourceAlpha;
device.RenderState.DestinationBlend = D3D.Blend.InvSourceAlpha;
device.SetRenderState(D3D.RenderStates.Wrap0, false);
device.VertexFormat = Transformed2Textured.Format;

Muss man denn irgendwo noch irgendwas einstellen damit Multitexturing funktioniert?
Die Texturen müssen nicht irgendwie besonders geladen werden oder ein bestimmtes Format haben?

Ist denn mein CustomVertex struct richtig?
Dort habe ich das Gefühl etwas nicht richtig gemacht zu haben.
01.07.2008 23:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
byte3
myCSharp.de-Mitglied

Dabei seit: 06.11.2007
Beiträge: 3

Themenstarter Thema begonnen von byte3

byte3 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hah! Nach langer Zeit des rumprobierens bin ich auf die Lösung gekommen.
Der Code von mir ist zu 99% korrekt, nur in meinem Customvertex Struct Zeile 3 steht public float Rhw;, diese muss gelöscht werden.

Als ich meine CustomVertex erstellt habe hatte ich CustomVertex.TransformedTextured als Vorlage genommen, ich dachte mir das meine CustomVertex genau so aussehen muss wie die Vorlage, nur eben mit 2 paar Texturcoordinaten. Naja, falsch gedacht.

Ich habe keine ahnung wieso das so ist, wär nett wenn mir das jemand erklären könnte.
09.07.2008 14:03 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 11 Jahre.
Der letzte Beitrag ist älter als 11 Jahre.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 29.03.2020 04:16