Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

17.02.2008, 20:55

Mehrere Viewports in einem Fenster

Hi Leute!

Ich würde gerne vier verschiedene Ansichten in einem Fenster rendern. Ich habe gelesen, dass man mithilfe einer SwapChain nur ein Device erzeugen muss, um ans Ziel zu gelangen.

Meine Frage: Hätte eventuell jemand von euch ein Beispiel, wie das mit der Swapchain funktioniert. Am allerbesten in C#, sonst ist C++ auch ok.

Danke im Voraus und lg

enne

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

2

17.02.2008, 21:01

http://zfx.info/Tutorials.php?ID=94
"Don't trust your eyes: They are a hell of a lot smarter than you are"

3

17.02.2008, 21:07

http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/directx9_m_Oct_2004/directx/direct3d/tasks/d3ddevice/createaswapchain.asp ;)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

4

17.02.2008, 21:38

Ok, vielen Dank für die Links.

Eigentlich würde ich gerne folgendes machen:

Ich hab zwei Fenster, wobei in jedem Fenster ein Zylinder gerendert werden soll.
In einem der beiden Fenster soll der Zylinder dreidimensional dargestellt werden, im anderen Fenster jedoch zweidimensional in Strickgrafik. Das heißt, dass in diesem zweidimensionalen Fenster nur die Kontur des Zylinders erkennbar sein soll.
Was jetzt noch erschwerend hinzukommt ist, dass es möglich sein soll, die Kontur in diesem zweidimensionalen Fenster mit der linken Maustaste anzuwählen.

Die Frage, die sich mir hier auftut ist, ob eine Swapchain für so einen Fall überhaupt sinnvoll ist. Wäre es vielleicht geschickter, zwei komplett unterschiedliche Rendervorgänge vorzunehmen, wobei ich im Fenster für die zweidimensionale Ansicht einfach nur vier Linien miteinander verbinde und im dreidimensionalen Fenster den Zylinder wirklich dreidimensional darstelle?

Sorry, wenn das vielleicht wie eine komplette Anfängerfrage klingt, aber ich hab bis dato noch nix mit Direct3D gemacht und kenn mich deswegen noch nicht wirklich damit aus. ;)

lg enne

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

17.02.2008, 23:14

Zitat von »"enne87"«

In einem der beiden Fenster soll der Zylinder dreidimensional [...]


ok ;)

Zitat von »"enne87"«

Die Frage, die sich mir hier auftut ist, ob eine Swapchain für so einen Fall überhaupt sinnvoll ist.


jop, ist sie...

Zitat von »"enne87"«

Wäre es vielleicht geschickter, zwei komplett unterschiedliche Rendervorgänge vorzunehmen


jop, so wird man das wohl machen. ob du jetzt im einen fenster nur linien verbindest und im andren das ganze 3d renderst oder irgendwie anders is letztendlich egal, da du ja sowieso zwei unabhängige rendervorgänge hast...

ich kenn leider kein tutorial oder so dazu, aber die beiden links oben sollten eigentlich einigermaßen hilfreich sein :roll:

6

17.02.2008, 23:37

Sehr gut, dann werd ich mir das mal genau anschaun. Vielen Dank euch für die sehr gute Hilfe :)

lg enne

7

19.02.2008, 23:50

Hi!

Sorry, wenn ich das Thema nochmals aufgreifen muss, aber bei mir haut das mit den Swapchains nicht ganz hin.

Ich habe zwei Forms und in beiden möchte ich dieselbe Szene rendern.

Ich erzeuge daher im ersten Fenser wie gewohnt mein Device

C-/C++-Quelltext

1
m_oDevice = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, m_oPresentParams);


und meine Present Parameters.

Dann erzeuge ich zwei Swapchains:

C-/C++-Quelltext

1
2
sc1 = new SwapChain(m_oDevice, m_oPresentParams);
            sc2 = new SwapChain(m_oDevice, m_oPresentParams);


Im ersten Fenster rendere ich dann wie folgt:


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void Render()
{
       Surface buffer = sc1.GetBackBuffer(0, BackBufferType.Mono);
       m_oDevice.SetRenderTarget(0, buffer);

       //Hintergrund blau einfärben und Z-Buffer-Inhalt mit 

        m_oDevice.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue,            
        1.0f, 0);
       //Szene beginnen

       m_oDevice.BeginScene();

        //Szene beenden

       m_oDevice.EndScene();

      //Szene auf den Monitor ausgeben

       sc1.Present();

}


Im zweiten Fenster mache ich es gleich, nur dass ich statt der ersten die zweite Swapchain verwende.

Das Problem ist, dass im zweiten Fenster nicht gerendert wird, sondern nur die ganz normale Windows Form gezeichnet wird.

Mach ich da was falsch?

lg enne

8

20.02.2008, 00:41

Ok, bei sc1.Present(); sollte man schon den Handle für das Fenster reinschreiben, in welches man rendern will, sonst wird es schlecht gehn.

Danke euch.

Werbeanzeige