z=Cos(x^2+y^2)

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Alkan

Betreff: z=Cos(x^2+y^2)

BeitragMi, Nov 17, 2010 14:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
ich hab mal versucht die Funktion "z=cos(x^2+y^2)" darzustellen und
es hat auch geklappt.
Jedoch ensteht zwischen den einzelnen Vertices ein freier Bereich, ich würde die aber lieber
"zusammenbinden".
Da ich das nicht so gut erklären kann ist hier noch mal der Code(leider sehr unübersichtlich und unkommentiert:
BlitzBasic: [AUSKLAPPEN]

Graphics3D 1024,768,32,2
SetBuffer BackBuffer()

SeedRnd MilliSecs()


Global cam0=CreateCamera()
PositionEntity cam0,10,10,-2
RotateEntity cam0,45,40,0

time=MilliSecs()
m=CreateMesh()
s=CreateSurface(m)
s2=CreateSurface(m)
s3=CreateSurface(m)
x0#=0
y#=0
z0#=0
scale#=16
rectc#=512
rects#=Sqr(rectc)
rectwh#=Float(scale/rects)
For x = 1 To rects
For z = 1 To rects
y#=Cos(x^2+z^2);<--------Hier ist die besagte Funktion!!!!!!!!
v0=AddVertex(s,x0,y,z0+rectwh)
v1=AddVertex(s,x0+rectwh,y,z0+rectwh)
v2=AddVertex(s,x0,y,z0)
;VertexColor(s,v0,Rand(0,255),Rand(0,255),Rand(0,255))
;VertexColor(s,v1,Rand(0,255),Rand(0,255),Rand(0,255))
;VertexColor(s,v2,Rand(0,255),Rand(0,255),Rand(0,255))
t0=AddTriangle(s,v0,v1,v2)
v0=AddVertex(s,x0+rectwh,y,z0)
v1=AddVertex(s,x0,y,z0)
v2=AddVertex(s,x0+rectwh,y,z0+rectwh)
;VertexColor(s,v0,Rand(0,255),Rand(0,255),Rand(0,255))
;VertexColor(s,v1,Rand(0,255),Rand(0,255),Rand(0,255))
;VertexColor(s,v2,Rand(0,255),Rand(0,255),Rand(0,255))
t0=AddTriangle(s,v0,v1,v2)
z0=z0+rectwh
Next
x0=x0+rectwh
z0=0
Next


UpdateNormals m
EntityFX m, 34
time=MilliSecs()-time




m2=CopyMesh(m)
RotateEntity m2,0,180,0
m3=CopyMesh(m)
RotateEntity m3,0,90,0
m4=CopyMesh(m)
RotateEntity m4,0,-90,0

While Not KeyHit(1)

WireFrame MouseDown(1)

If MouseDown(2)
Delay 100
While MouseDown(2)

Wend
EndIf


FreeLook(.05)

RenderWorld()


Text 0,0,"FPS: "+FPS()
Text 0,20,"TrisRendered: "+TrisRendered()
Text 0,40,rectwh
Text 0,60,x*z
Text 0,80,time

Flip
Wend
End



Global FPSSEC = MilliSecs(), FPS, FRAMES
Function FPS()

FRAMES = FRAMES + 1
If MilliSecs() - FPSSEC => 1000 Then
FPS = FRAMES
FRAMES = 0
FPSSEC = MilliSecs()
EndIf

Return FPS
End Function


Global CamXS#, CamZS#, CamRotXS#, CamRotYS#
Function FreeLook(sp# = .1)
If sp# > 0 Then
CamXS# = (CamXS# + ((KeyDown(32) Or KeyDown(205)) - (KeyDown(30) Or KeyDown(203))) * sp#) * .75
CamZS# = (CamZS# + ((KeyDown(17) Or KeyDown(200)) - (KeyDown(31) Or KeyDown(208))) * sp#) * .75
MoveEntity cam0, CamXS#, 0, CamZS#
EndIf
CamRotXS# = ((MouseXSpeed() - CamRotXS#) * .35 + CamRotXS#) * .75
CamRotYS# = ((MouseYSpeed() - CamRotYS#) * .35 + CamRotYS#) * .75
If EntityPitch(cam0) + CamRotYS# < -85 pitch# = -85 ElseIf EntityPitch(cam0) + CamRotYS# > 85 pitch# = 85 Else pitch# = EntityPitch(cam0) + CamRotYS#
yaw# = -CamRotXS# + EntityYaw(cam0)
RotateEntity cam0, pitch#, yaw#, 0
MoveMouse GraphicsWidth() / 2, GraphicsHeight() / 2
End Function


Ich hoffe ihr könnt mir helfen.

MfG
Alkan
Hauptrechner: Win7 Ultimate x64|AMD Phenom II X4 965 BlackEdition 4x3.4GHz|4 GB DualKit DDR3-1600 Ram|1.5 TB Samsung EcoGreen|Cougar CM 700Watt|ASRock M3A790GFX/120M|Nvidia GeForce 9500GT|Ati Radeon HD3300(Onboard-Deaktiviert)
Server(früher Hauptrechner): Ubuntu 9.1 x86|Intel P4 HT 3GHz|Ati Radeon X600Pro|200 GB HDD
Worklog: Planetensimulation
Homepage(Under Construction): alkan96.dyndns.org
Wenn schon falsch, dann richtig falsch.

Nibor

BeitragMi, Nov 17, 2010 19:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Das liegt daran, dass du für jedes Viereck nur eine Höhe berechnest und dann für alle vier Vertices verwendest. Du musst stattdessen die Höhe für jeden dieser Vertices extra berechnen, und zwar mit der entsprechenden Position:

Code: [AUSKLAPPEN]
For x = 1 To rects
For z = 1 To rects
y#=Cos(x^2+(z+1)^2);<--------Hier ist die besagte Funktion!!!!!!!!
v0=AddVertex(s,x0,y,z0+rectwh)
y#=Cos((x+1)^2+(z+1)^2)
v1=AddVertex(s,x0+rectwh,y,z0+rectwh)
y#=Cos(x^2+z^2)
v2=AddVertex(s,x0,y,z0)
;VertexColor(s,v0,Rand(0,255),Rand(0,255),Rand(0,255))
;VertexColor(s,v1,Rand(0,255),Rand(0,255),Rand(0,255))
;VertexColor(s,v2,Rand(0,255),Rand(0,255),Rand(0,255))
t0=AddTriangle(s,v0,v1,v2)
y#=Cos(z^2+(x+1)^2)
v0=AddVertex(s,x0+rectwh,y,z0)
y#=Cos(x^2+z^2)
v1=AddVertex(s,x0,y,z0)
y#=Cos((x+1)^2+(z+1)^2)
v2=AddVertex(s,x0+rectwh,y,z0+rectwh)
;VertexColor(s,v0,Rand(0,255),Rand(0,255),Rand(0,255))
;VertexColor(s,v1,Rand(0,255),Rand(0,255),Rand(0,255))
;VertexColor(s,v2,Rand(0,255),Rand(0,255),Rand(0,255))
t0=AddTriangle(s,v0,v1,v2)
z0=z0+rectwh
Next
x0=x0+rectwh
z0=0
Next
http://www.blitzforum.de/showcase/203/

Alkan

BeitragMi, Nov 17, 2010 21:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank Nibor, es funktioniert jetzt richtig Wink
Hauptrechner: Win7 Ultimate x64|AMD Phenom II X4 965 BlackEdition 4x3.4GHz|4 GB DualKit DDR3-1600 Ram|1.5 TB Samsung EcoGreen|Cougar CM 700Watt|ASRock M3A790GFX/120M|Nvidia GeForce 9500GT|Ati Radeon HD3300(Onboard-Deaktiviert)
Server(früher Hauptrechner): Ubuntu 9.1 x86|Intel P4 HT 3GHz|Ati Radeon X600Pro|200 GB HDD
Worklog: Planetensimulation
Homepage(Under Construction): alkan96.dyndns.org
Wenn schon falsch, dann richtig falsch.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group