#26 01.02.2005 16:32:28

Coolcat
ProGuru
Ort: Aachen, NRW
Registriert: 24.01.2005
Beiträge: 2780
Web-Seite

Re: Eine Handvoll AnfängerFragen

@firlefanz:
zuerst Skalieren und/oder Rotieren, und zuletzt verschieben.

Code:

D3DXMatrixMultiply(matTmp, matScale, matRotation);
D3DXMatrixMultiply(matTmp, matTmp, matVerschieb);
 xenscreen.Device.SetTransform(D3DTS_WORLD,mattmp); 



@artzuk: kA....man könnte das einfach mal ausprobieren, aber leider hab ich keine Zeit für solche Dinge...  sad

Coolcat


My software never has bugs. It just develops random features.

Offline

 

#27 02.02.2005 11:25:40

firlefanz
GodlikeMember
Ort: Olpe in NRW
Registriert: 31.01.2005
Beiträge: 1035
Web-Seite

Re: Eine Handvoll AnfängerFragen

Hallo,

das mit dem Sklaieren hat jetzt super geklappt, vielen Dank!
Das mit dem einen Objekt (Sphere) hat auch super geklappt, nochmal danke!  big_smile

Nur mein Raumschiff ist immer noch aus Plastik und nicht aus Metall.

http://www.ericbehme.de/bilder/Clip0004.jpg
http://www.ericbehme.de/bilder/Clip0005.jpg

Da glänzt nix. Habe mit diversen Werten an Licht und Raumschiff rumgespielt, habe Specular eingestellt etc, aber hilft alles nicht.

Mein Code, laden Raumschiff:

Code:

function TCommandoForm.load_raumschiff: boolean;
var _pAdjacency, _pD3DXMtrlBuffer : ID3DXBuffer;
    _d3dxMaterials : PD3DXMaterial;
    _i : longint;
    i: integer;
begin
  raumschiff.nweite:=0;
  Result := false;
  _pAdjacency := NIL;
  _pD3DXMtrlBuffer := NIL;
  D3DXMatrixTranslation(raumschiff.matRot,0,0,0);
  if failed(D3DXLoadMeshFromX(pChar(raumschiff.sMeshFileName), D3DXMESH_SYSTEMMEM,
                              xenScreen.Device, @_pAdjacency, @_pD3DXMtrlBuffer,
                              @raumschiff.NumMaterials, raumschiff.g_pMesh)) then exit;
  _pAdjacency := NIL;
  if raumschiff.NumMaterials = 0 then exit;

  _d3dxMaterials := _pD3DXMtrlBuffer.GetBufferPointer;
  try
    SetLength(raumschiff.g_pMeshMaterials, raumschiff.NumMaterials);
    SetLength(raumschiff.g_pMeshTextures, raumschiff.NumMaterials);
  except
    exit;
  end;
  for _i := 0 to raumschiff.NumMaterials - 1 do
  begin
    raumschiff.g_pMeshMaterials[_i] := _d3dxMaterials^.MatD3D;
    if _i=0 then begin
      raumschiff.g_pMeshMaterials[_i].Emissive.r:=0;
      raumschiff.g_pMeshMaterials[_i].Emissive.g:=0;
      raumschiff.g_pMeshMaterials[_i].Emissive.b:=0;
      raumschiff.g_pMeshMaterials[_i].Ambient.r:=0.5;
      raumschiff.g_pMeshMaterials[_i].ambient.g:=0.5;
      raumschiff.g_pMeshMaterials[_i].ambient.b:=0.5;
      raumschiff.g_pMeshMaterials[_i].diffuse.r:=0;
      raumschiff.g_pMeshMaterials[_i].diffuse.g:=0;
      raumschiff.g_pMeshMaterials[_i].diffuse.b:=0;
      raumschiff.g_pMeshMaterials[_i].specular.r:=0.8;
      raumschiff.g_pMeshMaterials[_i].specular.g:=0.8;
      raumschiff.g_pMeshMaterials[_i].specular.b:=0.8;
//      raumschiff.g_pMeshMaterials[_i].power:=50;
    end else begin
      raumschiff.g_pMeshMaterials[_i].Emissive.r:=0.2;
      raumschiff.g_pMeshMaterials[_i].Emissive.g:=0.2;
      raumschiff.g_pMeshMaterials[_i].Emissive.b:=1;
      raumschiff.g_pMeshMaterials[_i].Ambient.r:=0.2;
      raumschiff.g_pMeshMaterials[_i].ambient.g:=0.2;
      raumschiff.g_pMeshMaterials[_i].ambient.b:=1;
      raumschiff.g_pMeshMaterials[_i].diffuse.r:=0.2;
      raumschiff.g_pMeshMaterials[_i].diffuse.g:=0.2;
      raumschiff.g_pMeshMaterials[_i].diffuse.b:=1;
      raumschiff.g_pMeshMaterials[_i].specular.r:=0.2;
      raumschiff.g_pMeshMaterials[_i].specular.g:=0.2;
      raumschiff.g_pMeshMaterials[_i].specular.b:=1;
    end;    
    raumschiff.g_pMeshTextures[_i]:= NIL;
    if (_d3dxMaterials^.pTextureFilename = NIL) or
       (failed(D3DXCreateTextureFromFile(xenScreen.Device,
               _d3dxMaterials^.pTextureFilename,
               raumschiff.g_pMeshTextures[_i])))
      then raumschiff.g_pMeshTextures[_i] := NIL;
    inc(_d3dxMaterials);
  end;
  _pD3DXMtrlBuffer := NIL;
end;



Mein Code, darstellen Raumschiff:

Code:

    setrenderstate(d3drs_alphablendenable,dword(false));
    if nresttimer>300 then begin //Raumschiff
      setrenderstate(d3drs_specularenable,dword(true));
      for _i := 0 to raumschiff.NumMaterials - 1 do begin
        SetMaterial(raumschiff.g_pMeshMaterials[_i]);
        SetTexture(0,raumschiff.g_pMeshTextures[_i]);
        SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
        //SetTextureStageState(0,D3DTSS_COLORARG2,D3DTA_DIFFUSE);
        SetTextureStageState(0,D3DTSS_COLORARG2,D3DTA_specular);
        SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_MODULATE2x);
        x:=cos((planet3d[nchosenplanet].nweite-raumschiff.nweite/50)/planet3d[nchosenplanet].nRotSpeed)*(planet3d[nchosenplanet].nrotx+14);
        z:=sin((planet3d[nchosenplanet].nweite-raumschiff.nweite/50)/planet3d[nchosenplanet].nRotSpeed)*(planet3d[nchosenplanet].nrotx+14);
        y:=30-nchosenplanet*2;
        D3DXMatrixTranslation(raumschiff.matxyz,x,y,z);
        D3DXMatrixRotationY(raumschiff.matrot,nresttimer/430);
        D3DXMatrixMultiply(matTmp, raumschiff.matrot, raumschiff.matxyz);
        xenscreen.Device.SetTransform(D3DTS_WORLD,mattmp);
        raumschiff.g_pMesh.DrawSubset(_i);
        if raumschiff.nweite<800 then inc&#40;raumschiff.nweite&#41;;
      end;
      xenscreen.Device.setrenderstate&#40;d3drs_specularenable,dword&#40;false&#41;&#41;;
    end;
  end;



Mein Code für die Beleuchtung:

Code:

  with camlight do
  begin
    ZeroMemory&#40;@camlight,sizeof&#40;camlight&#41;&#41;;
    _Type &#58;= D3DLIGHT_directional;
    //_Type &#58;= D3DLIGHT_spot;
    Diffuse.r &#58;= 0;
    Diffuse.g &#58;= 0;
    Diffuse.b &#58;= 0;
    Ambient.r&#58;=0.5;
    Ambient.g&#58;=0.5;
    Ambient.b&#58;=0.5;
    Specular.r&#58;=0.8;
    Specular.g&#58;=0.8;
    Specular.b&#58;=0.8;
    Specular.a&#58;=1;
    D3DXVec3Normalize&#40;Direction, D3DXVector3&#40;ncurrcamx2,ncurrcamy2,ncurrcamz2&#41;&#41;;
    camlight.Position&#58;=D3DXVector3&#40;ncurrcamx1,ncurrcamy1,ncurrcamz1&#41;;
    camlight.Direction&#58;=D3DXVector3&#40;ncurrcamx2,ncurrcamy2,ncurrcamz2&#41;;
    Falloff&#58;=1;
    Range&#58;=150;
    attenuation0&#58;=0.3;
    attenuation1&#58;=0.3;
    attenuation2&#58;=0.3;
    xenscreen.Device.SetLight&#40;1, camlight&#41;;
    xenscreen.Device.LightEnable&#40;1, true&#41;;
    xenscreen.Device.SetRenderState&#40;D3DRS_LIGHTING, dword&#40;true&#41;&#41;;
    xenscreen.Device.SetRenderState&#40;D3DRS_SPECULARMATERIALSOURCE,D3DColor_XRGB&#40;32,32,32&#41;&#41;;



Sieht da jemand den Fehler? Oder muss da eine Textur drauf?
Man sieht ja Schatten etc, da kommt Licht an, aber es reflektiert nix und sieht nicht wie Metall aus.

Gruß
firle

Offline

 

#28 02.02.2005 12:18:58

Holly
Member
Ort: Leipzig
Registriert: 24.01.2005
Beiträge: 76
Web-Seite

Re: Eine Handvoll AnfängerFragen

ähm.....frage: warum gibst du deinem material und dem licht denn diffuse := 0,0,0 ????  :? das diffuse licht ist doch nun wirklich das wichtigste  :mrgreen:


HOLLY


Enjoy the 3 dimensions of livin'....

Offline

 

#29 02.02.2005 12:40:43

firlefanz
GodlikeMember
Ort: Olpe in NRW
Registriert: 31.01.2005
Beiträge: 1035
Web-Seite

Re: Eine Handvoll AnfängerFragen

Das war rumspielerei. Dann ist es etwas heller, funzt aber auch nicht. Ich hatte es extra dunkler gemacht, ich dachte, dann sehe ich nur die Reflektion, aber Pustekuchen. Daran liegt es leider nicht.

Muss ich vielleicht mehrere Lichter draufschmeissen, um es wie Metall aussehen zu lassen oder eine Textur?
Muss aber doch auch nur mit Material gehen.

Firle

Offline

 

#30 02.02.2005 12:46:55

artzuk
GodlikeMember
Ort: Leipzig
Registriert: 24.01.2005
Beiträge: 1164

Re: Eine Handvoll AnfängerFragen

Die Lichtwerte sind etwas komisch ...

Ich hab mal das BaseSample vom EffectEdit etwas umgeschrieben, damit es ähnlich wie Metall aussieht.

hier der entscheidende Schnipsel

Code:

// Set up reasonable material defaults
MaterialAmbient  = &#123;0.1, 0.1, 0.1, 1.0&#125;; 
MaterialDiffuse  = &#123;0.8, 0.8, 0.8, 1.0&#125;; 
MaterialSpecular = &#123;1.0, 1.0, 1.0, 1.0&#125;; 
MaterialPower = 40.0f;
        
// Set up one directional light
LightType&#91;0&#93;      = DIRECTIONAL;
LightAmbient&#91;0&#93;   = &#123;1.0, 1.0, 1.0, 1.0&#125;;
LightDiffuse&#91;0&#93;   = &#123;1.0, 1.0, 1.0, 1.0&#125;;
LightSpecular&#91;0&#93;  = &#123;1.5, 1.5, 1.5, 1.0&#125;; 
LightDirection&#91;0&#93; = <lightDir>; // Use the vector parameter defined above
LightRange&#91;0&#93;     = 1000.0;
        
// Turn lighting on and use light 0
LightEnable&#91;0&#93; = True;
Lighting       = True;
SpecularEnable = True;



wenn das auch nicht gut aussieht, muss du ein simples SphereMapping einsetzen.


Mein kleiner .NET Blog: http://artzuk-interactive.de/

Offline

 

#31 02.02.2005 14:27:22

firlefanz
GodlikeMember
Ort: Olpe in NRW
Registriert: 31.01.2005
Beiträge: 1035
Web-Seite

Re: Eine Handvoll AnfängerFragen

Hi Artzuk,

danke für den Tip, werde das mal probieren.
Habe allerdings schon viel rumgespielt an den Werten und richtig glänzen tut es irgendwie nicht.

Liegt das evtl. an dem Directional Licht?
Und LightDir soll dann auf das Raumschiff 'strahlen'?

Hat den jemand schonmal ein metallisches reflektierendes Modell eingebaut? Wie habt ihr das denn gemacht?

Falls es immer noch nicht klappt, frage ich nochmal wegen dem SphereMapping nach  :thx2:

Firle

Offline

 

#32 03.02.2005 07:24:22

firlefanz
GodlikeMember
Ort: Olpe in NRW
Registriert: 31.01.2005
Beiträge: 1035
Web-Seite

Re: Eine Handvoll AnfängerFragen

Hallo zusammen,

@Artzuk: Das klappt schon ganz gut mit dem 'glänzenden' Rendering, nicht ganz genau, wie ich es gerne hätte, aber viel besser mit deinen Werten. Lass ich erstmal so. Im Moment keine weiteren Fragen!  wink

Firle

Offline

 

#33 03.02.2005 09:59:50

Coolcat
ProGuru
Ort: Aachen, NRW
Registriert: 24.01.2005
Beiträge: 2780
Web-Seite

Re: Eine Handvoll AnfängerFragen

Zitat:

Im Moment keine weiteren Fragen!

Das gibt ja gar nicht.... wink


My software never has bugs. It just develops random features.

Offline

 

#34 03.02.2005 10:03:23

firlefanz
GodlikeMember
Ort: Olpe in NRW
Registriert: 31.01.2005
Beiträge: 1035
Web-Seite

Re: Eine Handvoll AnfängerFragen

Doch, aber nur vorläufig. Ich brauch erstmal ein paar Tage, um das alles zu verarbeiten, habe viel umgebaut und muss erstmal bugs fixen  big_smile

Firle

Offline

 

Brett Fußzeile

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson