Tyhmät kysymykset (I/2010)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset (I/2010)

Post by koodaaja »

Ei. Display list vastaa sitä että piirtäisit näytölle joka frame samat komennot kuin mitä siihen beginlistin ja endlistin väliin määrität. Eli display list voi sisältää vaikka miljuunia kolmioita, jos haluat.

Tuossa pätkässä asetat joka ikiselle kolmiolle oman matriisin, mikä aiheuttaa valtavan hitauden.

Ja niiden päällekkäisyys ei nopeuta tuota juuri lainkaan, ellei sinulla ole valtavan monimutkaista fragment shaderia jossain kätkössä.

Pistetäänpä vielä esimerkkinä joskus cbGL:ää kokeillessani tekemäni kleinin pullo. Tähän suuntaan kehitä jotain, mutta ei näin monimutkaista kaavaa, ettei esilaskenta kasva tuhottoman pitkäksi. Voisihan tuota display listiäkin tietty loopissa piirrustaa.

Code: Select all

Include "glConsts.cb"
Include "cbGL.cb"

cbglInit(640, 480)

' ReSizeGLScene
cbgl4i(glViewport, 0, 0, 640, 480)
cbgl1i(glMatrixMode, GL_PROJECTION)
cbgl0(glLoadIdentity)
cbgl4f(gluPerspective, 45.0, Float(640)/Float(480), 0.1, 100.0)
cbgl1i(glMatrixMode, GL_MODELVIEW)
cbgl0(glLoadIdentity)

cbgl1i(glShadeModel, GL_SMOOTH)
cbgl4f(glClearColor, 0.0, 0.0, 0.0, 0.0)
cbgl1f(glClearDepth, 1.0)
cbgl1i(glEnable, GL_DEPTH_TEST)
cbgl1i(glDepthFunc, GL_LEQUAL)

Function getvert(u#, v#, num%)
    a# = Sqrt((Cos(u#)-Cos(2.0*u#))*(Cos(u#)-Cos(2.0*u#)) + (3.0*Sin(u#))*(3.0*Sin(u#)))
    r# = (1.0 + .2*Sin(u#))
    Select num
        Case 0: Return (Sin(u#) - 0.5 * Sin(2.0*u#)+3.0*r#*Sin(u#)*Cos(v#)/a#)
        Case 1: Return -(-3.0*Cos(u#) + r#*(Cos(2.0*u#)-Cos(u#))*Cos(v#)/a#)
        Case 2: Return (r#*Sin(v#))
    EndSelect
EndFunction

cbgl2i(glNewList, 1, GL_COMPILE)
    cbgl1i(glBegin, GL_TRIANGLES)
        
        u# = 0
        du# = 4
        dv# = 4
        Repeat
            v# = 0
            Repeat
                cbgl3f(glColor, .5*(1+Sin(u)), .5*(1+Sin(v)), .25(2+Cos(u)+Cos(v)))
                cbgl3f(glVertex, getvert(u, v, 0), getvert(u, v, 1), getvert(u, v, 2))
                cbgl3f(glVertex, getvert(u+du, v, 0), getvert(u+du, v, 1), getvert(u+du, v, 2))
                cbgl3f(glVertex, getvert(u, v+dv, 0), getvert(u, v+dv, 1), getvert(u, v+dv, 2))
                cbgl3f(glVertex, getvert(u+du, v+dv, 0), getvert(u+du, v+dv, 1), getvert(u+du, v+dv, 2))
                cbgl3f(glVertex, getvert(u+du, v, 0), getvert(u+du, v, 1), getvert(u+du, v, 2))
                cbgl3f(glVertex, getvert(u, v+dv, 0), getvert(u, v+dv, 1), getvert(u, v+dv, 2))
                v = v + dv
            Until v >= 360
            u = u + du
        Until u >= 360
        
        cbgl3f(glColor, 1.0, 0.0, 0.0)
        cbgl3f(glVertex, 0.0, 1.0, 0.0)
    cbgl0(glEnd)
cbgl0(glEndList)

SAFEEXIT OFF

Repeat
    cbgl1i(glClear, GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT)
    
    ang# = WrapAngle(ang#+0.2)
    
    cbgl0(glLoadIdentity)
    cbgl3f(glTranslate, 0.0, 0.0, -11.0)
    cbgl4f(glRotate, ang, 0.0, 1.0, 0.0)
    
    cbgl1i(glCallList, 1)
    
    cbglFlip()
    
Until cbglKeyDown(1)

cbglTerminate()
End
Pientä edittiä; kyllä ne pyörii vähän vanhemmillakin koneilla aivan hyvin, jos ei turhaan tee prosessorin ja näyttiksen välisestä väylästä pullonkaulaa.
Quru3
Newcomer
Posts: 16
Joined: Tue Feb 16, 2010 9:54 pm

Re: Tyhmät kysymykset (I/2010)

Post by Quru3 »

En tajuu tätä nyt-.- jos siellä displaylistissä menee 1kolmiolle joku 30rivii ja haluun 100 000 kolmiota?pitäs sitte kirjottaa se 30 rivii 100 000kertaa?
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset (I/2010)

Post by koodaaja »

You better be trolling. Jos et kokeillut tuota pätkää, et nähnyt, mutta se luo 16 200 kolmiota. Loopilla, kuten täällä on kerrottu sinulle jo ties kuinka monta kertaa. Display listissä voi siis olla ihan niin monta kolmiota kuin haluat.
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Tyhmät kysymykset (I/2010)

Post by JATothrim »

Aikaisemmasta keskustelusta päätellen Quru3:n olisi parasta jättää OpenGL piirtelyt hetkeksi, ja ymmärtää että cbgl on porttaus OpenGL grafiikka rajapinnasta CoolBasicille. CB:n sisään rakennetut piirtokomennot ovat muusia tämän rinnalla. OpenGL:n kanssa ei siis kannatane pelleillä kovin vapaasti, itselläni jäi kerran käännöksestä glEnd() kutsu pois ja koko näytönohjain ajureineen halttasi pahemman kerran. (löi kivat järjestelmävirheet näytölle! ;) ) Guru3 voisi hyvinkin käväistä täällä, netin parhaimmassa OpenGL tuto nurkassa. Hieno CB:n rajoituksen rikkomis näyte olisi varmaankin VBO käytössä + aalto demo CoolBasicilla. ;)
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.
Panzur
Newcomer
Posts: 32
Joined: Sat Jun 06, 2009 6:26 pm

Re: Tyhmät kysymykset (I/2010)

Post by Panzur »

Miten saan tehtyä musiikki soittimeeni tukemaan tavallisia soittolistoja ja ne sitte semmotteeseen listaan siihen ohjeman viereen niin kuin winampissa?
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by temu92 »

Koodaamalla sen tukemaan niitä. Ei se edelleenkään synny taiaomaisesti kirjoittamalla jokin komento.

Tutki millainen niiden playlistien tiedostoformaatti on.
jaahas
Advanced Member
Posts: 307
Joined: Fri Feb 05, 2010 11:36 pm
Location: Tornio

Re: Tyhmät kysymykset (I/2010)

Post by jaahas »

miten saan tehtyä sellasen pitkän listan esim. pitkän musiikki listan joten tarvitaan tollanen rulla niinkuin tässä foorumilla tuolla sivulla miten saan sellasen tehtyä?
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Viltzu »

jaahas wrote:miten saan tehtyä sellasen pitkän listan esim. pitkän musiikki listan joten tarvitaan tollanen rulla niinkuin tässä foorumilla tuolla sivulla miten saan sellasen tehtyä?
CBSDK:stä löytyy siihen funktio. List(id, x,y, leveys,korkeus, [vierityspalkki], [näppäinkontrollit])
EDIT:

Heitinpäs huvikseni myös cbSDK:n manuaalin nettiin.
http://viltzu.jouluserver.com/cbsdk

jaahas
Advanced Member
Posts: 307
Joined: Fri Feb 05, 2010 11:36 pm
Location: Tornio

Re: Tyhmät kysymykset (I/2010)

Post by jaahas »

Viltzu wrote:
jaahas wrote:miten saan tehtyä sellasen pitkän listan esim. pitkän musiikki listan joten tarvitaan tollanen rulla niinkuin tässä foorumilla tuolla sivulla miten saan sellasen tehtyä?
CBSDK:stä löytyy siihen funktio. List(id, x,y, leveys,korkeus, [vierityspalkki], [näppäinkontrollit])
EDIT:

Heitinpäs huvikseni myös cbSDK:n manuaalin nettiin.
http://viltzu.jouluserver.com/cbsdk

voitko laittaa linkin sen vierityspalkin ohjeisiin?
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Tyhmät kysymykset (I/2010)

Post by Jani »

jaahas wrote:
Viltzu wrote:
jaahas wrote:miten saan tehtyä sellasen pitkän listan esim. pitkän musiikki listan joten tarvitaan tollanen rulla niinkuin tässä foorumilla tuolla sivulla miten saan sellasen tehtyä?
CBSDK:stä löytyy siihen funktio. List(id, x,y, leveys,korkeus, [vierityspalkki], [näppäinkontrollit])
EDIT:

Heitinpäs huvikseni myös cbSDK:n manuaalin nettiin.
http://viltzu.jouluserver.com/cbsdk

voitko laittaa linkin sen vierityspalkin ohjeisiin?
http://viltzu.jouluserver.com/cbsdk/list.html
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
Nassi_Setä
Advanced Member
Posts: 281
Joined: Sat Jun 28, 2008 5:19 pm
Location: Hämeessä miä

Re: Tyhmät kysymykset (I/2010)

Post by Nassi_Setä »

Onko Distance:sta tarkempaa tai parempaa versiota?
Distance2 ei käy koska kyseessä ei ole objekti.
\../(-_-)\../ <---klick MyBrute Image
Jotain evilii on tekeillä....
Jonz

Re: Tyhmät kysymykset (I/2010)

Post by Jonz »

Nassi_Setä wrote:Onko Distance:sta tarkempaa tai parempaa versiota?
Distance2 ei käy koska kyseessä ei ole objekti.
Kyllähän Distance on ihan melko tarkka...
Etäisyydenhän voi laskea näin pythagoran lauseen avulla...

Distance# = sqrt( (x2-x1) * (x2-x1) + (y2-y1) * (y2-y1) )
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Viltzu »

Jonz wrote:
Nassi_Setä wrote:Onko Distance:sta tarkempaa tai parempaa versiota?
Distance2 ei käy koska kyseessä ei ole objekti.
Kyllähän Distance on ihan melko tarkka...
Etäisyydenhän voi laskea näin pythagoran lauseen avulla...

Distance# = sqrt( (x2-x1) * (x2-x1) + (y2-y1) * (y2-y1) )
Niin tai hieman lyhyemmin sqrt( (x2-x1) ^ 2 + (y2-y1) ^ 2 )
Sama asiahan kuitenkin ovat.
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Tyhmät kysymykset (I/2010)

Post by Jani »

En tiedä, että onko tämä oikea alue, mutta kysytään täällä.
Onko kellään cbkk:stalöytyviä ini-funktioita? Siellä taisi olla kaksi versiota, mutta se jossa on myös tallennusfunktiot.
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
otto90x
Advanced Member
Posts: 349
Joined: Mon Aug 27, 2007 9:00 pm
Location: Lapinjärvi, Finland
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by otto90x »

Löysin KilledWhalen tekemän lukufunktion ja tein kirjoitusfunktion, molemmat tukevat nimettäviä sektioita.

Code: Select all

iniWrite("f.txt","arvot","screenwidth","800")
iniWrite("f.txt","arvot","screenheight","600")
iniWrite("f.txt","tekstit","tervehdys","Hello World!")
iniWrite("f.txt","tekstit","leipäteksti","...")
iniWrite("f.txt","tekstit","lopetus","Goodbye!")

SCREEN inireadint("f.txt","arvot","screenwidth"),inireadint("f.txt","arvot","screenwidth")

Print inireadstring("f.txt","tekstit","tervehdys")
Print inireadstring("f.txt","tekstit","leipäteksti")
Print inireadstring("f.txt","tekstit","lopetus")
WaitKey 
if FileExists("f.txt") then DeleteFile "f.txt"

Function  iniWrite(file$,label$,name$,value$,CaseSensitive=0)
    namelen=Len(name$)
    
    If FileExists(file$) Then f=OpenToRead(file$) Else f=OpenToEdit(file$)
    
    f2=OpenToWrite(file$+"temp")
    
        While Not EOF(f)
        
        
            l$=ReadLine(f)
            
            rl$=l$
            l$=Trim(l$)
            
            If Not finish Then 
    
                lines=lines+1
                
                firstchar$=Left(l$,1)
                
                If label$<>"" And rightlabel=0 And finish=0 Then 
                    If firstchar$="[" Then 
     
                        labelending = InStr(l$,"]",1)
                        If Not labelending Then MakeError "Error: WriteIni could not read file: "+file$+" Label "+label$+" not ended with ] at line: "+lines
                        If CaseSensitive Then 
                            If Mid(l$,2,labelending-2)=label$ Then Rightlabel=1
                        Else
                            If Lower(Mid(l$,2,labelending-2))=Lower(label$) Then Rightlabel=1
                        EndIf 
                    EndIf 
                ElseIf rightlabel And finish=0 Then 
                
                    //new label starting
                    If firstchar$="[" Then finish=1

                    If firstchar$="#" Then 
                        //commentline
                    Else
                        If CaseSensitive Then 
                            If Mid(l$,1,namelen)=name$ Then finish=1
                        Else
                            If Mid(l$,1,namelen)=name$ Then finish=1
                        EndIf 
                    EndIf 
                
                    If EOF(f) Then finish=1 
                    
                EndIf 

                If Not finish Then 
                    WriteLine f2,rl$
                Else
                    If name$+"="+value$<>l$ Then WriteLine f2,name$+"="+value$ 
                    WriteLine f2,rl$
                EndIf 

            Else 
                WriteLine f2,rl$
            EndIf 
            
            
        Wend 
        
        If Not finish Then 
            WriteLine f2,"["+label$+"]"
            WriteLine f2,name$+"="+value$
        EndIf 
        CloseFile f2

    CloseFile f
    
    CopyFile file$+"temp",file$
    If FileExists (file$+"temp") Then DeleteFile file$+"temp"

End Function
Function iniReadString(file As String, section As String, name As String, defaultValue As String = "")
    Dim f As Integer
    Dim row As String, currentSection As String

    // Muunnetaan nimi ja osio pienellä kirjoitetuksi.
    name = Lower(name)
    section = Lower(section)

    If FileExists(file) Then
        f = OpenToRead(file)
            While Not EOF(f)
                row = Trim(ReadLine(f))

                // Parsitaan kommentit pois.
                If InStr(row, "#") Then
                    row = Mid(row, 1, InStr(row, "#") - 1)
                EndIf

                If row <> "" Then
                    If Left(row, 1) = "[" Then // Jos ON osio niin vaihdetaan nykyisen osion nimi.
                        currentSection = Lower(Mid(row, 2, InStr(row, "]") - 2))
                    Else // Muussa tapauksessa rivillä ON asetuksia.
                        If Lower(Left(row, Len(name))) = name And currentSection = section Then
                            Return Replace(Trim(Mid(row, InStr(row, "=") + 1)), Chr(34), "") // Palautetaan = -merkin jälkeen oleva osa siistittynä.
                        EndIf
                    EndIf
                EndIf
            Wend
        CloseFile f
    Else
        MakeError "Tiedoston '" + file + "' avaus epäonnistui!"
    EndIf
    Return defaultValue
EndFunction

Function iniReadInt(file As String, section As String, name As String, defaultValue As Integer = 0)
    Return Int(iniReadString(file, section, name, defaultvalue))
EndFunction

Function iniReadFloat(file As String, section As String, name As String, defaultValue As Float = 0.0)
    Return Float(iniReadString(file, section, name, defaultValue))
EndFunction
Otto Martikainen a.k.a. MetalRain, otto90x, kAATOSade.
Runoblogi, vuodatusta ja sekoiluja.
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Tyhmät kysymykset (I/2010)

Post by Jani »

Ehdin kyllä jo muokata ohjelmani toiminnan erilaiseksi (WriteInt & WriteString)...

Mutta kiitos, otan nuo talteen.
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
jaahas
Advanced Member
Posts: 307
Joined: Fri Feb 05, 2010 11:36 pm
Location: Tornio

Re: Tyhmät kysymykset (I/2010)

Post by jaahas »

miks tää ei toimi?

Code: Select all

SCREEN 800,600
w = NewWindow("Kokeiluikkuna",100,150,300,100)
DrawToWindow(w)
Color 255,0,0
Circle 145,45,10
Color 255,255,255
Text 0,0, "Esimerkki"
DrawToScreen
Repeat
    UpdateWindows()
    DrawScreen
Forever
ja myös miks tääkään ei toimi?

Code: Select all

SCREEN 800,600
ClsColor 212,208,200 

Const Lista1=1
Const Lista2=2

'Luodaan 1. lista
AddListItem(Lista1,"Pekka")
AddListItem(Lista1,"Väinö")
AddListItem(Lista1,"Esko")
AddListItem(Lista1,"Aatami")
AddListItem(Lista1,"Otto")

'Luodaan 2. lista
AddListItem(Lista2,"Maija")
AddListItem(Lista2,"Heidi")
AddListItem(Lista2,"Anna")
AddListItem(Lista2,"Minna")
AddListItem(Lista2,"Heli")

Repeat

    järjNous1 = CmdButton("Järjestä nousevasti",50,95,200,20)
    järjNous2 = CmdButton("Järjestä nousevasti",300,95,200,20)
    järjLask1 = CmdButton("Järjestä laskevasti",50,117,200,20)
    järjLask2 = CmdButton("Järjestä laskevasti",300,117,200,20)
    poista1 = CmdButton("Poista valittu",50,139,200,20)
    poista2 = CmdButton("Poista valittu",300,139,200,20)
    lisää1 = CmdButton("Lisää luku",50,161,200,20)
    lisää2 = CmdButton("Lisää luku",300,161,200,20)
    
    If järjNous1 Then SortList(Lista1,0) 'Nolla järjestää listan nousevasti
    If järjNous2 Then SortList(Lista2,0)
    If järjLask1 Then SortList(Lista1,1) 'Ykkönen järjestää listan laskevasti
    If järjLask2 Then SortList(Lista2,1)
    If poista1 Then DeleteListItem(Lista1,ListSelection(Lista1)) 'ListSelection(id) palauttaa listassa valittuna olevan valinnan numeron
    If poista2 Then DeleteListItem(Lista2,ListSelection(Lista2))
    If lisää1 Then AddListItem(Lista1,Rand(1,1000000),ON) 'ON tekee lisättävästä valinnasta automaattisesti valitun
    If lisää2 Then AddListItem(Lista2,Rand(1,1000000),ON)
    
    List(Lista1,50,50,200,40)
    List(Lista2,300,50,200,40)
    DrawScreen
Forever
DatsuniG
Advanced Member
Posts: 367
Joined: Fri Aug 15, 2008 9:57 pm

Re: Tyhmät kysymykset (I/2010)

Post by DatsuniG »

Includet mukaan hyvä mies.
Hengität nyt manuaalisesti.
Herra Siili
Advanced Member
Posts: 308
Joined: Tue Nov 25, 2008 8:06 pm
Location: Viitasaari, Keski-Suomi
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Herra Siili »

Arvelen, että includet löytyvät SDK:sta.
a.k.a. Hedge
jaahas
Advanced Member
Posts: 307
Joined: Fri Feb 05, 2010 11:36 pm
Location: Tornio

Re: Tyhmät kysymykset (I/2010)

Post by jaahas »

no niin täs on ne mukana

Code: Select all

Include "SDK\include\cbFormElements.cb"

SCREEN 800,600
ClsColor 212,208,200 

Const Lista1=1
Const Lista2=2

'Luodaan 1. lista
AddListItem(Lista1,"Pekka")
AddListItem(Lista1,"Väinö")
AddListItem(Lista1,"Esko")
AddListItem(Lista1,"Aatami")
AddListItem(Lista1,"Otto")

'Luodaan 2. lista
AddListItem(Lista2,"Maija")
AddListItem(Lista2,"Heidi")
AddListItem(Lista2,"Anna")
AddListItem(Lista2,"Minna")
AddListItem(Lista2,"Heli")

Repeat

    järjNous1 = CmdButton("Järjestä nousevasti",50,95,200,20)
    järjNous2 = CmdButton("Järjestä nousevasti",300,95,200,20)
    järjLask1 = CmdButton("Järjestä laskevasti",50,117,200,20)
    järjLask2 = CmdButton("Järjestä laskevasti",300,117,200,20)
    poista1 = CmdButton("Poista valittu",50,139,200,20)
    poista2 = CmdButton("Poista valittu",300,139,200,20)
    lisää1 = CmdButton("Lisää luku",50,161,200,20)
    lisää2 = CmdButton("Lisää luku",300,161,200,20)
    
    If järjNous1 Then SortList(Lista1,0) 'Nolla järjestää listan nousevasti
    If järjNous2 Then SortList(Lista2,0)
    If järjLask1 Then SortList(Lista1,1) 'Ykkönen järjestää listan laskevasti
    If järjLask2 Then SortList(Lista2,1)
    If poista1 Then DeleteListItem(Lista1,ListSelection(Lista1)) 'ListSelection(id) palauttaa listassa valittuna olevan valinnan numeron
    If poista2 Then DeleteListItem(Lista2,ListSelection(Lista2))
    If lisää1 Then AddListItem(Lista1,Rand(1,1000000),ON) 'ON tekee lisättävästä valinnasta automaattisesti valitun
    If lisää2 Then AddListItem(Lista2,Rand(1,1000000),ON)
    
    List(Lista1,50,50,200,40)
    List(Lista2,300,50,200,40)
    DrawScreen
Forever

ja täs toinen

Code: Select all

SCREEN 800,600
Include "sdk/include/cbJanelas.cb"

w = NewWindow("Kokeiluikkuna",100,150,300,100)
DrawToWindow(w)
Color 255,0,0
Circle 145,45,10
Color 255,255,255
Text 0,0, "Esimerkki"
DrawToScreen
Repeat
    UpdateWindows()
    DrawScreen
Forever
auttakaas nyt miks noi ei toimi??
Locked