Mehrere 3d-Fragen

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Jannik

Betreff: Mehrere 3d-Fragen

BeitragMo, Feb 16, 2009 15:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie der Titel schon vermuten lässt (Wink) habe ich einige recht grundlegende Fragen zum Thema 3d-Grafik:

1. Wie kann man ein Bild (z.B. Fadenkreuz) im "Graphics3d"-Modus anzeigen lassen? Muss man adzu nochmal den normalen "Graphics"-Befehl nutzen?

2. Wenn man ein Terrain als Entity ansieht , hat dieses ja auch ein entitypitch, enityyaw und entityroll. Wenn ich nun möchte, dass ein Auto oder anderes Fahrzeug sich je nach der Steigung eines Terrains an der x-Achse dreht damit es realsitischer aussieht, wie geht das? muss ich da das "EntityRoll(terrain)" als Rotation an der x-Achse benutzen?

3. Kann man das machen, dass man mehrere Meshes , die die gleichen Eigenschaften haben (gleich groß, gleiche Gravitation) in einem Feld speichert und dann das gesamte Feld als Variable benutzen, auch wenn nur ein Mesh davon gerade bewegt oder verändert werden soll, und wenn ja wie?

Vielen Dank schonmal jetzt Smile

Xeres

Moderator

BeitragMo, Feb 16, 2009 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Zu 1.
Entweder benutzt man ein Sprite den man vor die Camera hängt Loadsprite oder nach RenderWorld Zeichnet man ein 2D Bild an die entsprechende Position.

3. Ich verstehe nicht so ganz was du bewerkstelligen willst (Beispiel?), aber mit Types lässt sich das sicher einrichten.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

FireballFlame

BeitragMo, Feb 16, 2009 15:19
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Am einfachsten ganz normal mit DrawImage. Alles was Graphics kann, kann Graphics3D auch.
2. EntityPitch, -Yaw und -Roll geben dir nur die Rotation des ganzen Objektes, sagen aber über die Form des Objektes nichts aus. Wenn du die Steigung eines Terrains an einer bestimmten stelle ermitteln willst, könntest du dazu TerrainY benutzen (an 2 verschiedenen Punkten ausführen und den Rest selber errechnen).
3. Das verstehe ich nicht ganz. Du kannst Meshes in einem Feld abspeichern und dann eines davon ansprechen, aber was meinst du mit "das gesamte Feld als Variable benutzen"?
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit
 

Jannik

BeitragMo, Feb 16, 2009 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke an euch beide! Also ganz normal DrawImage hab ich schon probiert, werds jetzt mal mit DrawImage nach RenderWorld probieren...
Also zu 3. ... wenn man mehrere Meshes, die beweglich sind (z.B. Autos) bewegen will aber halt immer nur eins zur Zeit, oder mehrere aber natürlich in verschiedene Richtungen, ist es ja lästig, für jedes Auto bzw. Mesh ne eigene Schleife zu bauen.

Goodjee

BeitragMo, Feb 16, 2009 16:37
Antworten mit Zitat
Benutzer-Profile anzeigen
warum ne eigene schleife

Code: [AUSKLAPPEN]

type auto
field entity
end type

for a.auto =each auto
  moveentity auto\entity,0.1,0.1,0.1
next
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
 

Jannik

BeitragMo, Feb 16, 2009 17:22
Antworten mit Zitat
Benutzer-Profile anzeigen
leuchtet ein...aber was genau macht der type hier genau? und warum steh da for A.auto = each auto?
(noobige frage Very Happy)

hab das jetzt mit der Steigung versucht, geht nicht, aber ich glaube das liegt vllt an nem mathematischen Fehler:
Code: [AUSKLAPPEN]

terrain_m1# = (TerrainY(terrain, EntityX(car1), EntityY(car1), EntityZ(car1)) - TerrainY(terrain, EntityX(cam), EntityY(cam), EntityZ(cam))) / (EntityX(car1) - EntityX(cam))

Tan(terrain_m1#) = terrain_m#

RotateEntity car1, terrain_m#, 0, 0



dass ich für den 2. terrainy-punkt (cam) genommen hab liegt daran, dass meine Kamera hinter dem Auto hinterher fliegt.



weis irgendein Mathegenie hier was falsch ist?Very Happy
  • Zuletzt bearbeitet von Jannik am Mo, Feb 16, 2009 18:14, insgesamt einmal bearbeitet

Goodjee

BeitragMo, Feb 16, 2009 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
hm, um types zu verstehen solltest du am besten in der hilfe schaun oder dir anderswo ein tutorial reintun Wink
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

The_Nici

BeitragMo, Feb 16, 2009 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
am besten liest du ein Tutorial zu Types durch. Wink
Types sind Schablonen für Objekte. Ich weiss z.B., wie eine Orange aussieht, das muss aber nicht heissen das eine vor mir liegt. Mit irgendeinname.Orange = New Orange habe ich eine Orange mit dem Namen irgendeinname vor mir liegen. Es können auch mehrere gleichnamige Objekte vorliegen.
Ein Type gibt vor, wie ein Objekt auszusehen hat, dies mit sogennanten "Fields", zu Deutsch "Feldern". Diese kann man dann in einer Objektinstanz beliebig ausfüllen.
Damit ich alle Objekt-Instanzen eines Types durchgehen kann, gibt es "Each". Das heisst, ganz einfach, jedes.
Somit heisst "For a.auto = Each auto" einfach, dass ich alle Autos durchgehe, und das aktuelle Auto heisst dann "a". Somit kann ich es dann auch ansprechen.
Beispiel:
Code: [AUSKLAPPEN]

Type auto   ;Unser Auto-Type
   Field karosserie   ;Die Karosserie
   Field raeder[4]   ;4 Räder
End Type

Graphics3D 800,600,32,2

boden = CreatePlane()   ;Boden
cam = CreateCamera()   ;Kamera
light = CreateLight()   ;Licht

PositionEntity cam, 0,5,5   ;Kamera positionieren
PositionEntity light, 0,10,-10   ;Licht positionieren
PointEntity cam, boden   ;Kamera auf den Boden zielen lassen
EntityColor boden, 100,100,100   ;Boden einfärben
;Hauptschleife
While Not KeyHit(1)
   If KeyHit(57)   ;Tastendruck 57 (Leertaste) abfragen
      a.auto = New auto   ;Neue Auto-Instanz erstellen
      a\karosserie = CreateCube()   ;Einen Würfel für die Karosserie erstellen
      ScaleEntity a\karosserie, 1,0.5,1.5   ;n'Auto ist ja nicht Würfelförmig, also etwas skalieren
      EntityColor a\karosserie, 255,0,0   ;Wer will schon kein Rotes Auto?
      For i = 1 To 4   ;Diese Schleife wird 4 mal ausgeführt
         a\raeder[i] = CreateCylinder()   ;Das aktuelle Rad erstellen
         ScaleEntity a\raeder[i], 0.5,0.1,0.5   ;Räder sind ja nicht länglich, oder?
         RotateEntity a\raeder[i], 0,0,90   ;Rad richtig drehen
         EntityParent a\raeder[i], a\karosserie   ;Jetzt gehört das Rad zur Karosserie, also wenn sich die Karosserie bewegt, bewegt sich auch das Rad
         EntityColor a\raeder[i], 50,50,50   ;Färbt noch die Räder.
      Next
      ;Nun werden wir die Räder auch richtig positionieren.
      PositionEntity a\raeder[1], 1.1,-0.25,-1.0
      PositionEntity a\raeder[2], 1.1,-0.25,1.0
      PositionEntity a\raeder[3], -1.1,-0.25,-1.0
      PositionEntity a\raeder[4], -1.1,-0.25,1.0
      
      ;Nun werden wir die Karosserie auch noch irgendwohin positionieren! Die Räder werden dank EntityParent mitbewegt, und behalten ihre relative Position bei!
      PositionEntity a\karosserie, Rand(0,10),1,Rand(0,10)
   EndIf
   If KeyHit(2) Then
      PointEntity cam, a\karosserie   ;Rotiert die Kamera beim Tastendruck der Taste 1 zum letztgesetzten Auto
   EndIf
   
   RenderWorld
   Flip
   Cls
Wend
End

Nutze es weise, junger Padawan. :p

MfG
 

Jannik

BeitragMo, Feb 16, 2009 18:31
Antworten mit Zitat
Benutzer-Profile anzeigen
möge die Macht mit dir sein The_Nici Laughing Very Happy

gut, das hat sich dann ja sozusagen geklärt, aber das mit der Steigung scheint komplizierter als erwartet.
hab jetzt während des spielausführens mal den Wert terra_m1# angeguckt, und da steht "NAN".
was heist das?Very Happy

The_Nici

BeitragMo, Feb 16, 2009 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
im Sample 'Driver' wird eine einfache Fahrzeugphysik erklärt. Das Sample befindet sich in <installationspfad>/samples/mak/driver/
MfG
 

Jannik

BeitragMo, Feb 16, 2009 20:50
Antworten mit Zitat
Benutzer-Profile anzeigen
hey danke Exclamation Exclamation
das ist ja super dass es da n sample gibt

heftig...wie soll man diesen code verstehen?^^
Code: [AUSKLAPPEN]

   ;align car to wheels
   zx#=(EntityX( wheels[2],True )+EntityX( wheels[4],True ))/2
   zx=zx-(EntityX( wheels[1],True )+EntityX( wheels[3],True ))/2
   zy#=(EntityY( wheels[2],True )+EntityY( wheels[4],True ))/2
   zy=zy-(EntityY( wheels[1],True )+EntityY( wheels[3],True ))/2
   zz#=(EntityZ( wheels[2],True )+EntityZ( wheels[4],True ))/2
   zz=zz-(EntityZ( wheels[1],True )+EntityZ( wheels[3],True ))/2
   AlignToVector car,zx,zy,zz,1
   
   zx#=(EntityX( wheels[1],True )+EntityX( wheels[2],True ))/2
   zx=zx-(EntityX( wheels[3],True )+EntityX( wheels[4],True ))/2
   zy#=(EntityY( wheels[1],True )+EntityY( wheels[2],True ))/2
   zy=zy-(EntityY( wheels[3],True )+EntityY( wheels[4],True ))/2
   zz#=(EntityZ( wheels[1],True )+EntityZ( wheels[2],True ))/2
   zz=zz-(EntityZ( wheels[3],True )+EntityZ( wheels[4],True ))/2
   AlignToVector car,zx,zy,zz,3



vorher wurde ein Feld errichtet dass alle 4 Räder (wheels) enthält:

Code: [AUSKLAPPEN]

Global wheels[4]

cnt=1
For z#=1.5 To -1.5 Step -3
For x#=-1 To 1 Step 2
   wheels[cnt]=CreateSphere( 8,car )
   EntityAlpha wheels[cnt],.5
   ScaleEntity wheels[cnt],.5,.5,.5
   EntityRadius wheels[cnt],.5
   PositionEntity wheels[cnt],x,0,z
   EntityType wheels[cnt],WHEEL
   cnt=cnt+1
Next
Next
 

norc

BeitragSa, Feb 28, 2009 12:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Fremden Code zu verstehen ist immer etwas knifflig.

Schau dir auch mal Atan2 an, das ist geeignet, um aus einer Distanz einen Winkel zu berechnen, also z.B. aus Höhendifferenz der Auflagepunkte 2er Räder den Winkel des Chassis.

Mit Types kann man viel falsch machen. Geh das langsam an und lies dir ein paar Tutorials dazu.

EInfacher geht das mit normalen Arrays, z.B:

Code: [AUSKLAPPEN]
Dim a(10)
Dim speed#(10)

for i=0 to 10
 a(i)=loadmesh("auto.3ds")
 speed(i)=2 + rnd(1.0)
next

...
repeat
for i=0 to 10
 moveentity a(i),0,0,speed(i)
next
...



Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group