Function CreateMyCube() macht Surface-Probleme

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Chester

Betreff: Function CreateMyCube() macht Surface-Probleme

BeitragSa, Apr 02, 2005 17:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi@all,
Ich habe für mein 3D-Studio eine Function namens "CreateMyCube" geschrieben. Allerdings wenn ihr unten den Code anschaut, werdet ihr feststellen, dass etwas nicht stimmt. Woran kann das liegen?

BlitzBasic: [AUSKLAPPEN]

Graphics3D 800,600
SetBuffer BackBuffer()
camera=CreateCamera()
light=CreateLight()
PositionEntity camera,0,0,-10
RotateEntity light,90,0,0

Global mesh = CreateMesh()
Global surface = CreateSurface(mesh)
CreateMyCube(0,0,0,2,2,2)

UpdateNormals mesh
EntityShininess mesh, 1
While Not KeyHit(1)
TurnEntity mesh,1,1,1
RenderWorld
Flip
Wend
End

Function CreateMyCube(x2,y2,z2,x3,y3,z3)

a2=AddVertex(surface,x2,y2,z2)
a3=AddVertex(surface,x2+x3,y2+y3,z2)
a4=AddVertex(surface,x2,y2+y3,z2)
AddTriangle(surface,a2,a3,a4)
b2=AddVertex(surface,x2+x3,y2,z2)
AddTriangle(surface,a2,b2,a3)
c2=AddVertex(surface,x2,y2+y3,z2+z3)
AddTriangle(surface,c2,a3,a4)
d2=AddVertex(surface,x2+x3,y2+y3,z2+z3)
AddTriangle(surface,c2,d2,a3)
e2=AddVertex(surface,x2+x3,y2,z2+z3)
AddTriangle(surface,b2,e2,a3)
AddTriangle(surface,e2,d2,a3)
f2=AddVertex(surface,x2,y2,z2+z3)
AddTriangle(surface,f2,c2,a4)
AddTriangle(surface,a2,f2,a4)
AddTriangle(surface,e2,d2,c2)
AddTriangle(surface,f2,e2,c2)
AddTriangle(surface,e2,b2,a2)
AddTriangle(surface,f2,e2,a2)
UpdateNormals mesh
End Function

BladeRunner

Moderator

BeitragSa, Apr 02, 2005 17:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst alle Polygone in der gleichen Ausrichtung erzeugen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

BladeRunner

Moderator

BeitragSa, Apr 02, 2005 18:03
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
Graphics3D 800,600
SetBuffer BackBuffer()
camera=CreateCamera()
light=CreateLight()
PositionEntity camera,0,0,-10
RotateEntity light,90,0,0

Global mesh = CreateMesh()
Global surface = CreateSurface(mesh)
CreateMyCube(0,0,0,2,2,2)

;UpdateNormals mesh ;unnötig
EntityShininess mesh, 1
While Not KeyHit(1)
TurnEntity mesh,1,1,1
RenderWorld
Flip
Wend
End

Function CreateMyCube(x,y,z,b,h,t)

;mit vernünftigen Bezeichnern geht das: x,y,z als Startposition.
; b,h,t = breite ,höhe, tiefe

; nun erstelle ich alle Tris so dass sie (von ihrer Vorderseite betrachtet) rechtsläufig sind
;d.h. im Uhrzeigersinn.


vlo=AddVertex(surface,x,y,z)
vro=AddVertex(surface,x+b,y,z)
vru=AddVertex(surface,x+b,y+h,z)

AddTriangle(surface,vlo,vro,vru)
vlu=AddVertex(surface,x,y+h,z)

AddTriangle(surface,vlo,vru,vlu)
hlo=AddVertex(surface,x,y,z+t)

AddTriangle(surface,hlo,vro,vlo)
hro=AddVertex(surface,x+b,y,z+t)

AddTriangle(surface,hlo,hro,vro)
hlu=AddVertex(surface,x,y+h,z+t)

AddTriangle(surface,vlo,hlu,hlo)
AddTriangle(surface,vlo,vlu,hlu)
hru=AddVertex(surface,x+b,y+h,z+t)

AddTriangle(surface,hlo,hlu,hro)
AddTriangle(surface,hlu,hru,hro)
AddTriangle(surface,vro,hro,hru)
AddTriangle(surface,vro,hru,vru)
AddTriangle(surface,vlu,hru,hlu)
AddTriangle(surface,vlu,vru,hru)
UpdateNormals mesh

FlipMesh mesh ;nach einem Test musste ich feststellen dass BB3D linksläufige Tris erwartet. Aber kein Problem: flipmesh kehrt die normalen um.


End Function

;so.... merken für die zukunft Wink


bitteschön.
zu den verwendeten Variablennamen:
v = vorne
h = hinten
l = links
r = rechts
o = oben
u = unten

Also bedeutet vlo: der vordere,linke, obere Eckpunkt des Würfels.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Chester

BeitragSa, Apr 02, 2005 20:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Big Thx! Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group