saboi Skrevet 27. desember 2004 Del Skrevet 27. desember 2004 nei, gjennomsnittlig avstand fra kamera er ikke hvordan man lager et z-buffer. det ville suge ganske kraftig. bildet hadde blitt helt fucka hvis du gjemmer hele trekanter istedetfor bare de pixelene som er gjemt. det du må gjøre er å gjøre om 3d-scenen din til et 2d-bilde som du kan skrive til skjermen. da må du implementere en eller annen form for frustum og så gjøre om frustumet til 2d. når du da tegner en pixel, sjekker du z-verdien som du finner når du gjør om fra 3d til 2d, hvis z-verdien er mindre enn den som er der, tegn pixelen, hvis ikke, ikke tegn. frustum er vanskelig å implementere fordi det er så mye matte, men hvis du vil lage det må du forstå matriser og søke på google. derfor er det lettere å begynne med et api som f.eks directx som har implementert disse funksjonene for deg. så kan du evt lage software ting etter du forstår hvordan det funker Lenke til kommentar
GeirGrusom Skrevet 29. desember 2004 Del Skrevet 29. desember 2004 Hvis du leser postene, så er det litt enklere å forstå, dette beskrev jeg i hva 3D korta gjorde (siden de har en RISK GPU tilgjengelig, så går dette temmelig unna) Så der fikk du den! Lenke til kommentar
galskapen Skrevet 3. januar 2005 Del Skrevet 3. januar 2005 Uhu! Min første kalkulator! Den er veldig enkel og har bare +, -, * og /. Lenke til kommentar
Jonas Skrevet 4. januar 2005 Forfatter Del Skrevet 4. januar 2005 Ser at mange lager kalkulator med to felt. Det ville blitt mere brukervenlig med et felt, som calc.exe (I windows). Burde ikke være så altfor vannskelig å få til Forresten, er det noen fra denne delen av forumet som skal på TG? Sett deg med hw.no-rekka da vel! Lenke til kommentar
DevN Skrevet 4. januar 2005 Del Skrevet 4. januar 2005 Litt off topic, men hadde ikke så lyst å starte ny tråd: Siden den innebyde "MouseMove" metoden ikke duger så bra, hvilke andre alternativer er det? Søker jeg, ender jeg alltid opp med å bruke Timer, noe som krever masse systemressurser. Er det en annen metode å bruke? Tenker på effekter til knapper. Lenke til kommentar
Jonas Skrevet 4. januar 2005 Forfatter Del Skrevet 4. januar 2005 MouseMove har alltid funket fint for meg. Hvorfor duger den ikke? Hvis du skal lage en effekt hvor et bilde blir synelig, bør du bruke en If for å ungå "lagg". If Bilde.Visible = False Then Bilde.Visible = True Lenke til kommentar
DevN Skrevet 4. januar 2005 Del Skrevet 4. januar 2005 Ved raske bevegelser, registreres det ikke alltid at musen har forlatt et objekt. Noe du bør ha oppdaget..? Lenke til kommentar
Jonas Skrevet 4. januar 2005 Forfatter Del Skrevet 4. januar 2005 Joda, det har jeg oppdaget. Jeg tror ikke det finnes noe "ordentlig" MouseOut-event, så enten må du bruke en timer, eller bare leve med at man kan dra musa fort over. Uansett, å dra musa fort over diverse effekter er jo som å be om effekt-feil. Hvis brukeren absolutt har lyst så gjør vel ikke det så mye? Lenke til kommentar
DevN Skrevet 4. januar 2005 Del Skrevet 4. januar 2005 Vel, jeg har selv irritert meg over det. Altså, selv om jeg ikke drar musen fort med vilje. Og synes ikke "MouseMove" duger så bra som en knapp-effekt, da. Windows XP-stilen har jo effekter på knapper, og masse annet. Opera (nettleseren) har jo en egen stil, så har "MouseOver" også. Jeg har ikke sett at disse har feilet, hva slags metode brukes her? Det virker ikke som dette krever masse systemressurser, så jeg kan ikke tenke meg at en Timer brukes. Lenke til kommentar
Jonas Skrevet 4. januar 2005 Forfatter Del Skrevet 4. januar 2005 En timer med 100 i interval skal gjøre en del kode før du merker noe spesielt. Desuten har jeg hørt at en timer prioriteres lavt i windows. Du vil ikke merke stort i f eks spill. (Noen som kan bekrefte?) Lenke til kommentar
DevN Skrevet 5. januar 2005 Del Skrevet 5. januar 2005 Du mener det vil gå bra da med 30 knapper i en form, med MouseOver-effekt (f.eks. at knappen bytter farge)? Sjeldent jeg bruker 30 knapper i en form, men f.eks. et Hangman-spill. Lenke til kommentar
Jonas Skrevet 5. januar 2005 Forfatter Del Skrevet 5. januar 2005 Hvis du bruker Mouse-eventsene riktig, så skal det gå bra. Greia er at du gir knappene en index-verdi, og lager koden utifra det. Da slipper man å skrive samme kode 29 ganger. F eks som i vedlegget. MouseOver.zip Lenke til kommentar
aadnk Skrevet 7. januar 2005 Del Skrevet 7. januar 2005 Jeg tror ikke det finnes noe "ordentlig" MouseOut-event, så enten må du bruke en timer, eller bare leve med at man kan dra musa fort over. Muligens ikke, men det finnes langt sofistikerte metoder enn å bruke den omliggende formen for å finne ut om musepekeren har forlatt vinduet. Man kan f.eks bruke TrackMouseEvent-funksjonen, men det krever uheldigvis subclassing og endel forståelse på API. Lenke til kommentar
DevN Skrevet 21. februar 2005 Del Skrevet 21. februar 2005 Kom over denne nettopp: Option Explicit Private Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function ReleaseCapture Lib "user32" () As Long Private Declare Function GetCapture Lib "user32" () As Long Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) With Command1 If (X < 0) Or (Y < 0) Or (X > .Width) Or (Y > .Height) Then 'MouseLeave Call ReleaseCapture .BackColor = &H8000000F ElseIf GetCapture() <> .hwnd Then 'MouseEnter Call SetCapture(.hwnd) .BackColor = &HFF& Else 'Normal MouseMove .BackColor = &HFF& End If End With End Sub Noe negativt å si om den? Så ut til å fungere helt utmerket. Lenke til kommentar
aadnk Skrevet 21. februar 2005 Del Skrevet 21. februar 2005 DevN: Nei, jeg tror sannelig den metoden er faktisk hvorledes det egentlig skal gjøres. Fabelaktig! Da lærte jeg noe i dag også. Lenke til kommentar
aadnk Skrevet 24. februar 2005 Del Skrevet 24. februar 2005 Forleden kom jeg over noe temmelig forunderlig - en ny måte å påvise om en array er initialisert eller ikke: Dim aArray() As Long If (Not Not aArray) Then MsgBox "Arrayen er initialisert", vbInformation, "Array" Else MsgBox "Arrayen er ikke initialisert", vbInformation, "Array" End If Og det fungerer merkelig nok fullstendig utmerket; i hvert fall i de versjonene jeg har testet koden til nå. Tydeligvis har kompilatoren en liten glipp hva NOT-operatøren angår. Til forskjell fra alle de andre operatørene, gir ikke VB en feilmelding når man benytter den sammen med en uinitialisert array - tvertom behandler den arrayen lik hvilken som helst variabel. Ettersom en array egentlig er en peker til en safearray-struktur, returnerer NOT-operatøren den omvendte verdien av denne, hvilket er 0 når arrayen ikke er initialisert. Idet alle verdier utenom 0 blir oppfattet som True, kan man faktisk benytte denne pekeren i en IF-setning, derav årsaken til at dette faktisk fungerer. Lenke til kommentar
Jonas Skrevet 27. februar 2005 Forfatter Del Skrevet 27. februar 2005 Hmm, nå begynner jeg å lure litt på hva Val() skal gjøre :S Lim inn denne koden: Option Explicit Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long Dim Tall() As Long Dim sEnd As Boolean Private Sub Form_Load() Me.Show ReDim Tall(0 To 20) Dim sTall As Long Do Until sEnd = True DoEvents sTall = Rnd * 4 'sTall = Val(Rnd * 4) Randomize Timer Tall(sTall) = Tall(sTall) + 1 Paint Loop End End Sub Private Sub form_Click() sEnd = True End Sub Private Sub Paint() Me.Cls Dim i For i = 0 To UBound(Tall) TextOut Me.hdc, i * 20, 0, Str(i), Len(Str(i)) If Not Tall(i) = 0 Then Dim o For o = 0 To Tall(i) SetPixel Me.hdc, (i * 20) + 15, o, 0 Next o End If Next i End Sub Alt ser ganske bra ut, og man får bare tall fra 0 til 4, men prøv å ta bort kommentar-tegnet forann Val()-linjen. Da blir resultatet annerledes. Litt av 5 til 9 også! Hva kommer det av? Lenke til kommentar
aadnk Skrevet 28. februar 2005 Del Skrevet 28. februar 2005 (endret) Problemet ligger formodentlig ved det faktum at Val(), likegyldig av konfigurasjonen i Regional and Language Options, vil oppfatte punktum som desimalsymbolet. Det er dette som er årsaken til av vi i norsktalende land kan benytte denne funksjonen for å fjerne brøken av et tall uten avrunding, idet tall som konverteres til datatypen String vil ha desimalsymbolet komma. Imidlertid fungerer ikke funksjonen identisk dersom desimalsymbolet er stilt inn til punktum - da vil den ikke fjerne brøken og returnere heltall i det hele tatt, men kun gi tallet i paramenteren. Derfor er det feilaktig å anvende denne funksjonen på denne måten. Den vil rett og slett gi ulike resulater avhengig av innstilningene. I tillegg ser vi, av blant annet denne testen, at den i bunn og grunn nesten gir tilfeldige tall ved en slik feilbruk. De funksjonene man skal benytte til sådant, er Int eller Fix. Edit: Leif var på besøk. Endret 28. februar 2005 av aadnk Lenke til kommentar
aadnk Skrevet 28. februar 2005 Del Skrevet 28. februar 2005 Nå er kanskje ikke denne tråden (sågar forumkategorien ) den mest aktive her på forumet, men jeg kan vel like gjerne proklamere litt om denne siden: http://no.wikibooks.org/wiki/Visual_Basic Som mange allerede vet, er wikipedia og dens søstersider en gigantisk kilde til allverdens informasjon - samlet av frivilige bidragere over hele verden. Den overnevnte linken er mitt forsøk på å legge ut VB-guiden min til dette storslotte prosjektet, men sørgelig nok kan det langt ifra kalles fullført. Eksempelvis gjør artikkelen er stort hopp fra et nokså enkelt stadium til å drøfte inngående hvorledes overstyring (subclassing) fungerer i teori og praksis, uten engang å ha vært innom Application Program Interface. Da blir det ikke særlig lett for nybegynnere å følge med, er jeg redd. Så, dersom du synes artikkelen har mangler eller er feilaktig på enkelte punkter, må du gjerne redigere den. Jo flere som bidrar, desto bedre blir den. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå