AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

3D Objekte steuern

Ein Thema von Wolverine · begonnen am 14. Dez 2003 · letzter Beitrag vom 17. Dez 2003
Antwort Antwort
Wolverine

Registriert seit: 30. Mai 2003
Ort: Düsseldorf (NRW)
109 Beiträge
 
Delphi 7 Enterprise
 
#1

3D Objekte steuern

  Alt 14. Dez 2003, 15:14
Hi all,
kann sein das das Thema schon mal angesprochen wurde, ich hab aber per Suchfunktion nix gefunden, was mein Problem lösen würde.
Ich habe ein 3D Objekt mit 3D Studio Max erstellt und als 3ds Datei exportiert und in meinen Quellcde eingebunden.
Zu sehen ist das ganz was mich schon mal freut ( vor allem in 3D ^^).
Jetzt wollte ich dieses 3D Objekt über die Pfeiltasten (oder überhaupt per Tastatur) steuern.
Ein Bsp.: Wenn ich VK_UP drücke soll sich das 3D Objekt nach oben bewegen und wenn ich VK_LEFT drücke soll es sich nach links bewegen etc.
Nun würde ich gerne von euch wissen ob mir jemand weiterhelfen kann.
Das das ganze in eine if-Schleife muss ist mir klar, nur schon mal vorweg, und das man mit Koordinaten arbeiten muss auch 8)
Aber wie übertrage ich das ganze nun auf das 3D Objekt???
Guido L.
The nice thing about Windows is - It does not just crash, it displays a dialog box and lets you press 'OK' first.
Guten Rutsch und Start ins neue Jahr 2005
  Mit Zitat antworten Zitat
ATwardz

Registriert seit: 12. Mai 2003
205 Beiträge
 
Delphi 7 Professional
 
#2

Re: 3D Objekte steuern

  Alt 14. Dez 2003, 18:45
Hi,

womit arbeitest du eigentlich? opengl direct 3D?
Ich weiss zwar nit wie du das Objekt eingebunden hast, aber zum bewegen musst du einfach nur in die Onkeydown Methode die Kooridinaten x,y,z entsprechend verändern!

Bsp: OpenGL

glrotate(rotation,x,y,z); //Drehung

um die Z-Achse

glrotate(rotation,0,0,1); //Drehung mit der Geschwindigkeit 1 um Z

Hoffe das es das ist was du suchst!

@wardz
  Mit Zitat antworten Zitat
Plague

Registriert seit: 6. Okt 2003
591 Beiträge
 
#3

Re: 3D Objekte steuern

  Alt 14. Dez 2003, 19:46
Hallo,

ich finde das Thema, dass Du da angesprochen hast sehr interessant. Was willst Du da genau programmieren? Hast Du schon einen Screenshot, den Du mal hier im Forum zeigen könntest???

MfG
Plague1
  Mit Zitat antworten Zitat
Wolverine

Registriert seit: 30. Mai 2003
Ort: Düsseldorf (NRW)
109 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: 3D Objekte steuern

  Alt 14. Dez 2003, 21:15
Hi,
nein ATwardz, das ist leider nicht das was ich suche.
Ich poste mal den Quellcode, damit du weisst wie ich es eingebunden habe:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, opengl,
  ExtCtrls, gl3ds;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
   myDC : HDC;
   myRC : HGLRC;
   myPalette : HPALETTE;
   procedure SetupPixelFormat;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  model: TAll3dsMesh;

implementation

{$R *.DFM}
procedure TForm1.SetupPixelFormat;
var hHeap: THandle;
  nColors, i: Integer; //Anzahl der Farben
  lpPalette : PLogPalette; //Die Farbpalette
  byRedMask, byGreenMask, byBlueMask: Byte; //Blau, Grün und Rot
  nPixelFormat: Integer;
  pfd: TPixelFormatDescriptor; //Dies ist der "Descriptor"..in ihm werden die Infos
                                            //zwischengespeichert
begin
  FillChar(pfd, SizeOf(pfd), 0);
  with pfd do begin //wir wollen das Format bearbeiten
    nSize := sizeof(pfd); // Länge der pfd-Struktur
    nVersion := 1; // Version
    dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or
                 PFD_DOUBLEBUFFER; // Flags
    iPixelType:= PFD_TYPE_RGBA; // RGBA Pixel Type
    cColorBits:= 24; // 24-bit color
    cDepthBits:= 32; // 32-bit depth buffer
    iLayerType:= PFD_MAIN_PLANE; // Layer Type
  end;
  nPixelFormat:= ChoosePixelFormat(myDC, @pfd);
  SetPixelFormat(myDC, nPixelFormat, @pfd);
                                            // Farbpalettenoptimierung wenn erforderlich
  DescribePixelFormat(myDC, nPixelFormat,
                      sizeof(TPixelFormatDescriptor),pfd);
  if ((pfd.dwFlags and PFD_NEED_PALETTE) <> 0) then begin
    nColors := 1 shl pfd.cColorBits;
    hHeap := GetProcessHeap;
    lpPalette:= HeapAlloc
       (hHeap,0,sizeof(TLogPalette)+(nColors*sizeof(TPaletteEntry)));
    lpPalette^.palVersion := $300;
    lpPalette^.palNumEntries := nColors;
    byRedMask := (1 shl pfd.cRedBits) - 1;
    byGreenMask:= (1 shl pfd.cGreenBits) - 1;
    byBlueMask := (1 shl pfd.cBlueBits) - 1;
    for i := 0 to nColors - 1 do begin
      lpPalette^.palPalEntry[i].peRed :=
        (((i shr pfd.cRedShift) and byRedMask) *255)DIV byRedMask;
      lpPalette^.palPalEntry[i].peGreen:=
        (((i shr pfd.cGreenShift)and byGreenMask)*255)DIV byGreenMask;
      lpPalette^.palPalEntry[i].peBlue :=
        (((i shr pfd.cBlueShift) and byBlueMask) *255)DIV byBlueMask;
      lpPalette^.palPalEntry[i].peFlags:= 0;
    end;
    myPalette:= CreatePalette(lpPalette^);
    HeapFree(hHeap, 0, lpPalette);
    if (myPalette <> 0) then begin
      SelectPalette(myDC, myPalette, False);
      RealizePalette(myDC);
    end;
  end;
end;

procedure render;
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); //Farb und Tiefenpuffer löschen
glLoadIdentity; // World Matrix zurücksetzen

gltranslatef(0,0,-12);
glrotatef(45,0.5,1,0);
glscalef(0.1,0.1,0.1);
model.Render;

SwapBuffers(form1.myDC); //scene ausgeben
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
form1.myDC:= GetDC(Handle);
SetupPixelFormat;
myRC:= wglCreateContext(myDC);
wglMakeCurrent(myDC, myRC);
glEnable(GL_DEPTH_TEST);
glLoadIdentity;

model:=TAll3DSMesh.Create(nil);
model.TexturePath:='textur\Tex.bmp';
model.LoadFromFile('teekanne.3ds');

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin

model.Free;

wglmakecurrent(0,0);
wgldeletecontext(mydc);
releasedc(handle,mydc);
end;

procedure TForm1.FormResize(Sender: TObject);
begin
glViewport(0, 0, Width, Height); // Setzt den Viewport für das OpenGL Fenster
glMatrixMode(GL_PROJECTION); // Matrix Mode auf Projection setzen
glLoadIdentity(); // Reset View
gluPerspective(45.0, Width/Height, 1, 100.0); // Perspektive den neuen Maßen anpassen.
glMatrixMode(GL_MODELVIEW); // Zurück zur Modelview Matrix
glLoadIdentity();
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
render;
end;

end.
Hoffe das hilft soweit. Nen Screenie hab ich nicht, sorry.
Guido L.
The nice thing about Windows is - It does not just crash, it displays a dialog box and lets you press 'OK' first.
Guten Rutsch und Start ins neue Jahr 2005
  Mit Zitat antworten Zitat
Wolverine

Registriert seit: 30. Mai 2003
Ort: Düsseldorf (NRW)
109 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: 3D Objekte steuern

  Alt 14. Dez 2003, 21:17
Ich hatte vor eine kleine 3D Welt zu programmieren in der man sich bewegen kann. Und auf diese Kenntnisse aufbauent, dann evtl. ein kleines 3D Game.
Guido L.
The nice thing about Windows is - It does not just crash, it displays a dialog box and lets you press 'OK' first.
Guten Rutsch und Start ins neue Jahr 2005
  Mit Zitat antworten Zitat
ATwardz

Registriert seit: 12. Mai 2003
205 Beiträge
 
Delphi 7 Professional
 
#6

3D Objekte steuern

  Alt 15. Dez 2003, 19:43
Hi,

im Grunde ist es schon die Lösung denke ich! Das Problem ist, das ich die Unit gl3ds nicht habe und desswegen nicht ausprobieren kann wie es geht!

Auf dieser Website findest du Hilfe denke ich jedoch ist es eine andere Methode!

3D Studio Max Dateien in Delphi einbinden

OBJEKT.Z:=Sin(Rot/60)*180/pi;

sollte dir weiterhelfen!


@wardz!
  Mit Zitat antworten Zitat
Wolverine

Registriert seit: 30. Mai 2003
Ort: Düsseldorf (NRW)
109 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: 3D Objekte steuern

  Alt 16. Dez 2003, 14:27
Hi,
das hat mir zwar nicht direkt weitergeholfen, aber vielleicht kann ich daraus ja was entwickeln.
Trotzdem Danke für den Link.
Guido L.
The nice thing about Windows is - It does not just crash, it displays a dialog box and lets you press 'OK' first.
Guten Rutsch und Start ins neue Jahr 2005
  Mit Zitat antworten Zitat
Wolverine

Registriert seit: 30. Mai 2003
Ort: Düsseldorf (NRW)
109 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: 3D Objekte steuern

  Alt 16. Dez 2003, 14:58
Danke das war DER Tipp.
Ich habs jetzt hinbekommen das ich mein 3D Objekt bewegen kann.
Guido L.
The nice thing about Windows is - It does not just crash, it displays a dialog box and lets you press 'OK' first.
Guten Rutsch und Start ins neue Jahr 2005
  Mit Zitat antworten Zitat
ATwardz

Registriert seit: 12. Mai 2003
205 Beiträge
 
Delphi 7 Professional
 
#9

Re: 3D Objekte steuern

  Alt 17. Dez 2003, 15:21
Ha ich mir nämlich gedacht , da dein Prog. ja auf open GL basiert und da ist die Ansteuerung immer gleich!

Na dann noch viel Erfolg!

@wardz
  Mit Zitat antworten Zitat
Wolverine

Registriert seit: 30. Mai 2003
Ort: Düsseldorf (NRW)
109 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: 3D Objekte steuern

  Alt 17. Dez 2003, 15:40
Hi,
stimmt schon, die Steuerung ist meistens ähnlich.
Wenn einer Interesse hat, poste ich mal gerne meine Lösung für "Nach-OpenGL-Programmierer"
Guido L.
The nice thing about Windows is - It does not just crash, it displays a dialog box and lets you press 'OK' first.
Guten Rutsch und Start ins neue Jahr 2005
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz