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

Bugger

Frischling

  • »Bugger« ist der Autor dieses Themas

Beiträge: 66

Wohnort: Bezirk Freistadt

Beruf: EDVO HTL Schüler

  • Private Nachricht senden

1

09.02.2008, 18:48

Rendern in MFC- Komponente mit DX

Hi, Ich arbeite derzeit an einer Simulation für einen HexaPod(So ein (Spinnen-)Roboter der eben sechs Füße hat).

Der Simulator läuft in nem Windows Dialog wo man dann das Script für die Bewegung eintippen und gleich darauf testen kann.
Beim Test soll ein Modell des HexaPods bewegt werden, welches am besten mit DirectX grendert wird.
Aber wie kann man mit DirectX in eine MFC Komponente rendern und welche sollte ich dazu verwenden?
Hältst du nicht den Bug in Ehren, wird er dich noch manches Lehren.

Ein Gespräch setzt voraus, dass der andere Recht haben könnte.

2

09.02.2008, 19:14

Static- oder Bitmapcontrol sollten funktionieren. Wenn du das Buch von David hast, Kapitel 2 - 06, Nebel, macht er es glaub ich mit Static:

C-/C++-Quelltext

1
CONTROL "",IDC_OUTPUT,"Static",SS_BLACKRECT,12,18,200,150

Beim Initialisieren des Device den zuvor ermittelten Handle des Control übergeben.

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

3

09.02.2008, 19:47

soweit ich weiss, kann man mit directx in nahezu jedes widget rendern, wenn du dessen handle übergibst. aber lass lieber die finger von mfc
"Don't trust your eyes: They are a hell of a lot smarter than you are"

4

09.02.2008, 20:10

Seh ich auch so ChrisJ.
DX rendert fast auf alles was nicht niet- und nagelfest ist.

Bugger

Frischling

  • »Bugger« ist der Autor dieses Themas

Beiträge: 66

Wohnort: Bezirk Freistadt

Beruf: EDVO HTL Schüler

  • Private Nachricht senden

5

09.02.2008, 21:39

@TrikkieMikkie

Danke für den Tipp, ich hab das mal soweit von David übernommen hab also ein Bild mit Rechteck als Typ genommen und das Handle das ich von GetDlgItem(IDC_TESTFENSTER) bekomme an tbDirect3D::Init() weitergeleitet... Das funz soweit auch ganz gut... DirectX Schnittstelle wird problemlos erstellt... allerdings, wenn ich jetzt was rendern (bzw. das Schwarze Frame mit Clear weiß machen) will, passiert gar nichts :cry:... woran könnte das liegen?

@ChrisJ

Zitat

aber lass lieber die finger von mfc

Was soll ich denn dann nehmen?
Hältst du nicht den Bug in Ehren, wird er dich noch manches Lehren.

Ein Gespräch setzt voraus, dass der andere Recht haben könnte.

6

09.02.2008, 21:49

Ohne mehr Info/Code keine Ahnung, woran das liegt. Was sagt die TriBase Log-Datei?
Ansonsten mach deinen Namen mal alle Ehre und schmeiß den Debugger an. :)
Verwendest du VC6 ?

Bugger

Frischling

  • »Bugger« ist der Autor dieses Themas

Beiträge: 66

Wohnort: Bezirk Freistadt

Beruf: EDVO HTL Schüler

  • Private Nachricht senden

7

09.02.2008, 22:07

kk, hier die Codeausschnitte die mit dem Bild zutun haben:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
   //  ... OnInitDialog aus der DialogKlasse ...


    SetTimer(WM_TIMER, TIMER_ELAPSE, NULL); // TIMER_ELAPSE = 50

    m_proc.Init(*GetDlgItem(IDC_TEST_PICTURE));


  //    ... Init(HWND hWnd) aus einer eigenen Simulatorklasse...


                tbInit();
    tbConfig config;
    tbDoConfigDialog(&config);
    config.Direct3D.bWindowed = TRUE;
    config.Direct3D.VideoMode.Width = 640;
    config.Direct3D.VideoMode.Height  = 480;
    if(D3D.Init(&config, "HexaSIM", hHwnd, NULL)){
        MessageBox(NULL, "DirectX konnte nicht initiallisiert werden", "Fehler", MB_OK);
    }
    D3D->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, tbColor(1.0f), 1.0f, 0);

       //  OnTimer


    m_ViewCtrl.RedrawWindow();


m_ViewCtrl is übrigends die Membervar(CStatic) für das Bild

Zur Log- Datei... die versichert mir das alles in bester Ordnung ist... was ich in Bezug zur Initiallisierung selbst auch glaube...

Und zum Debuggen... was würde das bringen? Ja ich könnte die einzelnen Werte zur Laufzeit prüfen(das hab ich auch) aber da das Programm nicht abstürzt macht das doch wenig Sinn oder?

Und ja ich verwende VS6.0(SP6.0 EnterpriseEdition), hatte aber bis jetzt noch keine (gröberen) Probleme wegen DX und den neueren SDK's... ich weiß, ich sollte zu VS2005 oder 08 wechseln :roll: aber ich bin bis jetzt auch ganz gut mit VS6.0 ausgekommen ;) ehrlich gesagt isses mir sogar von der Übersichtlichkeit weit lieber als die neueren VS und soviel entgeht mir vom derzeit vom Funktionsunfang glaub ich noch nicht
Hältst du nicht den Bug in Ehren, wird er dich noch manches Lehren.

Ein Gespräch setzt voraus, dass der andere Recht haben könnte.

8

09.02.2008, 23:04

Nee, gegen VS6 gibts eigenlich nix zu meckern. Hat mich nur so interessiert. (Allerdings bevorzuge ich die neueren Versionen)
How ever, back to topic. Bezüglich Debuggen meinte ich z.B. Werte, die die Rendermethode für das Modell zurückgibt.
Aber wenn das Rechteck schwarz bleibt? Das heißt die Clear-Methode eigentlich schon fehlschlägt? tbColor(1.0f) sollte ja weiß ergeben oder? (ich mach nix mit der TB-Engine)
Mmh, grübel...

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

9

10.02.2008, 00:54

Zitat von »"Bugger"«

@ChrisJ

Zitat

aber lass lieber die finger von mfc

Was soll ich denn dann nehmen?


wxwidgets, gtkmm, qt, ...
es gibt etliche alternativen für gui-biblitiotheken mit einer schöneren und effizienteren, voll objektorientierten und sogar noch platformübergreifenden schnittstelle als die mfc!
die mfc ist ein häßlicher wrapper der winapi.
"Don't trust your eyes: They are a hell of a lot smarter than you are"

10

10.02.2008, 08:38

Quellcode

1
m_ViewCtrl.RedrawWindow(); 

Veranlasst, das Control neuzuzeichnen, wenn ich mich recht erinnere.
Das heißt vermutlich, das Teil wird wieder auf seinen ursprünglichen Zustand zurückgesetzt (schwarzes Rechteck), und das Gerenderte von DX wird überpinselt.

Werbeanzeige