Camera schaut durch Cube

Übersicht BlitzBasic Blitz3D

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

 

bjh

BeitragDo, Okt 17, 2013 16:06
Antworten mit Zitat
Benutzer-Profile anzeigen
die begrenzung liegt bei 65536 (2^16) vertices pro mesh
 

funkmaster5000

BeitragSa, Okt 19, 2013 12:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich jetzt einen "Cube" mit nur einer sichtbaren Seite erstellen will, bin ich so vorgegangen:

Code: [AUSKLAPPEN]
Graphics3D 640, 480, 16, 2
SetBuffer BackBuffer()
camera = CreateCamera()

PositionEntity camera, 0, 0, - 5

mesh = CreateMesh()
surface = CreateSurface(mesh)

v0 = AddVertex(surface, 0, 0, 0)
v1 = AddVertex(surface, 0, - 1, 0)
v2 = AddVertex(surface, - 1, - 1, 0)
AddTriangle(surface, v0, v1, v2)
UpdateNormals mesh

surface2 = CreateSurface(mesh)

v0 = AddVertex(surface2, -1, 0, 0)
v1 = AddVertex(surface2, 0, -0, 0)
v2 = AddVertex(surface2, -1, -1, 0)
AddTriangle(surface2, v0, v1, v2)

UpdateNormals mesh

AmbientLight 255,255,255


wood = LoadTexture("C:\Users\Hosch\Desktop\Dungeontest\wood.png")

RotateEntity mesh,0,0,90
MoveEntity mesh,0,-2,1

EntityTexture mesh,wood
While Not KeyHit(1)
   If KeyHit(200) Then
   MoveEntity camera,0,0,1
   End If
   
   If KeyHit(208) Then
   MoveEntity camera,0,0,-1
   End If

   UpdateWorld
   RenderWorld
   Flip
Wend
End


Klappt wunderbar, aber das Texturieren funktioniert nicht. Muss ich noch was besonderes einstellen? Ich bekomme nur eine braune Fläche, aber die Textur entspricht die der Wand (siehe Screenshots Seite 1).

user posted image
 

Kruemelator

BeitragSa, Okt 19, 2013 12:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist vom Prinzip her richtig, aber du brauchst nicht extra zwei Surfaces erstellen, eines reicht. Außerdem lassen sich zwei der Vertices zusammenfassen.
TexturKoordianten sind der 5. und 6. Parameter.
Hier mal mein Code:
BlitzBasic: [AUSKLAPPEN]
Global feld = CreateMesh()
surface = CreateSurface(feld)
v0 = AddVertex(surface,-1, 1,0, 0,0)
v1 = AddVertex(surface, 1, 1,0, 1,0)
v2 = AddVertex(surface, 1,-1,0, 1,1)
v3 = AddVertex(surface,-1,-1,0, 0,1)
AddTriangle(surface,v0,v1,v2)
AddTriangle(surface,v0,v2,v3)
UpdateNormals(feld)
 

Mr.Floppy

BeitragSa, Okt 19, 2013 12:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst deinen Vertexen auch UV-Koordinaten zuweisen. Das wären die zwei Parameter nach den x-, y-, z-, Koordinaten => Addvertex(surface, x, y, z, u, v). Vielleicht hilft dir mein Beispielcode in diesem Thread https://www.blitzforum.de/foru...hp?t=39590 weiter.

- edit -

Kruemelator war schneller.
 

funkmaster5000

BeitragMo, Okt 21, 2013 18:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Klappt wunderbar, danke!

Ich würde jetzt also aus Performancegründen alle "Felder" (siehe Beispielcode von Kruemelator) zu einem Mesh zusammenfassen? Also z.B.
Code: [AUSKLAPPEN]
allmeshes = CreateMesh
AddMesh feld1,allmeshes
AddMesh feld2,allmeshes
etc...


Kann ich danach die Felder löschen mit FreeMesh? Beziehungsweise wie werde ich sie los, ich brauche sie ja nicht mehr? Wenn ich FreeMesh verwende, klappt es nicht so ganz.
 

Kruemelator

BeitragMo, Okt 21, 2013 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst die einzelnen Felder mit PositionMesh() und nicht PositionEntity() platzieren, das gleiche gilt für Scale und Rotate, dann klappt es. Und aufjedenfall die Felder dann mit FreeEntity löschen.

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group