olisi hyvä, jos pelissä olisi pelialue, ja kamera seuraisi konetta, jota voisi kääntää myös sivuttain tjsp.koodaaja wrote:Kas, pitänee huomenna hieman pirteämpänä tutustua ja tehdä nopeustestejä, se vaikuttaisi olevan suunnilleen ellei peräti täsmälleen sama kaava kuin tämänhetkinen vähemmillä väliarvoilla.
Nuo nyt eivät ole mitään kovin kummoista, lentokoneella voi liikkua 2D-tasossa joka liikkuu vakionopeudella eteenpäin. Eiköhän tuosta joku väistely/ammuskelupeli tule.
Efektit
-
- Devoted Member
- Posts: 594
- Joined: Tue Sep 30, 2008 4:30 pm
- Location: Ruudun toisella puolella
Re: Efektit
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: Efektit
Vapaasti siirtyilevä kamera rikkoisi suuren osan enginestä, jolloin koko homma olisi kirjoitettava alusta eikä siitä saisi enää lainkaan niin komeaa. Fysiikoidenkin säätämiseen saisi sopivaa tuskaa, joten jää ainakin toistaiseksi väliin. Mutta voihan sitäkin kokeilla kun taas on enemmän tyhjää aikaa (l. koeviikon jälkeen)
Tuossa viikonloppuna tuli hitmanien ohessa lisättyä maastoa.
Pitänee jaksaa tehdä ihan oma threadi tälle ettei mene efektit ihan täyteen näitä :> Kunhan saa vihollisia lisättyä.
Tuossa viikonloppuna tuli hitmanien ohessa lisättyä maastoa.
Pitänee jaksaa tehdä ihan oma threadi tälle ettei mene efektit ihan täyteen näitä :> Kunhan saa vihollisia lisättyä.
Re: Efektit
Tosi hieno, mutta kun ammuin niin Fps putosi 60:sta 30:een pysyvästi. Jatka ihmeessä peliksi asti.koodaaja wrote:Vapaasti siirtyilevä kamera rikkoisi suuren osan enginestä, jolloin koko homma olisi kirjoitettava alusta eikä siitä saisi enää lainkaan niin komeaa. Fysiikoidenkin säätämiseen saisi sopivaa tuskaa, joten jää ainakin toistaiseksi väliin. Mutta voihan sitäkin kokeilla kun taas on enemmän tyhjää aikaa (l. koeviikon jälkeen)
Tuossa viikonloppuna tuli hitmanien ohessa lisättyä maastoa.
Pitänee jaksaa tehdä ihan oma threadi tälle ettei mene efektit ihan täyteen näitä :> Kunhan saa vihollisia lisättyä.
Sumu Games: Sam, Ur eye!
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: Efektit
Jospa sitä taas jotain muutakin postaisi kuin 3D:tä. IFS-fraktaaleja innostuin renderöimään, valitettavasti nyky-CB:n tehot loppuu pahasti kesken.
Siitä vaan optimoimaan jos haluatte, oma into ei nyt oikein riitä (etenkään kun ohjelman C++-isoveli renderöi huomattavasti kauniimpia fraktaaleja sekunneissa)
Code: Select all
Const tfamo = 4
Const iter = 100000
Dim tf#(tfamo,5)
SCREEN 512, 512
For i = 0 To tfamo
For j = 0 To 5
tf(i, j) = Rnd(-1,1)
Next j
Next i
curx# = 0
cury# = 0
begintime = Timer()
For i = 0 To iter
If (i Mod 100) = 0 Then SetWindow Str(i/1000.0)+"%"
use = Rand(tfamo)
tmpx# = curx*tf(use, 0)+cury*tf(use, 2)+tf(use,4)
tmpy# = curx*tf(use, 1)+cury*tf(use, 3)+tf(use,5)
curx = tmpx: cury = tmpy
PutPixel Int(curx*100)+256, Int(cury*100)+256, GetPixel(Int(curx*100)+256, Int(cury*100)+256)+20
Next i
Text 10, 10, "rdy in "+Str(Timer()-begintime)+"ms"
DrawScreen
WaitKey
-
- Active Member
- Posts: 106
- Joined: Wed Jul 30, 2008 5:04 pm
Re: Efektit
Siinä nopeampi, mutta jostain syystä putpixel2 pukkasi mavia
Code: Select all
Const tfamo = 4
Const iter = 100000
Dim tf#(tfamo,5)
SCREEN 512, 512
For i = 0 To tfamo
For j = 0 To 5
tf(i, j) = Rnd(-1,1)
Next j
Next i
curx# = 0
cury# = 0
begintime = Timer()
Lock SCREEN()
For i = 0 To iter
If (i Mod 100) = 0 Then SetWindow Str(i/1000.0)+"%"
use = Rand(tfamo)
tmpx# = curx*tf(use, 0)+cury*tf(use, 2)+tf(use,4)
tmpy# = curx*tf(use, 1)+cury*tf(use, 3)+tf(use,5)
curx = tmpx: cury = tmpy
PutPixel Int(curx*100)+256, Int(cury*100)+256, GetPixel(Int(curx*100)+256, Int(cury*100)+256)+20
Next i
Unlock SCREEN()
Text 10, 10, "rdy in "+Str(Timer()-begintime)+"ms"
DrawScreen
WaitKey
Re: Efektit
"Jostain syystä" eli luet/kirjoitat ruudun ulkopuolella. Vaihda: "PutPixel Int(curx*100)+256, Int(cury*100)+256, GetPixel(Int(curx*100)+256, Int(cury*100)+256)+20" tähän:
Code: Select all
dx% = Max(Min(511, Int(curx*100)+256),0)
dy% = Max(Min(511, Int(cury*100)+256),0)
PutPixel2 dx, dy, GetPixel(dx, dy)+20
-On selkeästi impulsiivinen koodaaja joka...
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: Efektit
Kas, olisi selvästi kannattanut kokeilla putpixel2:takin, tuohan on selvästi nopeampi (niinhän se tosin on aina ollut). Voisi viritellä siitä vaikka ihan kunnon renderöijän.
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: Efektit
Anteeksi tuplat, mutta tuli sen verran tavaraa etten editoida halua.
Eli tein tuosta IFS-systeemistä ihan kunnollisen myös CB-puolella, siitä tuli ihan suhteellisen komea.
Lisäksi törmäsin hassuun Wikipedia-artikkeliin ja piirtelin hieman auringonkukkapatternia, tässä nyt ei sinänsä mitään muuta ihmeellistä ole kuin tuo matemaattinen kauneus.
Eli tein tuosta IFS-systeemistä ihan kunnollisen myös CB-puolella, siitä tuli ihan suhteellisen komea.
Code: Select all
Const tfamo = 4
Const iter = 1000000
Dim tf#(tfamo,5)
SCREEN 512, 512
redo:
Color 1, 1, 1
Box 0, 0, 512, 512
DrawScreen OFF
For i = 0 To tfamo
For j = 0 To 5
tf(i, j) = Rnd(-1,1)
Next j
Next i
redness# = Rnd(.7, .99)
blueness# = Rnd(.7, .99)
greenness#= Rnd(.7, .99)
roundness# = Rnd(0.0, 40.0)
curx# = 0
cury# = 0
begintime = Timer()
Lock SCREEN()
For i = 0 To iter
If (i Mod 100) = 0 Then SetWindow Str((i/float(iter))*100.0)+"%"
use = Rand(tfamo)
tmpx# = curx*tf(use, 0)+cury*tf(use, 2)+tf(use,4)
tmpy# = curx*tf(use, 1)+cury*tf(use, 3)+tf(use,5)
curx = tmpx: cury = tmpy
drawx# = 100*curx*Cos(roundness*curx)-100*cury*Sin(roundness*curx)
drawy# = 100*curx*Sin(roundness*curx)+100*cury*Cos(roundness*curx)
If(drawx>=-255 And drawx<255 And drawy>=-255 And drawy<255) Then
col% = GetPixel2(drawx+256, drawy+256)
r# = Float((col Shr 16) Mod 256)
col = col - r
g# = Float((col Shr 8) Mod 256)
col = col - g
b# = -Float(col Mod 256)
r = 255-(255-r) * redness
g = 255-(255-g) * blueness
b = 255-(255-b) * greenness
PutPixel2 drawx+256, drawy+256, (255 Shl 24) + (Int(r) Shl 16) + (int(g) Shl 8) + int(b)
EndIf
Next i
Unlock
SetWindow "100.00% (in "+Str(Timer()-begintime)+"ms)"
DrawScreen
WaitKey
Goto redo
Code: Select all
For n = 1 To 800
Color 127+90*Cos(n*137.5), 127-90*Cos(n*137.5), 190-(n/800.0*190)
Circle 200+4.5*Sqrt(n)*Cos(n*137.5), 150+4.5*Sqrt(n)*Sin(n*137.5), 4
Next n
DrawScreen
WaitKey
Re: Efektit
Vau, hienoja nuo molemmat, koodaaja!
Pakkohan mun oli laittaa tuo pyörimään:koodaaja wrote: Lisäksi törmäsin hassuun Wikipedia-artikkeliin ja piirtelin hieman auringonkukkapatternia, tässä nyt ei sinänsä mitään muuta ihmeellistä ole kuin tuo matemaattinen kauneus.
Code: Select all
rotate=0
Repeat
rotate+1
For n = 1 To 800
Color 127+90*Cos(n*137.5+rotate), 127-90*Cos(n*137.5+rotate), 190-(n/800.0*190)
Circle 200+4.5*Sqrt(n)*Cos(n*137.5+rotate), 150+4.5*Sqrt(n)*Sin(n*137.5+rotate), 4
Next n
DrawScreen
Forever
-
- Active Member
- Posts: 155
- Joined: Wed Dec 03, 2008 8:17 pm
- Location: Haukipudas
Re: Efektit
No oli minunkin pakko hieaman pyörittää tota.Jare wrote: Pakkohan mun oli laittaa tuo pyörimään:
Code: Select all
rotate=0
movement=0
Repeat
rotate+1
movement+1
If movement=360 Then movement=0
For n = 1 To 800
Color 127-90*Cos(n*137.5-rotate), 127+90*Cos(n*137.5+rotate*n), 190+(n/800.0*190)
If n<400 Then
Circle 200+4.5*Sqrt(n)*Cos(n*137.5+rotate), 150+4.5*Sqrt(n)*Sin(n*137.5+rotate-movement*6), 4
ElseIf n>=400 And n<=600 Then
Circle 200+4.5*Sqrt(n)*Cos(n*137.5+rotate-movement), 150-4.5*Sqrt(n)*Sin(n*137.5+rotate), 4
Else
Circle 200-4.5*Sqrt(n)*Cos(n*137.5+rotate+movement*2), 150+4.5*Sqrt(n)*Sin(n*137.5+rotate), 4
EndIf
Next n
DrawScreen
Forever
Turmankylä
huonoja pelejä, purkkaisia viritelmiä, tylsiä tarinoita.
huonoja pelejä, purkkaisia viritelmiä, tylsiä tarinoita.
Re: Efektit
Hieman erilainen savuefekti:
Code: Select all
SCREEN 800,600
map = LoadMap("Media\testmap.til","Media\tileset.bmp")
cannon = LoadObject("Media\cannon.bmp",180) : ObjectOrder cannon, 1
turret = LoadObject("Media\turret.bmp")
bullet = LoadObject("Media\bigbullet.bmp",180) : ShowObject bullet,OFF
PositionObject turret,0,-160
PositionObject cannon,0,-160
RotateObject cannon,90
Type BULLETS
Field obj
EndType
Type SMOKE
Field X As Float
Field Y As Float
Field OFFX
Field OFFY
Field SIZE As Float
Field SPEED
Field SPEED2 As Float
Field ANG
Field DELSIZE
EndType
// VAKIONOPEUSAJASTIMET - SDK:sta lyhennetty versio
Global g_frameTime As Float
g_frameTime = 0.0
Global g_tmpTime As Integer
g_tmpTime = 0
Function PxPerSec(px#)
Return px# * g_frameTime
End Function
Function UpdateFrameTimer()
curTime = TIMER()
If g_tmpTime = 0 Then g_tmpTime = curTime
g_frameTime = (curTime - g_tmpTime) / 1000.0
g_tmpTime = curTime
End Function
// END OF: VAKIONOPEUSAJASTIMET
Repeat
UpdateFrameTimer()
If KeyDown(cbkeyleft) Then TurnObject cannon,PxPerSec(120)
If KeyDown(cbkeyright) Then TurnObject cannon,PxPerSec(-120)
If ObjectAngle(cannon) < 30 Then RotateObject cannon, 30
If ObjectAngle(cannon) > 150 Then RotateObject cannon, 150
If KeyHit(cbkeyspace) Then
NewBullet.BULLETS = New(BULLETS)
NewBullet\obj = CloneObject(bullet)
PositionObject NewBullet\obj,0,-160
RotateObject NewBullet\obj,ObjectAngle(cannon)
MoveObject NewBullet\obj,24
SetupCollision NewBullet\obj,map,2,4,2
EndIf
For iBULLET.BULLETS = Each BULLETS
Del = 0
MoveObject iBullet\obj,PxPerSec(240)
// LISÄTÄÄN SAVUA
// X, Y, Kulma, Partikkelien määrä, Liikenopeus, MaxKoko, MinKoko, Pienenemisen nopeus
X = ObjectX(iBullet\obj) // Mihin kohtaan savua luodaan, X
Y = ObjectY(iBullet\obj) // Mihin kohtaan savua luodaan, Y
ANGLE = ObjectAngle(iBullet\obj) // Missä kulmassa savu on, eli mihin suuntaan se liikkuu
AMOUNT = PxPerSec(160) // Montako savupartikkelia luodaan (esim. 160 sekunnissa)
MIN_SPEED = 40 // Millä nopeudella savupartikkelit liikkuvat, minimi
MAX_SPEED = 50 // Millä nopeudella savupartikkelit liikkuvat, maksimi
MAX_SIZE = 10 // Mikä on luotujen savupartikkelien maksimikoko
MIN_SIZE = 5 // Mikä on luotujen savupartikkelien minimikoko
SIZE_DECREASE = 15 // Millä nopeudella savupartikkelit kutistuvat (esim. 15 pikseliä sekunnissa)
OFFSET = 3 // Paljonko luotujen savupartikkelien sijaintia sekoitetaan (jotta kaikki X luotua partikkelia eivät ole ihan samassa kohtaa)
OFFSET2 = 5 // Paljonko partikkelit sekoittavat kuvaa
ANGOFF = 25 // Paljonko yksittäisen partikkelin kulma voi poiketa annetusta kulmasta (jotta kaikki X luotua partikkelia eivät ole ihan samassa kulmassa)
DELSIZE = 3 // Kuinka pieneksi partikkeli saa kutistua, ennen kuin se poistetaan
AddSmoke(X, Y, ANGLE, AMOUNT, MIN_SPEED, MAX_SPEED, MAX_SIZE, MIN_SIZE, SIZE_DECREASE, OFFSET, OFFSET2, ANGOFF, DELSIZE)
If CountCollisions(iBullet\obj) Then Del = 1
If Del = 1 Then DeleteObject iBullet\obj : Delete iBullet
Next iBULLET
DrawGame
UpdateSmoke()
DrawScreen
Forever
Function AddSmoke(X,Y,ANG,AMOUNT,MIN_SPEED,MAX_SPEED,MAXSIZE,MINSIZE,SPEED2,OFFSET,OFFSET2,ANGOFF = 25, DELSIZE = 2)
For I = 1 To AMOUNT
NewSmoke.SMOKE = New(SMOKE)
NewSmoke\X = X + Rand(-OFFSET,OFFSET)
NewSmoke\Y = Y + Rand(-OFFSET,OFFSET)
NewSmoke\ANG = ANG + Rand(-ANGOFF,ANGOFF)
NewSmoke\SIZE = Rand(MINSIZE,MAXSIZE)
NewSmoke\OFFX = Rand(-OFFSET2,OFFSET2)
NewSmoke\OFFY = Rand(-OFFSET2,OFFSET2)
NewSmoke\SPEED = Rand(MIN_SPEED,MAX_SPEED)
NewSmoke\SPEED2 = SPEED2
NewSmoke\DELSIZE = DELSIZE
Next I
EndFunction
Function UpdateSmoke()
SWCX = ScreenWidth()/2-CameraX()
SWCY = ScreenHeight()/2+CameraY()
Color 32,32,32
For iSmoke.SMOKE = Each SMOKE
X = iSmoke\X-(ISmoke\Size/2)
Y = iSmoke\Y-(ISmoke\Size/2)
Dot X+SWCX,-Y+SWCY // Tämän voi vapaasti poistaa
CopyBox Int(X+SWCX - iSmoke\OffX),Int(-Y+SWCY - iSmoke\OffY),Int(iSmoke\SIZE),Int(iSmoke\SIZE),X, -Y, SCREEN(),SCREEN()
iSmoke\X = iSmoke\X + Cos(iSmoke\ANG)*PxPerSec(iSmoke\SPEED)
iSmoke\Y = iSmoke\Y + Sin(iSmoke\ANG)*PxPerSec(iSmoke\SPEED)
iSmoke\SIZE = iSmoke\SIZE - PxPerSec(iSmoke\SPEED2)
If iSmoke\SIZE < iSmoke\DELSIZE Then Delete iSmoke
Next iSmoke
EndFunction
Last edited by Ruuttu on Sun Jan 24, 2010 6:25 pm, edited 1 time in total.
Re: Efektit
Pyöritetään nyt ihmeessä lisää.Requiem for Anthrax wrote:No oli minunkin pakko hieaman pyörittää tota.Jare wrote: Pakkohan mun oli laittaa tuo pyörimään:
Code: Select all
rotate=0
movement=0
Repeat
rotate+1
movement+1
If movement=360 Then movement=0
For n = 1 To 800
Color 127-90*Cos(n*137.5-rotate), 127+90*Cos(n*137.5+rotate*n), 190+(n/800.0*190)
If n<400 Then
Circle 200+4.5*Sqrt(n)*Cos(n*137.5+rotate)*Tan(movement)+Cos(rotate)*200, 150+4.5*Sqrt(n)*Sin(n*137.5+rotate-movement*6)*Tan(movement)-Sin(rotate)*200, 4
ElseIf n>=400 And n<=600 Then
Circle 200+4.5*Sqrt(n)*Cos(n*137.5+rotate-movement)*Tan(movement)+Cos(rotate)*200, 150-4.5*Sqrt(n)*Sin(n*137.5+rotate)*Tan(movement)-Sin(rotate)*200, 4
Else
Circle 200-4.5*Sqrt(n)*Cos(n*137.5+rotate+movement*2)*Tan(movement)+Cos(rotate)*200, 150+4.5*Sqrt(n)*Sin(n*137.5+rotate)*Tan(movement)-Sin(rotate)*200, 4
EndIf
Next n
DrawScreen
Forever
Re: Efektit
Koodaajan ansiosta opin vähän kolmedeetä, ja minun ansiostani saatte tällaisen hienon kuution mitä heitellä ympäriinsä. Käännä kameraa WASDista(R resetoi), hiiren rullalla liikut edemmäs/kauemmas ja vektoreista voit tarttua hiirellä.
Code: Select all
SCREEN 800,600
Const screenwd2 = 400
Const screenhd2 = 300
Const GRAVITY = 0.1
Const _curX = 5
Const _curY = 6
Const _curZ = 7
Const _preX = 8
Const _preY = 9
Const _preZ = 10
Dim vect(11,10) As Float
Dim tri(11,4) As Integer
Dim distances(7,7) As Float
settri(0,0,4,2):settri(1,0,1,4):settri(2,0,2,1):settri(3,6,2,4):settri(4,6,4,7):settri(5,6,7,2)
settri(6,3,7,1):settri(7,3,1,2):settri(8,3,2,7):settri(9,5,1,7):settri(10,5,4,1):settri(11,5,7,4)
For i = 0 To 7
vect(i,0) = -20 + 40*(i<4)
vect(i,1) = -20 + 40*((i Mod 2) = 0)
vect(i,2) = -20 + 40*( i = 0 Or i = 1 Or i = 4 Or i = 5 )
vect(i,_curX) = vect(i,0)
vect(i,_curY) = vect(i,1)
vect(i,_curZ) = vect(i,2)
vect(i,_preX) = vect(i,0)
vect(i,_preY) = vect(i,1)
vect(i,_preZ) = vect(i,2)
Next i
For i = 8 To 11
vect(i,0) = 90 - 180 * (i = 8 Or i = 11)
vect(i,1) = -90
vect(i,2) = 90 - 180 * (i = 10 Or i = 11)
vect(i,_curX) = vect(i,0)
vect(i,_curY) = vect(i,1)
vect(i,_curZ) = vect(i,2)
Next i
For i = 0 To 7
For i2 = 0 To 7
distances(i,i2) = Sqrt((vect(i,0)-vect(i2,0))^2 + (vect(i,1)-vect(i2,1))^2 + (vect(i,2)-vect(i2,2))^2)
Next i2
Next i
Function SetTri(i,v1,v2,v3)
tri(i,0) = v1
tri(i,1) = v2
tri(i,2) = v3
End Function
Function project(i)
p_s# = (1/vect(i,2))*screenwd2
vect(i,3) = (vect(i,0) * p_s#) + screenwd2
vect(i,4) = (vect(i,1) * p_s#) + screenhd2
End Function
Function rotate( i, x#, y#, z#, ang# )
sin_a# = Sin( ang/2 )
qx# = x * sin_a
qy# = y * sin_a
qz# = z * sin_a
qw# = Cos( ang/2 )
xx# = (vect(i,0) * (1 -(2 * (qy^2)) -(2 * (qz^2)) )) + (vect(i,1) * (2 * qx * qy - 2 * qz * qw)) + (vect(i,2) * (2 * qx * qz + 2 * qy * qw))
yy# = (vect(i,0) * (2 * qx * qy + 2 * qz * qw)) + (vect(i,1) * (1 -(2 * (qx^2)) -(2 * (qz^2)) )) + (vect(i,2) * (2 * qy * qz - 2 * qx * qw))
zz# = (vect(i,0) * (2 * qx * qz - 2 * qy * qw)) + (vect(i,1) * (2 * qy * qz + 2 * qx * qw)) + (vect(i,2) * (1 -(2 * (qx^2)) -(2 * (qy^2)) ))
vect(i,0) = xx
vect(i,1) = yy
vect(i,2) = zz
End Function
Function CalculateNewVectorPosition(i)
For p = 5 To 7
temp# = vect(i, p)
vect(i, p) = 2 * vect(i, p) - (vect(i, p + 3) + (vect(i, p)-vect(i, p + 3)) * 0.01 ) - GRAVITY * (p = 6)
vect(i, p + 3) = temp#
Next p
EndFunction
Function SustainDistance(i,i2,distanceToSustain#)
xDist# = (vect(i,_curX) - vect(i2,_curX))
yDist# = (vect(i,_curY) - vect(i2,_curY))
zDist# = (vect(i,_curZ) - vect(i2,_curZ))
curDist# = Sqrt(xDist#^2+yDist#^2+zDist#^2)
multiplier# = (curDist# - distanceToSustain#) / curDist#
vect(i,_curX) = vect(i,_curX) - xDist# * 0.5 * multiplier#
vect(i,_curY) = vect(i,_curY) - yDist# * 0.5 * multiplier#
vect(i,_curZ) = vect(i,_curZ) - zDist# * 0.5 * multiplier#
vect(i2,_curX) = vect(i2,_curX) + xDist# * 0.5 * multiplier#
vect(i2,_curY) = vect(i2,_curY) + yDist# * 0.5 * multiplier#
vect(i2,_curZ) = vect(i2,_curZ) + zDist# * 0.5 * multiplier#
EndFunction
Color cbWhite
position# = 150 //viewing distance
Repeat
xang = WrapAngle(xang + KeyDown(31) - KeyDown(17))
yang = WrapAngle(yang + KeyDown(30) - KeyDown(32))
zang = WrapAngle(zang + KeyDown(18) - KeyDown(16))
position# = position# - MouseMoveZ() * 10
If KeyHit(cbKeyR) Then xang = 0 : yang = 0 : zang = 0 : position = 150
For i = 0 To 11
vect(i,0) = vect(i,5)
vect(i,1) = vect(i,6)
vect(i,2) = vect(i,7)
Next i
For i = 0 To 7
rotate( i, 1, 0, 0, xang )
rotate( i, 0, 1, 0, yang )
rotate( i, 0, 0, 1, zang )
vect(i,2) = vect(i,2) - position#
project(i)
vect(i,2) = vect(i,2) + position#
Next i
//viivat
Lock
For i = 0 To 11
If (((vect(tri(i,1),3) - vect(tri(i,0),3) ) * (vect(tri(i,2),4) - vect(tri(i,0),4)) - (vect(tri(i,2),3) - vect(tri(i,0),3)) * (vect(tri(i,1),4) - vect(tri(i,0),4))) <= 0) Then
Line vect(tri(i,0),3), vect(tri(i,0),4), vect(tri(i,1),3), vect(tri(i,1),4)
Line vect(tri(i,1),3), vect(tri(i,1),4), vect(tri(i,2),3), vect(tri(i,2),4)
Line vect(tri(i,2),3), vect(tri(i,2),4), vect(tri(i,0),3), vect(tri(i,0),4)
EndIf
Next i
Unlock
For i = 0 To 7
s = Max((vect(i,2)+100) / 20 / (position#/400),1)
'Circle vect(i,3) - s * 0.5, vect(i,4) - s * 0.5, s
'Text vect(i,3), vect(i,4), i
If Distance(MouseX(),MouseY(),vect(i,3), vect(i,4)) < s Then
Circle vect(i,3) - s, vect(i,4) - s, s * 2, 0
If MouseDown(1) And moving = 0 Then moved = i : moving = 1
EndIf
If moved = i And moving = 1 Then
vect(i,_curX) = vect(i,_curX) + (vect(i,3)-MouseX()) * (position#/400) * Cos(yang) * 0.1
vect(i,_curZ) = vect(i,_curZ) + (vect(i,3)-MouseX()) * (position#/400) * Sin(yang) * 0.1
vect(i,_curY) = vect(i,_curY) + (vect(i,4)-MouseY()) * (position#/400) * Cos(xang) * 0.1
If MouseDown(1) = 0 Then moving = 0
EndIf
//lasketaan seuraavat koordinaatit
CalculateNewVectorPosition(i)
If Abs(vect(i,_curY)) > 90 Then //LATTIAAN KITKA
vect(i,_curX) = vect(i,_curX) - (vect(i,_curX) - vect(i,_preX))* 0.1
vect(i,_curZ) = vect(i,_curZ) - (vect(i,_curZ) - vect(i,_preZ))* 0.1
EndIf
If Abs(vect(i,_curX)) > 90 Then //SIVUSEINIIN KITKA
vect(i,_curY) = vect(i,_curY) - (vect(i,_curY) - vect(i,_preY))* 0.1
vect(i,_curZ) = vect(i,_curZ) - (vect(i,_curZ) - vect(i,_preZ))* 0.1
EndIf
If Abs(vect(i,_curZ)) > 90 Then //ETU- JA TAKASEINÄÄN KITKA
vect(i,_curX) = vect(i,_curX) - (vect(i,_curX) - vect(i,_preX))* 0.1
vect(i,_curY) = vect(i,_curY) - (vect(i,_curY) - vect(i,_preY))* 0.1
EndIf
vect(i,_curX) = Min(Max(vect(i,_curX),-90),90)
vect(i,_curY) = Min(Max(vect(i,_curY),-90),90)
vect(i,_curZ) = Min(Max(vect(i,_curZ),-90),90)
Next i
For i = 0 To 7 //sidokset
For i2 = i + 1 To 7
If i <> i2 Then SustainDistance(i,i2,distances(i,i2))
Next i2
Next i
For i = 8 To 11
rotate( i, 1, 0, 0, xang )
rotate( i, 0, 1, 0, yang )
rotate( i, 0, 0, 1, zang )
vect(i,2) = vect(i,2) - position#
project(i)
vect(i,2) = vect(i,2) + position#
Next i
For i = 8 To 11
i2 = i + 1
If i = 11 Then i2 = 8
Line vect(i,3), vect(i,4), vect(i2,3), vect(i2,4)
Next i
DrawScreen
Forever
EDIT:
Korjattu
Last edited by Substance on Thu Jan 28, 2010 9:00 pm, edited 2 times in total.
Re: Efektit
Amazing physics. Very nice... and so on...LittleGreen wrote:Koodaajan ansiosta opin vähän kolmedeetä, ja minun ansiostani saatte tällaisen hienon kuution mitä heitellä ympäriinsä. Käännä kameraa WASDista(R resetoi), hiiren rullalla liikut edemmäs/kauemmas ja vektoreista voit tarttua hiirellä.
Mutta kyllä, tuo on hieno. Paljon en kyllä testaillut. Tuli muuta.
Last edited by Viltzu on Thu Jan 28, 2010 9:02 pm, edited 1 time in total.
Re: Efektit
Wau, On kyllä hienoLittleGreen wrote:Koodaajan ansiosta opin vähän kolmedeetä, ja minun ansiostani saatte tällaisen hienon kuution mitä heitellä ympäriinsä. Käännä kameraa WASDista(R resetoi), hiiren rullalla liikut edemmäs/kauemmas ja vektoreista voit tarttua hiirellä.
Re: Efektit
Oikeastaan vektoreiden sidokset olivat ihan väärin , mutta nyt fysiikat on korjattu ja kuutio käyttäytyy luontevammin.
Re: Efektit
Mahtava! Vilpittömimmät onnitteluni.LittleGreen wrote:Koodaajan ansiosta opin vähän kolmedeetä...
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: Efektit
Kas, sehän on varsin komea viritelmä, itse en ole koskaan jaksanut 3D-physiikkaa CB:llä tehdä vaikka silloin tällöin olen ajatellut. Fiktiivinen hatunnosto.
Re: Efektit
Vau.LittleGreen wrote:Koodaajan ansiosta opin vähän kolmedeetä, ja minun ansiostani saatte tällaisen hienon kuution mitä heitellä ympäriinsä. Käännä kameraa WASDista(R resetoi), hiiren rullalla liikut edemmäs/kauemmas ja vektoreista voit tarttua hiirellä.Code: Select all
..blöllöö..
EDIT:Korjattu
-On selkeästi impulsiivinen koodaaja joka...
-
- Devoted Member
- Posts: 594
- Joined: Tue Sep 30, 2008 4:30 pm
- Location: Ruudun toisella puolella
Re: Efektit
Ei että, mitäköän tästä tulee jos jo ennen CBClassicia tällasia tedään, en uskalla ees kuvitella! WAULittleGreen wrote:Koodaajan ansiosta opin vähän kolmedeetä, ja minun ansiostani saatte tällaisen hienon kuution mitä heitellä ympäriinsä...