Laden...
Avatar #avatar-1789.png
Benutzerbeschreibung
this.Hulk = true;

Forenbeiträge von DerHulk Ingesamt 270 Beiträge

23.05.2006 - 22:03 Uhr

Vielen dank, bin nicht drauf gekommen!
Konstante Variablen 😄!Mal was neues! 😉

mfg derHulk

23.05.2006 - 21:15 Uhr

Hi Leutz bin war heute fröhlich am proggen und bin dann leider auf ein Problem gestossen wo ich nicht so recht weiter weis.Also folgendes:
eine Klasse implementiert eine Konstante Variable int


using System;

namespace Konstantentest
{
	public class Class1
	{
		public Class1()
		{
			//
			// TODO: Fügen Sie hier die Konstruktorlogik hinzu
			//
		}
		const int test = 1;
		public int Mytest
		{
			get{return test;} 
		}
	}
}

Meine Form Instanziert nun die Klasse und in einer switch Case
anweisung möchte ich nun Werte damit vergleichen:


static void Main() 
		{
			Application.Run(new Form1());
		}

		private void Form1_Load(object sender, System.EventArgs e)
		{
			Class1 testcs = new Class1();
			int test = 1;

			switch(test)
			{
				case testcs.Mytest:

				break;
			}
		}

Leider bekomm ich da ne Fehlermeldung:

"Ein Konstantenwert wird erwartet"

warum versteh ich nicht!Kann mir da einer Helfen?! ?(

Inerhalb der Klasse kann ich die Switch Anweiung durchführen wenn ich auf die
Konstanten Member selbst verweise!

mfg derHulk

21.05.2006 - 21:48 Uhr

Also ich hätte auch interesse ,kann aber noch nix definitives sagen! 8)

mfg DerHulk

21.05.2006 - 11:41 Uhr

Hallo zusammen,

hätte da noch ne kurze Frage zu dem hier beschriebenen Thread.
Und zwar wie/ist es möglich das der TCP-Listner die IP der bei Ihm connecteten
Clients sammeln kann?!

Mir ist klar das die Clients dem Server(Listener) dies Daten auch per Datenstrom schicken könnten jedoch währe das ja eine Übertragung die unnötig ist da er intern wissen muss wie die IP ist (im Hastablet ist der Client ja gespeichert).

Biete das Objekt Client eine Möglichkeit die Ip des Client zu ermitteln?

mfg der Hulk

19.05.2006 - 10:48 Uhr

Hallo, thx für die Antworten!

Habs jetzt erstmal folgendermassen Implementiert:

1x Windows Form
1 x Klasse frm_data (enthält die Informationen welche zeichen Form aktiv ist)
1- n x Klassen frm_Options/Game/Main etc. (hier sind die einzelnen Form die gezeichnet werden können, diese erben alle von einer MainDrawFrm die als Basis Klasse dient)

in den frm_Options/Game/Main kann man nun Tasteneingaben etc. abfragen und dann
z.B die Information in frm_Data ändern so das beim nächsten GameLoop ein anderes Fenster gerendert wird.

mfg DerHulk

17.05.2006 - 12:58 Uhr

Hi,also habe mal was zu b) gesucht evtl. hilft es dir weiter:

http://www.gamedev.net/reference/articles/article718.asp
http://www.gamedev.net/reference/articles/article915.asp
http://www.animeimaging.com/asp/PerlinNoise.aspx

mfg der Hulk

p.s

schau mal bei the code project da gibts noch ganz nette Wasser effekt!

16.05.2006 - 22:55 Uhr

Wenn ich DirectX besser verstehe, kann ich die Funktion ja verbessern.

Dann teil uns bitte mit wie man es richtig macht, würde mich auch mal interessieren! 😉

mfg DerHulk

16.05.2006 - 21:55 Uhr

Hallo, habe gerade was rausgefunden:


PresentParameters pp = new PresentParameters();

		pp.Windowed = this.Fullscreen;
		if(this.Fullscreen==true)
		{
		 this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
		 this.Height= 400;
		 this.Width = 400;
		 this.WindowState = System.Windows.Forms.FormWindowState.Normal;
		}
		pp.EnableAutoDepthStencil = true;
		pp.AutoDepthStencilFormat = DepthFormat.D16;
		pp.SwapEffect = SwapEffect.Discard;
		pp.BackBufferHeight = 768;
		pp.BackBufferWidth = 1024;
		pp.BackBufferFormat = Format.X8R8G8B8;
		pp.PresentationInterval = PresentInterval.Default;
		return pp;

Ist nicht die schönste Art das zu machen aber es funktioniert bei mir!Hoffe es hilft dir!

mfg DerHulk =)

15.05.2006 - 21:34 Uhr

VB Igitt! 😉

Hi, also habe gerade mal reingeschaut, also ich versteh da zwei Sachen nicht, beim umsetzten des Flags sagste :


Fullscreen = Not Fullscreen

und wenn dann die PP setzt auch wieder :


Windowed= Not Fullscreen

muss da nicht ein "Not" weg?

Wenn das auch nicht funktoniert Probier mal Device.Disopse durch
Device = nothing
Device = new (...

Sind nur Vorschläge da ich VB nicht installiert habe kann ich es nicht testen! ⚠

mfg

DerHulk

15.05.2006 - 20:35 Uhr

Probiers mal mit diesen Einstellungen:


  PresentParameters presentParams = new PresentParameters(); 
        presentParams.Windowed=false;
	    presentParams.EnableAutoDepthStencil = true;
		presentParams.AutoDepthStencilFormat = DepthFormat.D16;
	    presentParams.SwapEffect = SwapEffect.Discard; 
		presentParams.BackBufferHeight = 768;
		presentParams.BackBufferWidth = 1024;
		presentParams.BackBufferFormat = Format.X8R8G8B8;
	    presentParams.PresentationInterval = PresentInterval.Default;

mfg

der hulk

15.05.2006 - 18:53 Uhr

Hi, naja sagen wir mal es sind 50Texturen und noch ca. 50 andere Pfade!
Was währe da den angebracht?Òder doch besser die Pfade in eine Textdatei die man dann auswertet?

mfg derHulk

15.05.2006 - 18:36 Uhr

Hi Leutz ich muss mal wieder mit ein paar Fragen an euch heran tretten,

ich möchte gern in meiner DX Application mehere Fenster(also ein Start Bildschrim einen Optionsbildschirm und den Eigednlich Spiel bildschirm) darstellen.
Jetzt meine Frage(n): Da ich ja in DX eh alles selbst zeichne wird es wohl kaum Sinn machen eine andere WindowsForm zu erstellen, statt dessen bleib ich in der selben Form,oder?!
Ich hatte mir jetzt überlegt das ich für jedes "Fenster" was ich zeichne eine Klasse habe,
die eine Funktion Implementiert die mir Fenster so zeichnet wie ich es möchte.
Wenn ich nun ein anderes Fenster öffnen will stelle ich in der eigendlichen Windows-form
ein Flag um und rufe die Zeichen Funktion einer anderen Klasse auf!

Ist das sinnvoll oder wie sollte man das machen(Device und andere Objekte die man
immer braucht bei ref Übergeben)?! =)

mfg derHulk

ps. sorry wenn diese Fragerei "Wie sollte man das machen" bei mir immer wieder auftaucht,nur würde ich es gern direkt richtig machen! 😉

07.05.2006 - 19:46 Uhr

Hi leutz,bin gerade was unendschlossen 🤔 und würde gern mal eure Meining dazu wissen
wie man sowas macht.
Also Problemstellung: wenn man viele Texturen benutzt währe
es evtl durchaus sinvoll deren Pfad(Dateipfad) in eine Eigene Klasse zu schreiben oder?

Sollte man dann die Pfade in der Klasse über Properties Abrufen, und
den Pfad in einer Konstanten im Quellcode stehen haben?

Oder würden sich da Konstante Struckturen Anbieten, da man diese ja nicht Initialiesieren muss? (Ist das ein Vorteil?)

Oder sollte man alles in ne Textdatei (evtl. Verschlüsselt) schreiben und dann auslesen?

Selbe Frage stellt sich für mich bei z.B Spieler Objekten und deren Eigenschaften/
Attribute?!Wie gehen hier die Profis ran und wie/was ist der beste weg?!

mfg DerHulk

06.05.2006 - 08:32 Uhr

Hi leutz schonmal vielen dank für die Antworten,das hilft mir schon gut weiter!

mfg DerHulk! 👍

03.05.2006 - 22:39 Uhr

Hi leutz,also habe mich die Tage mal im Forum umgeschaut und eine menge Threads zum Thema Objekte Zerstören und Dispose gefunden( viele können das Thema bestimmt schon nicht mehr sehen),jedoch habe ich bis jetzt keine eindeutige Antwort auf meine Frage gefunden, "Muss ich mich selbst um die Speicherbereinigung selbst kümmern,und eine Dispose/Finalize Funktion schreiben bei jeder Klasse die ich Implementiere?" ?(
und wenn die Antwort "Ja" lautet, wie muss sowas aussehen? ?(
Finialize vom Objekt überschreiben und dann GC aufrufen? ?(
Falls die Antwort "Nein" lautet, vertraue ich blind dem GC,oder kann man optiemieren? ?(

mfg derHulk

03.05.2006 - 22:21 Uhr

Hi,also ansatt Invalidate zu benutzen um den Screen/Form neu zeichnen zu lassen
probiers mal mit this.Refresh oder this.Update!?

mfg derhulk

02.05.2006 - 18:31 Uhr

Hast recht das ist nicht die saubere Art! 😁
War aber auch nur ein Testprojekt! 😉

mfg derHulk

01.05.2006 - 21:27 Uhr

Hi,....also das mit den Streams ist schade wollte ja 2Verschiedene Objekte darstellen,...ist aber auch nicht so tragisch! 😉

Mit den Texel habe ich dir jetzt einfach mal mein Projekt als Download hier bereitgestellt.Schau mal in die Funktion gotoFrame und ändere mal den Wert

 float FulltextureSizeFactor = 1f;

auf

 float FulltextureSizeFactor = 0.8f;

Habe mal nachgesehen die Texel nehmen nur Werte zwischen 0 und 1 an!

mfg DerHulk

ps.

Übrigens super Tutorial was da verfast hast, hilft einem sehr und ist gut zum Nachschlagen wenn man mal was vergessen hat! 👍

01.05.2006 - 13:51 Uhr

Hi, leutz also:

Wieso zwei VertexStreams?

Weil es ja eigendlich möglich sein müste(immerhin wirds angeboten)
dachte das es evtl. Performanter sein könnte?!Habs zur Zeit auch erstmal so gelassen das ich den ersten Überschreibe!

Betreff Texel:
da ich mehrere Texturen in einer Datei gespeichert habe und die Texelkoorinaten ermitteln muss,habe ich folgende Funkion mal implementiert:


private TetureCoordinates goToFrame(int Tilescount,Corner CurrentCorner)
	{
	Tilescount = Tilescount-1;
	TetureCoordinates ReturnValue = new TetureCoordinates();
	int FramesPerRow = 4;
	int FramesPerColum = 1;
	int FaktorX = 1;
	int FaktorY = 0;
	float FulltextureSizeFactor = 1f;
	float TU = 0;
	float TV = 0;
	float FrameWidth = FulltextureSizeFactor/FramesPerRow;//1 = 100% z.B(drei Bilder pro Zeile 1/3)
	float FrameHight = FulltextureSizeFactor/FramesPerColum;//selbe für die Höhe
		//Wenn der Tilescount über den möglichen Frames liegt(4Rows * 4Colums= 16 mögliche
		//und 17 wurde angegeben) so wird ein Texel zurückgegen das (0,0,0,0) ist
		if(Tilescount <= FramesPerRow * FramesPerColum)
		{//Berechnung der Bildaten
			if(Tilescount <= 0){FaktorY = 0;FaktorX = 0;}
			else 
			{
				FaktorY = System.Convert.ToInt32(Math.Round(System.Convert.ToDouble(Tilescount/FramesPerRow),0));
				FaktorX = Tilescount -(FaktorY * FramesPerRow);
			}//das erste bild hat eine X = 0 Position
			switch (CurrentCorner)
			{
				case Corner.LeftUpper:
					TU = FaktorX*FrameWidth;
					TV = FaktorY*FrameHight;
					break;
				case Corner.LeftLower:
					TU = FaktorX*FrameWidth;
					TV = (FaktorY*FrameHight)+FrameHight;
					break;
				case Corner.RightUpper:
					TU = (FaktorX*FrameWidth)+FrameWidth;
					TV = FaktorY*FrameHight;
					break;
				case Corner.RightLower:
					TU = (FaktorX*FrameWidth)+FrameWidth;
					TV = (FaktorY*FrameHight)+FrameHight;
					break;
			}
		}
		//Frame ist ausserhalb des Bereiches
		else
		{
			TU = 0;
			TV = 0;
		}
		ReturnValue.Tu = TU;
		ReturnValue.TV = TV;
		return ReturnValue;

	}

Habe halt bei manchen Texturen einen Schwarzen Strich an den Seiten?!Aber nicht bei allen! 🤔

mfg DerHulk!

25.04.2006 - 21:54 Uhr

Dumm gelaufen für mich, habe die Tage ausprobiert das übern Viewpoint zu machen,
Problem an der Stelle ist nur das Die DirectX.Direct3d Sprites von der Transformation der Kamera nicht betroffen sind.Also kann ich meine Kamera drehen und wend en wie ich will meine Sprites sind immer an der selben Stelle! 🤔

mfg derHulk!

25.04.2006 - 21:47 Uhr

Hi,leutz ich habe mal wieder ein paar Fragen betreff DirectX(genau genommen sind es 2 Fragen)....

also die erste bezieht sich auf Vertexstreams könnte mir mal einer bitte erklären wie ich einen zweiten Vertexstream initilaisiere und dann render?

der erste ist ja kein Problem:


device.SetStreamSource(0, vertexBuffer, 0);

nur will ich jetzt diesen nicht überschreiben:

sonder den zweiten befüllen:


device.SetStreamSource(1, vertexBuffer, 0);
//muss ich den Offset Parameter
//auf den Schluss vom letztend Stream setzen?

Meine zweite Frage bezieht sich auf TV,TU werte im DX Tutorial habe ich gelesen das nur werte von 0-1 die Position der Textur wieder geben!
Habe das auch ausprobiert:
TU= 1;
TV = 1;
Gibt mir zwar den Rechten unteren Rand an aber ich bekomm dazu noch einen schwarzen Balken links und rechts???

Evtl. einer ne Ahnung warum? ?(

ich nutze für die Verts:
CustomVertex.PositionColoredTextured
CustomVertex.PositionColoredTextured.Format

mfg derHULK

22.04.2006 - 10:55 Uhr

Habe gerade was gefunden wie eine mögliche Implementation aussehen kann:

http://einfall.blogspot.com/2005/02/stage-i-ii-tiles.html

mfg

DerHulk

22.04.2006 - 09:58 Uhr

So wie ich dich verstehe ist das, genau das was nop mir erklärt hat also über die "Worldview" zu arbeiten. In einem Array befinden sich die Daten(Positionen) zu den
Tiles, das stellt das Starres Weltsystem mit X- und Y- Koordinaten da.
Jetzt binde ich meine Position des Spieler an die Worldview-> relatives Weltsystem. Die Ummrechnung was von relativen zum starren....sollte dann
über die Wolrdview selbst errechnet werden(hierbei würde sich meiner meinung
auch die Grafikarte selb darum kümmern was nun gerendert werden soll->culling).

Das ganze ist bestimmt besser als die Methode die ich erwähnt habe! X(

mfg der Hulk.

21.04.2006 - 23:16 Uhr

also S.H.-Teichhof,verstanden mehr nein als ja 😉!
Also, ich kann mir leider nicht vorstellen wie das zu einem Bewegunseffekt führen soll?
Ich zeig ja nur eine Reihe in Y(wenn Arry[x,y]) mehr an also 11, beim nächsten schritt der Figur währens 12? Jedoch würde sich nix bewegen?
Vielleicht kannste das noch was verdeutlichen.

nop:

ja das mit der Wolrdview ist so ne sache, eigendlich könnte man doch bestimmt die
worldview so aussrichten das der Spieler immer in der Mitte des Screens ist wenn
dieser sich nun bewegt dann bewegt sich die world view mit.
Die Array positionen werden nicht verändert und ich such mir aus dem Array nur die raus die wirklich im Screen währen?!(Ansatz so richtig?) ?(!

mfg derHulk

21.04.2006 - 22:41 Uhr

Ne, (habe das vielleicht nicht genau genug erklärt) also
stell dir vor das deine Spielerfigur/Objekt sich immer im Zentrum des Screens
befindet wenn du jetzt nach oben gehst bewegt sich ja diese Figur nicht,sondern
der Hintergrund wir verschoben,bzw gescrollt(Beispiel hier währe der erste GTA Teil).
Daher muss ich halt Tiles und deren Position neu berechnen!

Evtl. gibts ja auch ne andere Möglichkeit das zulösen, währe für jeden Vorschlag offen!
Evtl. könnte man das alles auch mit einer verschiebung der Worldview machen
(was evtl. auch Performanter währe)?! ?(

mfg

derHulk

21.04.2006 - 22:00 Uhr

Hi, leutz....

danke schonmal für jedewillige beteiligung! 👍

Also erstens habe ich das Probelm "vorerst" mal gelöst(Performance ist ja eine dauer Aufgabe 😭). Also erstmal zur Lösung:
Ich war so schlau das ich bei jedem Game-loop die Tastatur abgefragt habe und
die Koordinaten aller 50000 Tiles neuberechnet habe, was jedoch nicht so ne tolle Idee
war besser ist hier eine Zeit zu warten (Elapse Time), Anfänger fehler! 🤔
Dadurch gewinnt man schon gut an Performance weil man ja nicht 60 mal pro Seckunde
die Arrays berechnen muss, ich glaub nicht das das ein Spieler merkt! 😁

Zweitens habe ich die Tiles größe erhöht von 64x64 auf 256x256 was erstens mit der
selben anzahl von Tiles eine größere "Welt" ergibt oder man sich einfach Tiles sparen kann!

zu norman_timo:

den Sichtradius hatte ich schon berücksichtigt!Un mir im Array nur die Werte genommen die man auch sieht!

thx an alle!

mfg derHulk!

21.04.2006 - 21:15 Uhr

DX! 😉

sorry Vergessen zu erwähnen!

21.04.2006 - 20:19 Uhr

Hi, herbivore!

Also wenn ich den Text richtig verstanden habe kann ich mit


public void(out int x, out int y)
    {
        x = this.x;
        y = this.y;
    }

auch Werte an die Funktion übergeben die nicht initialiesiert wurden!?!

out dient nur zum Zurückgeben von (mehreren) Werten. Weitere Vorteile sind mir nicht bekannt.

wenn ich da was falsch verstehe, klärt mich auf ?!Wollte eigendlich dies nur erwähnen! 😉

mfg derHulk

21.04.2006 - 19:42 Uhr

Ein weiterer Vorteil von out ist dass damit "nicht initialisierte Variablen" übergeben werden können.

siehe:

http://www.galileocomputing.de/openbook/csharp/kap05.htm#Xxx498891

mfg der Hulk! =)

20.04.2006 - 22:50 Uhr

Hi, hätte da mal eine Frage im Bereich 2d. Und zwar arbeite ich hier mit Tiles die alle
bewegt werden sobald sich die Spielerfigur/Objekt bewegt(Background). Diese Tiles Sind im Grunde genommen ja nichts als Arrays mit Positionsdaten etc.!
Wenn ich jetzt sehr viele davon habe, um halt große Welten darzustellen wird
dieses Array sehr schnell ziemlich groß ≥50000 Einträge.

Ich frage schon ab welche wilrklich gerendert werden müßen und welche nicht, und
optiemiere schon die Schleife die dieses Array durchläuft.
Leider ist das ganze immer noch etwas larm(fps < 60).Was bekanntlich zum ruckeln führt!

Wie realiesiert man sowas ohne das die Performance nachläst.
-Erhöhe ich die Größe der Tiles?! ?(
-Lege ich einen Seperaten Thread an?(Wie schauts hier mit der Syncronisation aus)
-andere Möglichkeiten?

Vielleicht hat ja jemand sich damit schon einmal beschäftigt oder sich Gedanken dazu
gemacht!

mfg derHulk

20.04.2006 - 22:32 Uhr

Also vielen dank für deine Antwort,
hab mal Vsync ausprobiert, kann damit für meine Zwecke leider nix anfangen da
das bild sonst nicht schön aussieht!

mfg DerHulk!

18.04.2006 - 22:03 Uhr

Also habe gerade festgestellt das alle Beispiele der SDk bei Vollbild
auch nicht mehr als 60fps schaffen, nur halt bei einer Kleinen Form etc.
geht die fps hoch!

Bei meiner Implementation ändert sich da nix(bei Vollbild sowie Form um die 60fps).

?( ?( ?(

Ist es überhaubt möglich/sinnvoll eine höre fps zu fahren da der Bildschirm doch eh nur
auf einer Frequenz läuft? ?(

18.04.2006 - 21:39 Uhr

Leichter gesagt als getan,ich finde die Tutorials nicht gerade einfach,und Aussage-Kräftig, da alles in den Microsoft.Samples.DirectX.UtilityToolkit
gehandelt wird!

Laut Tutorial:


 private void UpdateFrameStats()
        {
            // Keep track of frame count
            double time = FrameworkTimer.GetAbsoluteTime();
            State.LastStatsUpdateFrames++;

            if (time - State.LastStatsUpdateTime > 1.0)
            {
                float fps = (float)(State.LastStatsUpdateFrames / (time - State.LastStatsUpdateTime));
                State.CurrentFrameRate = fps;
                State.LastStatsUpdateFrames = 0;
                State.LastStatsUpdateTime = time;

                State.FrameStats = string.Format(State.StaticFrameStats, fps.ToString("f2",
                    System.Globalization.CultureInfo.CurrentUICulture));
            }
        }

18.04.2006 - 21:14 Uhr

Hi, ne daran liegst nicht (habe es gerade mit

CreateFlags.HardwareVertexProcessing

ausprobiert mit dem selben Ergebniss)
Aber thx drotzdem!

18.04.2006 - 19:47 Uhr

Hi, Leutz habe mal wieder eine Frage(DX betreffend) in der Hoffnung das Ihr mir die evtl. baentworten könnt oder mir wenigstens ein paar Tipps offenbart:

also habe mir folgenden Frame Zähler gefunden und bei mir implementiert:


public static int CalculateFrameRate()

		{

			if (System.Environment.TickCount - lastTick >= 1000)

			{
				lastFrameRate = frameRate;
				frameRate = 0;
				lastTick = System.Environment.TickCount;
			}
			frameRate++;
			return lastFrameRate;
		}
		private static int lastTick;

		private static int lastFrameRate;

		private static int frameRate;

jetzt bekomm ich leider nur Werte mit max. 60 fps!Was ja durchaus meinen Bildwiederholungsrate meines Bildschirms entspricht. Dabei Render ich nur einen
blauen Bildschirm und die fps Anzeige.

Jedoch haben die Tutorials und Beispiel Programme von DXSDK auch einen Frame Counter und die haben so um die 500fps.

Meine frage ist jetzt,man kanns sich vielleicht schon denken, wieso bekomm ich so geringe frame Raten,meine Device initialisierung sieht Folgendermassen aus:


 PresentParameters presentParams = new PresentParameters(); 
      presentParams.Windowed=true; 
   //   presentParams.PresentationInterval = PresentInterval.Immediate;
      presentParams.SwapEffect = SwapEffect.Discard; 
      device = new Device(0, DeviceType.Hardware, this,  
      CreateFlags.SoftwareVertexProcessing, presentParams); 

Wie Ihr seht habe ich auch schon versucht(oben aus kommentiert) über

 
presentParams.PresentationInterval = PresentInterval.Immediate;

das ganze zu lösen aber selbst da bekomm ich nur 200fps!?
?( ?(
mfg derHulk

09.04.2006 - 13:08 Uhr

Muste mal in deren Forum schauen, da gibts einen Thread da erklären die wie man einen besseren Highscore bekommt!

09.04.2006 - 11:08 Uhr

Sorry ist noch früh am morgen! =)

09.04.2006 - 10:56 Uhr

Hi, Leutz habe gestern zufällig ne hübsche Seite von Microsoft entdeckt.
Dabei gehts auf der Seite um Spieleprogrammierung und deren Umsetzumg
(Konzept,Plannung,etc.). Die Jungs von MS habe da nämlich ein Open Soucre Game entwickelt und komplett mittels Video dokumentier!
Gefiel mir persönlich sehr gut, schauts euch mal an!

http://www.microsoft.com/germany/msdn/coding4fun/gamedev/tutorial/default.mspx

und hier das hier noch die Seite zum Spiel:

http://www.rocketcommander.com/Default.aspx

sollte das für euch alle schon bekannt sein,dann sry! X(

Habe die Seite halt erste gestern gefunden! =)

mfg derHulk

01.04.2006 - 20:40 Uhr

Also habs "geschaft", Problem an der Sache sind die Struckturen hier kommst drauf
an wie die Aufgebaut sind (Reihenfolge der Variablen in der Strucktur selbst auch!)

Hier zwei Möglichkeiten:

die Erste nutzt VertexFormats.Transformed,die zweite VertexFormats.Position!

Beim ersten schaff ich es nicht die Diffusewerte zu beeinflussen,Textur wird immer rot!Wenn man anstatt VertexFormats.Diffuse, VertexFormats.None nimmt
werden die Scourcefarben genommen! ?( ?( ?(

Die zweite Struct, funktioniert wunderbar nur halt das es sich um VertexFormats.Position handelt!


public struct Partikel
{
        public float X,Y,Z;
	public Int32 Color;
	public float Size;
	public static readonly VertexFormats Format = VertexFormats.Transformed| VertexFormats.Diffuse| VertexFormats.PointSize;
}
public struct Partikel
{
	public float X,Y,Z;
	public float Size;
	public Int32 Color;
	public static readonly VertexFormats Format = VertexFormats.Position | VertexFormats.PointSize| VertexFormats.Diffuse;
}


beim Zeichnen sind folgende RenderState zu beachten:


          device.RenderState.PointSpriteEnable = true;
	  device.RenderState.AlphaBlendEnable = true;
	  device.RenderState.PointSpriteEnable = true;
	  device.RenderState.PointScaleEnable = false ;
	  device.RenderState.DestinationBlend=Blend.BlendFactor;
	  device.RenderState.SourceBlend= Blend.One;
	  device.RenderState.PointSizeMin = 0.00f;
	  device.RenderState.PointScaleA = 0.00f;
	  device.RenderState.PointScaleB = 0.00f;
	  device.RenderState.PointScaleC = 1.00f;

evtl. weis einer noch warum das mit VertexFormats.Transformed und den
Diffuse werten nicht funktionierte??!

mfg derhulk

01.04.2006 - 19:37 Uhr

Hi, danke hat sich erledigt! Es ist auch möglich mit PositionColored
Punkte etc. zu zeichnen, nur ist zu beachten das die Positionsdaten mit deren
von TransformedColored nicht übereinstimmen!
So wie ich das zur Zeit verstehe handelt es sich bei PositionColored
um Positionsdaten bezogen auf die Worldview und bei
TransformedColored um Positionsdaten bezogen auf den Screen.

Wenns nicht so ist klärt mich auf! 😉

PS: Ein bisschen Code wär nicht schlecht

Sorry hatte ich vergessen!

mfg DerHulk!

31.03.2006 - 20:00 Uhr

Hi, wollte mal fragen warum man in DirectX nur mittels
CustomVertex.TransformedColored Typen Dreiecke/Punke zeichnen kann?Wenn ich
statt CustomVertex.TransformedColored - PositionColored nimmt
bekomme ich weder einen Punkt/Linie/Dreieck gezeichnet, was mit dem Type
CustomVertex.TransformedColored ohne weiteres geht?? ?( ?( ?(

mfg derHulk!

30.03.2006 - 18:45 Uhr

Hi habe mir jetzt mal mit Point Sprites (siehe Thread Partikeleffekte) beschäftigt,
leider sitze ich hier auch schon wieder mit einem Problem:

Beim zeichnen nutze ich folgende Zeilen:

initialiesierung:


public bool InitializeGraphics() 
  { 
    try 
    { 
      // Die Hardware initialisieren und ein paar Parameter setzen 
      PresentParameters presentParams = new PresentParameters(); 
      presentParams.Windowed=true; 
      presentParams.SwapEffect = SwapEffect.Discard; 
      device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams); 
			vertexBuffer = new VertexBuffer(typeof(D3DVERTEX), 6, device, 0, CustomVertex.PositionColored.Format, Pool.Default);
			vertexBuffer.Created += new System.EventHandler(this.OnCreateVertexBuffer);
			this.OnCreateVertexBuffer(vertexBuffer, null);
        //partikel
		float fPointSize = 1.0f,fPointScaleB = 1.0f;
	    uint i = 0xFF000000;
		mytexture = TextureLoader.FromFile(device,  Application.StartupPath + "\\Particle.bmp",0,0,0,Usage.None,Format.A1R5G5B5,Pool.Default,Filter.None,Filter.None,(int)i ); 
		device.SetRenderState(RenderStates.PointSpriteEnable,true);
	    device.SetRenderState(RenderStates.PointScaleEnable,false);
		device.SetRenderState(RenderStates.PointSize,fPointSize);
		device.SetRenderState(RenderStates.PointScaleB,fPointScaleB);
		device.SetRenderState(RenderStates.DestinationBlend,1);
		device.SetRenderState(RenderStates.SourceBlend,1);
		

		return true; 
    } 
    catch (DirectXException) 
    { 
      return false; 
    } 
  }


Füllung meines vbBuffers:


 public void OnCreateVertexBuffer(object sender, EventArgs e)
  {
		VertexBuffer vertexBuffer = (VertexBuffer)sender;
		GraphicsStream stm = vertexBuffer.Lock(0, 0, 0);
		//CustomVertex.TransformedColored[] verts = new CustomVertex.TransformedColored[6];
	    D3DVERTEX[] verts = (D3DVERTEX[]) vertexBuffer.Lock(0, typeof(D3DVERTEX), LockFlags.None, 6);

		verts[0].X = 50;
		verts[0].Y = 50;
		verts[0].Z = 0.5f;
		verts[0].fSize = 1;
		verts[0].Color = System.Drawing.Color.Red.ToArgb();
		verts[1].X = 150;
		verts[1].Y = 50;
		verts[1].Z = 0.5f;
		verts[1].fSize = 1;
		verts[1].Color = System.Drawing.Color.Blue.ToArgb();
		verts[2].X = 50;
		verts[2].Y = 250;
		verts[2].Z = 0.5f;
		verts[2].fSize = 1;
		verts[2].Color = System.Drawing.Color.Red.ToArgb();
		verts[3].X = 250;
		verts[3].Y = 50;
		verts[3].Z = 0.5f;
		verts[3].fSize = 1;
		verts[3].Color = System.Drawing.Color.Red.ToArgb();
		verts[4].X = 250;
		verts[4].Y = 250;
		verts[4].Z = 0.5f;
		verts[4].fSize = 1;
		verts[4].Color = System.Drawing.Color.Red.ToArgb();
		verts[5].X = 50;
		verts[5].Y = 150;
		verts[5].Z = 0.5f;
		verts[5].fSize = 1;
		verts[5].Color = System.Drawing.Color.Blue.ToArgb();
		stm.Write(verts);
		vertexBuffer.Unlock();
  } 

meine Zeichen Methode:


private void Render() 
  { 
    if (device == null) 
      return; 

    // Backbuffer löschen und gleichzeitig die Zeichenfläche einfärben 
    device.Clear(ClearFlags.Target, System.Drawing.Color.Black, 1.0f, 0); 
    // Anfang der Szene 
    device.BeginScene(); 

	    device.SetTexture(0,mytexture);
		device.SetStreamSource( 0, vertexBuffer, 0);
		device.VertexFormat = CustomVertex.TransformedColored.Format;
		device.DrawPrimitives(PrimitiveType.PointList, 0, 6);
	 
	  //'

    // Ende der Szene 
	  device.EndScene(); 
    device.Present(); 
  } 



Wenn ich in der Zeile


device.VertexFormat = CustomVertex.TransformedColored.Format;

keine VertexFormat angebe bekomm ich einen Fehler:"Microsoft.DirectX.Direct3D.InvalidCallException' ist in microsoft.directx.direct3d.dll aufgetreten."

Wenn ich VertexFormat.CustomVertex.TransformedColored.Format;
angebe zeichnet er mir die Punkte(ohne Textur)
Wenn ich VertexFormat.CustomVertex.TransformedColored.XXX;
angebe zeichnet er mir nix!

Eigendlich soll er mir die Textur an den gewünschen Vertex zeichnen!

die Strucktur die ich verwende:


struct D3DVERTEX
{
	public	float	X,
		Y,
		Z,
		fSize;
	public int Color;
	public static  VertexFormats FVF = VertexFormats.Position |VertexFormats.Diffuse ;
}

evtl. einer ne Ahnung was ich da falsch mache?

mfg und thx DerHulk

29.03.2006 - 23:40 Uhr

Danke erstmal 👍 , hört sich ja wirklich nicht so schwer an!
Dachte das gerade das erstellen von Partikel und deren steuerung eine Aufwendige Sache währe!

mfg derHulk

29.03.2006 - 22:35 Uhr

Hi, Leutz hat jemand von euch sich schon mit Partikeleffekten(in DX) beschäfftigt?
Denke mal das das so ziemlich die Königsklasse an Grafischerdarstellung ist
und enorm aufwendig ist! Habe zur zeit noch keine ahnung wie man das Thema angeht evtl. kennt jemand ein paar gute Sites/Tutorials?

wie immer mfg DerHulk!

28.03.2006 - 20:55 Uhr

Ok, habs lag an der Version von der Runtime! 😉

28.03.2006 - 20:25 Uhr

Also ich habe die Dlls im Reales Ordner und geb diese auch im Setup Programm mit!
Muss man diese speziel zuweisen?(dem System bekannt machen oder Rigister anders setzen?)

Bin gerade mal die neuste Version von der DX Runtime am saugen, DX 9 war auf
den Rechner wo ich das installieren will drauf.Aber evtl. unterscheiden sich die Versionen (Entwicklungs SDK und Runtime)!

mfg DerHulk

28.03.2006 - 20:02 Uhr

Hi, weiss jemand wie man ein "fertiges" Programm was DLLs der
DX SDK nutz an andere weiter geben kann ohne das man jedesmal die SDK installieren muss? ?(

Ich bekomm immer ne File not Found Ex???
(denke mal es handelt sich um ne DX Dll ?!)

mfg derHulk

28.03.2006 - 16:14 Uhr

Hi,also ich rate dir entweder mit DX oder OpenGl zu machen,meiner Meinung nach ist
GDI+ da relative unbrauchbar (da es viel zu langsamm ist und es dauernt flackert).Wenn du nur die Physik testen willst oder nur erstmal ausprobieren
und dich die Grafik weniger intressiert dann kannst auch GDI+ nehmen,ist halt die frage was du machen willst und wie lang du dich damit beschäftigen willst.

Was du am besten lesen solltest sind die DX Tutorials hier im Forum!
([Artikel] Managed Direct3D Tutorial)

Zur Physik, kann ich nix sagen (bin selbst auch noch nicht soweit),ist halt "nur" Mathe! 😁

Wenn du DX machst haste die möglichkeit dich zwischen DDraw und Direct3d
zu entscheiden!

Ansonsten kannst ja mal bei Folgende Sites dir anschauen:

http://www.codeworx.org/directx_tuts.php
http://www.robsite.de/links.php?link=3dmodelle
http://www.codeproject.com
http://www.thezbuffer.com/categories/games.aspx
http://www.geometrictools.com/Intersection.html
http://www.mdxinfo.com/tutorials.php
(hoffe das die ein oder andre adresse dir helfen kann!)

mfg
derHulk

20.03.2006 - 22:01 Uhr

Hi, leutz... =)
bin am überlegen von .net 1.1 auf 2.0 umzusatteln, ich Entwickel aber zur Zeit viel mit
der DirectX SDK wie schauts da mit der Kompatibilität (irgendwelche Erfahrungen??).
Und dann würde mich noch Intressieren ob man das Framework 2.0 neben dem 1.1 installieren kann und "einfach"(meine nächste Frage währe wie dies geht) dem JITCompiler sagt nimm das 2.0 oder 1.1?!!

mfg derHulk!

19.03.2006 - 14:24 Uhr

Also, ich habe die Lösung 😁 mit der man die Spieglung hinbekommt!


                        int w =width;//breite des Sprites
			int h = hight;//Höhe des Sprites

			Matrix transformation =
			Matrix.Translation(-w/2, -h/2 ,1)
			* Matrix.Scaling(-1,1,0)//Mittel negativen Skaling kann man Spiegeln		
			*  Matrix.Translation(+w/2, +h/2,1);
			 mySprite.Transform = transformation;

Wenn man das Skaling mit -1 macht dann kann man das Sprite um alle Achsen Spiegeln!

MFg der Hulk!