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

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

1

19.01.2007, 17:16

Komisches Verhalten im Vollbildmodus!

Hi Leute!

Hab zZ 2 Probleme mit dem Vollbildmodus... wobei eines eher eine Frage als ein Problem ist.
Und zwar, wenn ich im Fenstermodus bin, dann rendere ich meine Szene mit 600fps. Kaum schalt ich bei GLEICHER Auflösung in den Vollbildmodus habe ich konstant 60fps (als würde irgendetwas die FPS Zahl begrenzen!)... Und ich versteh einfach nicht warum!

Mein 2. Problem besteht darin, dass im Fenstermodus mein Cursor sich genau richtig verhaltet, aber im Vollbildmodus wird er so... komisch... so als würde er auf Glatteisfahren. Reagiert verzögert, beschleunigt, usw... Eigenartig eben. Ich kann mir momentan nicht erklären, warum das so ist. Theoretisch müssten 60fps LOCKER reichen, um eine flüssige Cursorbewegung zu erhalten!

Hoffe ihr wisst da was, was ich nicht weiß! Danke schonmal!
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

19.01.2007, 17:18

erstes hat mit v sync zu tun. zweiteres kann ich nichts zu sagen, weil ich das nie hatte. Ist das der Windowscursor oder ein selbst erstellter?
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

3

19.01.2007, 17:19

Selbst erstellt... Handelt sich eigentlich nur um ein Quad, dessen Position ich mit der Mausbewegung (DirectInput) ändere!
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

19.01.2007, 17:23

Naja ich könnte jetzt drauf losraten, aber code würde das raten erleichtern ;)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

5

19.01.2007, 17:26

Sag mir welchen Teil vom Code ich posten soll... Kann wohl kaum die gesamte GUI und Cursorklasse posten? ^^ Alternativ könnte ich dir auch die Dateien schicken, if u want! ;-)
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

19.01.2007, 17:28

Interessant sind die Ecken wo du die Bewegung der Maus feststellst und wo du den Cursor dann mit den Daten entsprechend zeichnest.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Chase

Alter Hase

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

7

19.01.2007, 17:31

Das mit dem Cursor ist einfach: Wahrscheinlich speicherst du die alten Cursorkoordinaten und bildest die Differenz zu den neuen. Diesen relativen Wert addierst du dann irgendwie zur absoluten Position. Laeuft dein Programm im Vollbildmodus allerdings mit 600 FPS ist diese Differenz sehr klein. Es hilft auch nicht die vergangene Zeit mit einzubeziehen, da meistens 0, 1 oder 2 Pixel mulitpliziert mit der Zeitdifferenz.. nun ja, eine sehr traege Bewegung erzeugen.

Ich habs einfach so geloest dass ich hoechstens 50 Mal in der Sekunde den Curser aktuallisiere.
"Have you tried turning it off and on again?"

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

8

19.01.2007, 17:41

Also...

So werden die Vertize initialisiert:

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
23
24
//Vertize initialisieren

//Unten rechts

m_aVertex[2].Color          = Color;
m_aVertex[2].fRHW           = 1.f;
m_aVertex[2].vPosition      = og3DVector(m_vPositionAbs.x + m_vSizeAbs.x, m_vPositionAbs.y + m_vSizeAbs.y, 0.1f);
m_aVertex[2].vTexture       = m_pvTexBottomRight[0];

//Unten links

m_aVertex[0].Color          = Color;
m_aVertex[0].fRHW           = 1.f;
m_aVertex[0].vPosition      = og3DVector(m_vPositionAbs.x, m_vPositionAbs.y + m_vSizeAbs.y, 0.1f);
m_aVertex[0].vTexture       = og2DVector(m_pvTexTopLeft[0].x, m_pvTexBottomRight[0].y);

//Oben links

m_aVertex[1].Color          = Color;
m_aVertex[1].fRHW           = 1.f;
m_aVertex[1].vPosition      = og3DVector(m_vPositionAbs.x, m_vPositionAbs.y, 0.1f);
m_aVertex[1].vTexture       = m_pvTexTopLeft[0];

//Oben rechts

m_aVertex[3].Color          = Color;
m_aVertex[3].fRHW           = 1.f;
m_aVertex[3].vPosition      = og3DVector(m_vPositionAbs.x + m_vSizeAbs.x, m_vPositionAbs.y, 0.1f);
m_aVertex[3].vTexture       = og2DVector(m_pvTexBottomRight[0].x, m_pvTexTopLeft[0].y);


=====================================
Gerendert wird alles so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ogDirect3D::Instance().SetFVF(ogGUIVertex::dwFVF);

//Rendern

ogDirect3D::Instance().SetTransform(D3DTS_WORLD, ogMatrixIdentity());
m_Effect.Begin();
for(int iPass = 0; iPass < m_Effect.GetPasses(); iPass++)
{
    m_Effect.Pass(iPass);
    //Rendern

    HRESULT hResult;
    if(FAILED(hResult = ogDirect3D::Instance()->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, m_aVertex, sizeof(ogGUIVertex))))
    {
        OG_ERROR_DIRECTX(L"DrawPrimitiveUP()", hResult, OG_ERROR);
    }
}
m_Effect.End();


und zwar mit diesem Effekt:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
TEXTURE Texture;

TECHNIQUE T1
{
    PASS P1
    {
        Texture[0]          = <Texture>;
        ZEnable             = False;
        ZWriteEnable        = False;
        ColorOp[0]          = Modulate;
        ColorArg1[0]        = Current;
        ColorArg2[0]        = Texture;
        ColorOp[1]          = Disable;
        AlphaOp[0]          = Modulate;
        AlphaArg1[0]        = Current;
        AlphaArg2[0]        = Texture;
        AlphaOp[1]          = Disable;
        AlphaBlendEnable    = True;
        SrcBlend            = SrcAlpha;
        DestBlend           = InvSrcAlpha;
    }
}

(Texture wird in der Init geladen und gesetzt!)

==============================================
Und das ist die Movemethode:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//Maus bewegen

//Neue Pos berechnen

m_vPositionAbs.x    += m_fSpeedFactor * DI[OG_MOUSE_X_POS].fAnalog * m_vResolution.x;
m_vPositionAbs.y    -= m_fSpeedFactor * DI[OG_MOUSE_Y_POS].fAnalog * m_vResolution.y; //Negativ, weil null oben ist!


//Im gültigen Bereich?

if(m_vPositionAbs.x < 0.f) m_vPositionAbs.x = 0.f;
if(m_vPositionAbs.y < 0.f) m_vPositionAbs.y = 0.f;
if(m_vPositionAbs.x >= m_vResolution.x) m_vPositionAbs.x = m_vResolution.x - 1;
if(m_vPositionAbs.y >= m_vResolution.y) m_vPositionAbs.y = m_vResolution.y - 1;

//Vertize aktualisieren

//Unten rechts

m_aVertex[2].vPosition      = og3DVector(m_vPositionAbs.x + m_vSizeAbs.x, m_vPositionAbs.y + m_vSizeAbs.y, 0.1f);
//Unten links

m_aVertex[0].vPosition      = og3DVector(m_vPositionAbs.x, m_vPositionAbs.y + m_vSizeAbs.y, 0.1f);
//Oben links

m_aVertex[1].vPosition      = og3DVector(m_vPositionAbs.x, m_vPositionAbs.y, 0.1f);
//Oben rechts

m_aVertex[3].vPosition      = og3DVector(m_vPositionAbs.x + m_vSizeAbs.x, m_vPositionAbs.y, 0.1f);

(Die DirectInput-Klasse (DI) ist ählich aufgebaut wie die von David...)

So... falls noch was erwünscht ist, kann ich es gerne posten!

Hoffe das hilft...!
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

9

19.01.2007, 18:08

im welchen Wertebereich bewegen sich die hier beteiligten Variablen?

C-/C++-Quelltext

1
2
3
4
//Maus bewegen 

//Neue Pos berechnen 

m_vPositionAbs.x    += m_fSpeedFactor * DI[OG_MOUSE_X_POS].fAnalog * m_vResolution.x; 
m_vPositionAbs.y    -= m_fSpeedFactor * DI[OG_MOUSE_Y_POS].fAnalog * m_vResolution.y; //Negativ, weil null oben ist! 
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

10

19.01.2007, 19:17

m_fSpeedFactor > 0.f bis floatMax ;-)
Aber bei mir meist 1.0f oder 0.8f! Bei besagtem Programm 0.8f!
.fAnalog im Intervall [-1.f, 1.f]:

C-/C++-Quelltext

1
2
3
4
5
6
7
//Achsen

    m_aButton[OG_MOUSE_X_POS].fAnalog = static_cast<float>(MouseState.lX) * 0.004f;
    m_aButton[OG_MOUSE_X_NEG].fAnalog = -(m_aButton[OG_MOUSE_X_POS].fAnalog);
    m_aButton[OG_MOUSE_Y_POS].fAnalog = static_cast<float>(MouseState.lY) * -0.004f;
    m_aButton[OG_MOUSE_Y_NEG].fAnalog = -(m_aButton[OG_MOUSE_Y_POS].fAnalog);
    m_aButton[OG_MOUSE_Z_POS].fAnalog = static_cast<float>(MouseState.lZ) * 0.005555f;
    m_aButton[OG_MOUSE_Z_NEG].fAnalog = -(m_aButton[OG_MOUSE_Z_POS].fAnalog);

Wobei MouseState vom Typ DIMOUSESTATE2 ist!

und Resolution ist die Bildschirmauflösung ;-) getestet mit 1024x768 und 1280x1024
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Werbeanzeige