Re: Offtopic (I/2012)
Posted: Mon Jan 16, 2012 7:23 am
Järjestäkää pois vaan, ainakin minun puolesta. Ei olla mitään aihetta tai muutakaan keksitty (oikeastaan ei olla edes mietitty). Hyvä idea tuo kuukauden etuaika.
Itse tykkään käyttää wintoosaalla mielummin WampServeriä. Onkos muilla mielipiteitä siitä että kumpi on parempi, XAMPP vai WampServer? Jälkimmäinen on omasta mielestäni ainakin kätevämpi ja sopivasti yksinkertaisempi. XAMPP vaatii omasta mielestäni turhaa säätöä ennen kuin oikeasti pääset jotain tekemään. WampServerissä myös konfiguraatio ja Apachen moduuleiden lisääminen/poistaminen tapahtuu kivuttomasti. Varsinkin jos kaipaa vain Apachea, PHP:ta ja MySQL-tietokantaa niin WampServer on hyvä ratkaisu — XAMPP on vähän bloatti.Feuer wrote:-- XAMPP --
Itse olen Windowsin puolella käyttänyt XAMPP:ia ihan onnistuneesti, mutta suurinta turhautumista aiheutti .htaccess tiedostojen puute (Windows ei hyväksy pisteellä alkavia tiedostonimiä enkä löytänyt Apachen asetustiedostoista oikeaa vipua). Paras on kuitenkin oma Linux-serveri, sillä sinne voi asennella mitä vaan eikä tarvitse tehdä mitään kompromisseja ohjelmistojen suhteen 8)VesQ wrote:-- Onkos muilla mielipiteitä siitä että kumpi on parempi, XAMPP vai WampServer?--
Tallenna nimellä → .htaccess → successCCE wrote:Windows ei hyväksy pisteellä alkavia tiedostonimiä
Kyllä, dev-puolen sivut ovat tällä hetkellä Node:lla ja MySQL-kannassa ja normit toimaavat suoraan AJAXilla tiedostoista (eli eivät toimaa ilman JavaScriptiä kuten devit). Pitäisi jaksaa jossain vaiheessa väsätä nuo uusiksi ja laittaa kunnon projektisivu ja galleria-systeemit, mutta jostain syystä inspiraatiota tulee hyvin harvoin, kun on muistakin kivoja projekteja työn alla. ;-)naputtelija wrote:Tuhiksella mahtava kotisivu. Itsekkö teit?
Tämä on hyvä idea. Viikkokisaan voisi lisätä samanlaisen sääntömuutoksen. Vuoden projekti -kilpailussa vastaavanlaisen säännön variaatio onkin jo käytössä, ja muita kilpailuja joissa palkintona on seuraavan kisan järjestämisoikeus ei taida ollakaan (ei ainakaan ole ollut viime aikoina edes yhtä aktiivisia kuin viikko- ja pikapelikisa).axu wrote:Aionkin lisätä sääntöihin muutoksen, että kilpailun voittajalla on vain kuukauden ajan etu pitää seuraava kisa, sen jälkeen kuka tahansa innokas voi kääriä hihansa ja rukata seuraavan kisan - näitä pitkiä taukoja on aivan liian paljon.
Code: Select all
Position3DCamera -3, -10, 0
Rotate3DCamera 30, 90, 0 //30 astetta globaalilla Y-akselilla, 90 astetta ylös/alas -suunnassa, kierto 0 astetta
Triangle3D -5, 0, 0, 0, 10, 10, 5, 0, 0
Drawscreen
Kiva kuulla, että ainakin jonkinlaista helpotusta tulee todennäköisesti tähänkin ohjelmoinnin osa-alueeseen. Väärät nimet kyllä häiritsevät minua, vaikka eivät näkyisikään ulospäin. Pidän CB:tä erittäin hyvänä juuri tuon aloittamisen helppouden vuoksi, ja se on yleensä suuri tekijä, kun päätän mitä ohjelmointikieltä käytän seuraavaan projektiin. Alle minuutin saa jo näkymään jotainkoodaaja wrote:Eiköhän BASIC-kielessä näytönohjaimen säätelyt ynnä muut sisällytetä ihan runtimeen ja laitteistokiihdytyksen päälle kytkeminen on joko yksi komento tai parametri screenille. Ja et ikinä tule oikeasti haluamaan 3D-pyöritystä kulmilla koska ne eivät yksinkertaisesti toimi, keskimääräiseen sovellukseen paras idea on funktio, jolle annetaan parametreiksi mistä katsotaan, mihin katsotaan ja mikä suunta on ylös. "Lookat" on tällaisen funkkarin tyypillisin nimi.
Nimiongelma on ikuinen, mutta projekteihinhan voi käyttää vaikka hedelmien nimiä ja muutella .exen ja muiden nimet vasta julkaisussa - ei niillä ole muuta väliä kuin että itse tunnistaa mistä oli kyse. Ei tosin liene ongelma tehdä CB:hen jonkunlaista "aloita tyhjältä pöydältä oletusasetuksilla hetinyt" -modea joka vastaisi nykyistä toimintamallia.
Ja kyllähän se yhden kolmion piirtäminen vaatii jokusen pätkän koodia, mutta samalla pätkällä voikin sitten paria parametria (ja verteksitaulun generointia) muuttamalla piirtää niin paljon kolmioita kuin haluaa varsin simppelisti. Lisäksi saa heitellä käskynsä suoraan näytönohjaimelle joten saa tehtyä täsmälleen mitä haluaa, se toimii nopeasti ja on loppujen lopuksi riittävän selkeää.
Code: Select all
SCREEN 500, 500
//Include "cb3DListed.cb"
Global CamX#, CamY#, CamZ#, CamA#, CamP#, CamR#
Global ZPROJ#
ZPROJ = 270.0
Global ScreenWd2, ScreenHd2
ScreenWd2 = ScreenWidth() / 2 : ScreenHd2 = ScreenHeight() / 2
Type Line3D
Field X1#
Field Y1#
Field Z1#
Field X2#
Field Y2#
Field Z2#
Field ColR
Field ColG
Field ColB
EndType
Type Dot3D
Field X#
Field Y#
Field Z#
Field Pixel
EndType
Function AddDot(X#, Y#, Z#)
nD.Dot3D = New(Dot3D)
nD\X = X : nD\Y = Y : nD\Z = Z
nD\Pixel = getRGB(BLUE) + (getRGB(GREEN) Shl 8) + (getRGB(RED) Shl 16) - 16777216
Return ConvertToInteger(nD)
EndFunction
Function AddLine(X1#, Y1#, Z1#, X2#, Y2#, Z2#)
nL.Line3D = New(Line3D)
nL\X1 = X1 : nL\Y1 = Y1 : nL\Z1 = Z1
nL\X2 = X2 : nL\Y2 = Y2 : nL\Z2 = Z2
nL\ColR = getRGB(RED) : nL\ColG = getRGB(GREEN) : nL\ColB = getRGB(BLUE)
Return ConvertToInteger(nL)
EndFunction
Function Draw3D()
Lock
For iL.Line3D = Each Line3D
a# = GetAngle(0, 0, iL\X1 - CamX, iL\Z1 - CamZ)
d# = Distance(0, 0, iL\X1 - CamX, iL\Z1 - CamZ)
X1# = Cos(a# - CamA) * d#
Z1# =-Sin(a# - CamA) * d#
a# = GetAngle(0, 0, iL\X2 - CamX, iL\Z2 - CamZ)
d# = Distance(0, 0, iL\X2 - CamX, iL\Z2 - CamZ)
X2# = Cos(a# - CamA) * d#
Z2# =-Sin(a# - CamA) * d#
a# = GetAngle(0, 0, Z1#, iL\Y1 - CamY)
d# = Distance(0, 0, Z1#, iL\Y1 - CamY)
Z1# = Cos(a# - CamP) * d#
Y1# =-Sin(a# - CamP) * d#
a# = GetAngle(0, 0, Z2#, iL\Y2 - CamY)
d# = Distance(0, 0, Z2#, iL\Y2 - CamY)
Z2# = Cos(a# - CamP) * d#
Y2# =-Sin(a# - CamP) * d#
a# =-GetAngle(0, 0, X1#, Y1#)
d# = Distance(0, 0, X1#, Y1#)
X1# = Cos(a# - CamR) * d#
Y1# = Sin(a# - CamR) * d#
a# =-GetAngle(0, 0, X2#, Y2#)
d# = Distance(0, 0, X2#, Y2#)
X2# = Cos(a# - CamR) * d#
Y2# = Sin(a# - CamR) * d#
If Z1# > 0 Or Z2# > 0 Then
Z1# = Max(1, Z1#) / ZPROJ
X1# = (X1# / Z1#) + ScreenWd2
Y1# =-(Y1# / Z1#) + ScreenHd2
Z2# = Max(1, Z2#) / ZPROJ
X2# = (X2# / Z2#) + ScreenWd2
Y2# =-(Y2# / Z2#) + ScreenHd2
Color iL\ColR, iL\ColG, iL\ColB
Line X1#, Y1#, X2#, Y2#
EndIf
Next iL
For iD.Dot3D = Each Dot3D
a# = GetAngle(0, 0, iD\X - CamX, iD\Z - CamZ)
d# = Distance(0, 0, iD\X - CamX, iD\Z - CamZ)
X1# = Cos(a# - CamA) * d#
Z1# =-Sin(a# - CamA) * d#
a# = GetAngle(0, 0, Z1#, iD\Y - CamY)
d# = Distance(0, 0, Z1#, iD\Y - CamY)
Z1# = Cos(a# - CamP) * d#
Y1# =-Sin(a# - CamP) * d#
a# =-GetAngle(0, 0, X1#, Y1#)
d# = Distance(0, 0, X1#, Y1#)
X1# = Cos(a# - CamR) * d#
Y1# = Sin(a# - CamR) * d#
If Z1# > 0 Then
Z1# = Max(1, Z1#) / ZPROJ
X1# = Int( (X1# / Z1#) + ScreenWd2)
Y1# = Int(-(Y1# / Z1#) + ScreenHd2)
If X1# > 0 And Y1# > 0 And X1# < ScreenWd2*2 - 1 And Y1# < ScreenHd2*2 Then PutPixel2 X1#, Y1#, iD\Pixel
EndIf
Next iD
Unlock
EndFunction
Function MoveCamera3D(cX#, cY#, cZ#)
CamX = CamX + Cos(CamA) * cX - Cos(CamP) * Sin(CamA) * cZ + Sin(CamP) * Sin(CamA) * cY
CamY = CamY + Sin(CamP) * cZ + Cos(CamP) * cY
CamZ = CamZ - Sin(CamA) * cX - Cos(CamP) * Cos(CamA) * cZ + Sin(CamP) * Cos(CamA) * cY
End Function
//-----
For i = 1 To 4000
L = Rand(200, 250)
Color L, L, L
'AddLine(Rand(-300, 300), Rand(-300, 300), Rand(-300, 300), Rand(-300, 300), Rand(-300, 300), Rand(-300, 300))
AddDot(Rand(-500, 500), Rand(-500, 500), Rand(-500, 500))
Next i
For i = 1 To 36
Color 128, 128, 255
AddLine(Cos(i*10) * 1500, -500, Sin(i*10) * 1500, Cos((i + 1)*10) * 1500, -500, Sin((i + 1)*10) * 1500)
AddLine(Cos(i*10) * 1500, -500, Sin(i*10) * 1500, Cos(i*10) * 1000, -300, Sin(i*10) * 1000)
AddLine(Cos(i*10) * 1000, -300, Sin(i*10) * 1000, Cos((i + 1)*10) * 1000, -300, Sin((i + 1)*10) * 1000)
Next i
Dim SpeedX#, SpeedY#, SpeedZ#
'DrawToWorld ON
Repeat
SpeedX = (SpeedX + (KeyDown(cbKeyD)-KeyDown(cbKeyA)) * 2) * 0.8
SpeedY = (SpeedY + (KeyDown(cbKeyQ)-KeyDown(cbKeyE)) * 2) * 0.8
SpeedZ = (SpeedZ + (KeyDown(cbKeyS)-KeyDown(cbKeyW)) * 2) * 0.8
MoveCamera3D(SpeedX, SpeedY, SpeedZ)
CamA = CamA + (KeyDown(cbKeyPgDown)-KeyDown(cbKeyDel))*2
CamP = CamP + (KeyDown(cbKeyEnd)-KeyDown(cbKeyHome))*2
CamR = CamR + (KeyDown(cbKeyInsert)-KeyDown(cbKeyPgUp))*3
MMX = MouseMoveX()
MMY = MouseMoveY()
MMZ = MouseMoveZ()
MoveCamera3D(-MMX*MouseDown(1), MMY*MouseDown(1), MMY*MouseDown(3)*5)
ZPROJ = ZPROJ + MMZ*3
CamA = CamA + (MMX)*MouseDown(2)
CamP = CamP + (MMY)*MouseDown(2)
If MouseDown(1) Or MouseDown(2) Or MouseDown(3) Then PositionMouse 250, 250
CamP = Min(70, Max(-70, CamP))
CamR = CurveValue(0, CamR, 20)
For iD.Dot3D = Each Dot3D //Tehdään maisema looppaavaksi
If iD\X < CamX - 500 Then iD\X = iD\X + 1000
If iD\X > CamX + 500 Then iD\X = iD\X - 1000
If iD\Y < CamY - 500 Then iD\Y = iD\Y + 1000
If iD\Y > CamY + 500 Then iD\Y = iD\Y - 1000
If iD\Z < CamZ - 500 Then iD\Z = iD\Z + 1000
If iD\Z > CamZ + 500 Then iD\Z = iD\Z - 1000
Next iD
Draw3D()
Text 0, 0, "ASDWQE liikuttaa kameraa"
Text 0, 10, "Ins, del, home, rnd, pgup ja pgdown kääntää kameraa"
Text 0, 20, "Kokeile myös raahata hiirellä"
SetWindow "FPS: " + FPS()
DrawScreen
Forever
Joo ovat hienot sivut, mutta kun painaa siirry taaksepäin -nappia, niin sivustolta ei pääse enää pois. Pitää sulkea välilehti ja avata foorumit uudestaan. o_Otuhoojabotti wrote:Kyllä, dev-puolen sivut ovat tällä hetkellä Node:lla ja MySQL-kannassa ja normit toimaavat suoraan AJAXilla tiedostoista (eli eivät toimaa ilman JavaScriptiä kuten devit). Pitäisi jaksaa jossain vaiheessa väsätä nuo uusiksi ja laittaa kunnon projektisivu ja galleria-systeemit, mutta jostain syystä inspiraatiota tulee hyvin harvoin, kun on muistakin kivoja projekteja työn alla.naputtelija wrote:Tuhiksella mahtava kotisivu. Itsekkö teit?
Hän on muuan (minun silmissäni ainakin) super taitava koodari, ainakin hänen coolbasic tuotoksistaan päätellen. Tulikin mieleeni juuri tuosta, kun sitä joku aikaisemminkin taisi kysellä, että onko Grandi jättänyt foorumit kokonaan? Ja sitten vielä omastakin puolesta seancarrionille, että kannattaa miettiä kuinka paljon postailee, tai oikeamminkin miettii viestien sisältöä, sillä eihän määrällä niinkään väliä, jos sisällön laatu pysyy riittävän korkealla. Niin ja kysynpähän vielä tässä samassa, että tuleeko blogiposteja vielä myöhemmin, kun cbc edistyy? Nykyisellä etusivulla on toki kerrottu nykyisestä tilanteesta kattavasti, mutta olisi mukavaa saada tarkempaa tietoa etenemisestä.seancarrion wrote:Kuka on tämä "legendaarinen" Aavesoturi? On tullu seurattua cb foorumia ei reiksetöityneena vuodesta 2009, ja olen monesti huomannnut jotain tällaista;Aavesoturi wrote:Aika hauska. Tosin jos lisäät plää plää plää funktion, niin plää plää plää.Kuka tuo mystinen henkilö mahtaa olla?Ihminen wrote:Legendaarin Aavesoturi is back!
Ahaa, siitä siis on kysymys. Itse olen hahmottanut nuo kääntösuunnat päässäni tällälailla, joten tämä vain tuntuu luonnolliselta. Johtunee Trackmanian kanssa pelleilystä, sillä siinä ainakin kameran kulma ilmoitetaan juuri näin. Miten yleensä kerrotaan, mikä suunta on "ylöspäin"? Jonkinlaisella vektorilla, vai?koodaaja wrote:Ne lakkaavat toimimasta kun käännetään kaikkien kolmen akselin ympäri. Esimerkissäsi painamalla Page Up:n ja Homen sekä Endin pohjaan huomannet itsekin, että alunperin pystysuunnassa kääntäneet näppäimet kääntävät kameraa nyt vaakasuunnassa.
Ylöspäin vektori on yleensä (0,1,0). Aivan täsmälleen ylöspäin tai alaspäin ei voi katsoa tuollaisella ylöspäin vektorilla, mutta muuten ajaa asiansa lähes joka tilanteessa ilman minkäänlaisia pyörittelyitäkin.axu wrote: Ahaa, siitä siis on kysymys. Itse olen hahmottanut nuo kääntösuunnat päässäni tällälailla, joten tämä vain tuntuu luonnolliselta. Johtunee Trackmanian kanssa pelleilystä, sillä siinä ainakin kameran kulma ilmoitetaan juuri näin. Miten yleensä kerrotaan, mikä suunta on "ylöspäin"? Jonkinlaisella vektorilla, vai?