Autor Beitrag
Florian H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 52

Win XP
D6 Pro
BeitragVerfasst: Mi 30.07.03 20:49 
Hallo,

ich habe ein Problem mit directX8 (nicht DelphiX o.Ä., ganz normales DX 8.1 ab).
Und zwar habe ich einfach mal nach dem Tutorial von SelfDXD gearbeitet und bin damit auch ganz gut vorangekommen (habe vorher schon ein anderes Tutorial durchgemacht, bin aber ebenfalls am Licht gescheitert; außerdem hab ich mich vorher mit OpenGL beschäftigt), bis ich dann zum Licht kam...
Da gibts jetzt so komische Probleme:
:arrow: das Licht lässt sich farblich nicht richtig verändern
:arrow: das Licht ändert seine Farbe, je nachdem ob

  • der Cursor im Fenster ist
  • der Cursor außerhalb des Fensters ist
  • die linke Maustaste geklickt ist


Komisch, oder?

Und jetzt hab ich gerade Screenshots von dem ganzen machen wollen,ändere noch was (was ich davor schon viele male getan habe) und was ist?
Das Licht ist weiß, und die Farbe lässt sich gar nicht mehr ändern....

Jetzt drängt sich mit natürlich je denn mehr die Frage auf, ob irgendwas mit meinem DX nicht stimmt...
Andere User konnten das leider noch nicht testen da bei allen das Device nicht initialisiert werden konnte :?

Ich habe übrigens DirectX9 installiert!

Ich hoffe mir kann endlich einer Helfen...


Viele Grüße
DK

Hier die Renderroutine, es könnte ja was drinne sein ;) (Das Objekt was da gezeichnet wird ist eine Kugel aus einer .X-Datei mit Textur):
-------------------------------------------------
ausblenden volle Höhe Delphi-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:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
procedure TForm1.Render;
var
  i, j: integer;
  WorldMatrix, TempMatrix: TD3DMatrix;
  myLight: TD3DLIGHT8;
  myMaterial : TD3DMaterial8;
begin
  Inc(Frames);

  d3dDev8.Clear(0nil, D3DClear_Target or D3DClear_ZBuffer,
    D3DCOLOR_XRGB(000), 20);

  d3dDev8.BeginScene;


  myLight._Type := D3DLIGHT_POINT;


  myLight.Diffuse.r := 1;
  myLight.Diffuse.g := 0;
  myLight.Diffuse.b := 1;

  myLight.Specular.r := 0;
  myLight.Specular.g := 0;
  myLight.Specular.b := 1;

 // myLight.Ambient.r := 1;
  //myLight.Ambient.g := 0;
 // myLight.Ambient.b := 0;


  myLight.Position.x := 0;
  myLight.Position.y := 0;
  myLight.Position.z := 0.5;

  myLight.Range := 0.7;
  myLight.Falloff := 0;
  d3dDev8.SetLight(1,myLight);
  d3dDev8.LightEnable(1,True) ;


  myMAterial.Emissive.r := 0.0;
  myMAterial.Emissive.g := 0.0;
  myMAterial.Emissive.b := 0.0;
  d3dDev8.SetMaterial(myMAterial);


  D3DXMatrixScaling(WorldMatrix, 0.010.010.01);
  D3DXMatrixRotationYawPitchRoll(TempMatrix, frames / 1800,frames / 450,frames / 1000);
  D3DXMatrixMultiply(WorldMatrix, WorldMatrix, TempMatrix);
  D3DDev8.SetTransform(D3DTS_WORLD, WorldMatrix);

  for j := 0 to length(objects) - 1 do
  begin
    d3dDev8.SetTexture(0, objects[i].texture);
    if Objects[j].Draw then
    begin
      for i := 0 to objects[j].materialNumber do
      begin
        objects[j].mesh.DrawSubset(i);
      end;
    end;
  end;

  d3dDev8.EndScene;

  d3dDev8.Present(nilnil0nil);
end;


Moderiert von user profile iconUGrohne: Code- durch Delphi-Tags ersetzt
Marlno
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 75



BeitragVerfasst: Sa 02.08.03 01:39 
also eigentlich ja so (siehe unten)
aber im vergleich zu deinem kan ich kaum zusammenhänge erkennen
schau doch mal......


Zitat:
Einstellen der Lichteigenschaften
In DirectXGraphics können Sie mehrere Lichtquellen einstellen. Die genaue Anzahl ist von ihrer Grafikkarte abhängig und lässt sich über die D3DCAPS8 ermitteln. Das Einstellen des Lichtes erfolgt mit folgender Funktion des Direct3DDevices:


function SetLight(const Index : LongWord;
var pLight : TD3DLight8) : HResult;


Index: Jeder Lichtquelle, die Sie definieren, weisen Sie eine Indexzahl zu. Möchten Sie ein bestimmtes Licht ändern oder herausnehmen, können Sie dieses über den Index ansprechen.

pLight: Ein Record des Typs D3DLIGHT8, in dem alle notwendigen Farben und Parameter definiert sind.

Zu jeder Set-Funktion gibt es das entsprechende Gegenstück, die Get-Funktion:


function GetLight(const Index : LongWord;
out pLight : TD3DLight8) : HResult;


GetLight liefert für den angegebenen Index ein Record des Typs D3DLIGHT8 mit den entsprechenden Eigenschaften zurück.

Als kleines Beispiel will ich Ihnen eine Prozedur zeigen, die uns das Eingeben der Parameter für ein Spotlight erleichtert.


procedure SetSpotLight( _dr, _dg, _db,
_ar, _ag, _ab,
_sr, _sg, _sb,
_at0, _at1, _at2: Single;
_pos, _Dir: TD3DXVector3;
_theta, _phi, _falloff,
_range: single;
_index: cardinal);
var
light : TD3DLIGHT8;
begin
ZeroMemory( @light, Sizeof( TD3DLIGHT8 ) );

with light do
begin
_Type := D3DLIGHT_SPOT;
Diffuse.r := _dr;
Diffuse.g := _dg;
Diffuse.b := _db;
Ambient.r := _ar;
Ambient.g := _ag;
Ambient.b := _ab;
Specular.r := _sr;
Specular.g := _sg;
Specular.b := _sb;

attenuation0 := _at0;
attenuation1 := _at1;
attenuation2 := _at2;

position := _pos;
direction := _dir;
theta := _theta;
phi := _phi;
falloff := _falloff;
range := _range;
end;

d3ddev8.SetLight( _index, light );
end;



Einmal eingebunden in Ihrer Anwendung ist das Definieren von Spotlights sehr einfach, weil Sie lediglich eine Prozedur mit allen Parametern aufrufen, die nötig sind. Das spart Zeit und Platz. Der Übung halber habe ich die Prozeduren für ein Point Light und ein Directional Light weggelassen. Aber mit dieser Hilfe dürfte das für Sie jetzt kein Problem sein.

Ambientes Licht setzen Sie mit einem RenderState des Direct3DDevices:


d3ddev8.setrenderstate( D3DRS_AMBIENT, $006B6B6B );


Hierbei geben Sie das ambiente Licht als 32-Bit-Wert an. Schwarz ist dabei gleichbedeutend mit keinem ambienten Licht.



viel glück
Florian H Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 52

Win XP
D6 Pro
BeitragVerfasst: Sa 02.08.03 09:42 
Hallo,

ja, diesen Teil kenne ich aus dem SelfDXD-turorial, er hilft mir leider nicht weiter, da er ja das selbe macht wie ich auch, nur eben in eine Prozedur verpackt...
Wenn ich es mit so einer Prozedur aus dem SelfDXD probiere, passiert nix anderes!

danke dir trotzdem für deine Hilfe (ist bei so einem Thema ja selten) :wink:
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Sa 02.08.03 10:25 
warum fragst du Marty (der author) nicht direkt in seinem forum?

_________________
mfg.
mâximôv
Florian H Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 52

Win XP
D6 Pro
BeitragVerfasst: Sa 02.08.03 10:36 
Hm, hab ich noch gar nicht gewusst dass da eines ist...

Aber ich glaube eher dass das an meinem System oder so liegt, denn wieso sonst bekommt jeder einen Engine-Fehler ausser ich ?

Aber ich frag ihn mal
Florian H Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 52

Win XP
D6 Pro
BeitragVerfasst: Sa 02.08.03 11:18 
Hm, wenn ich das Projekt aus der Delphi-IDE raus starte, hat es eine Textur, wenn ich die EXE im Explorer starte, nicht!
Phobeus
ontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1280

Linux (FC6), WinXP Pro (Box)
D6 Pers, D7 Pro, FPC 2.x
BeitragVerfasst: Sa 02.08.03 11:55 
In den letzten Tagen ist Marty mit seinem Forum wech von meinem Webspace gezogen von daher kann es vieleicht die eine oder andere Stöhung gegeben haben. Ansonsten für DirectX-Fragen bietet sich sehr [url]www.neobrothers.de[/url] an, ist auch eines von Marty-Stammforen.

@textur: Schreit förmlich nach einem Pfad-Fehler. Lege mal ne Ordner á la "gfx" an kopiere die Texturen dort rein und lade sie im Programm mit ".\gfx\something". Befindet sich die EXE dann darunter sollte er es ohne Probleme laden. Alternativ verwende den paramstr(0) um die Position der Exe zu ermitteln.

_________________
"Menschen sterben nicht wenn man sie zu Grabe trägt, sondern wenn sie ihre Träume verlieren..."
Florian H Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 52

Win XP
D6 Pro
BeitragVerfasst: Sa 02.08.03 12:18 
habe ich (ExtractFilePAth(PAramStr(0))+'Media\texturname.bmp')!

Und wenn ich die Textur lösche, kommt in beiden Fällen eine Fehlermeldung, denn ich frage im Programm ab, ob alles funktioniert hat....daran liegts also nicht!
Marlno
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 75



BeitragVerfasst: Sa 02.08.03 14:03 
hmm schon ok wenn meins nicht geholfen hat...

vielleicht mal DX neuinstallieren
oder welche version hast du?


ansonsten siehts so aus als ob du irgend nen fehler im system hast...

Marlno
Florian H Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 52

Win XP
D6 Pro
BeitragVerfasst: Sa 02.08.03 14:08 
Hab DirectX9b (oder was das aktuelle ist) drauf, spiele laufen einwandfrei!

gibts irgendwo noch die alten DLLs und Units für 8.1 (nicht 8.1ab)!?
Marlno
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 75



BeitragVerfasst: Sa 02.08.03 14:20 
hatte 9b nicht auf manchen system zusammenstellungen bugs???

ja spielen laufen komischer weise immer..... naja sind .......

welche alten dlls ??? units???
du meinst das alte sdk?? ja sicher lich weiß zwar nicht wo aber im netz mal schauen dann findet man was.....
zudem ist es nicht immer erforderlich das sdk

gut bei delphi glaub ich schon *lol*

such mal bei google... hätte ich ja für dich machen können muss aber jetzt weg....
sorry

MFG
Marlno
Marlno
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 75



BeitragVerfasst: Sa 02.08.03 14:35 
muss jetzt bye

aber schau mal hier hier sind alle sdk (links auf download klicken)

dx 8 ist ganz unten und in der mitte sind zusätze extras für dx 9 textur zusatz und und und

schau mal rauf

msdn.microsoft.com/directx/

bye
MFG
Marlno