|
© 2011 Hein Pragt
Vanaf het moment dat ik ruim 30 jaar geleden mijn eerste computer kocht ben ik aan het programmeren. Eerst in basic, daarna
in z80 assembler, daarna vele jaren in C en C++. Hier is een lijst van programmeertalen waarin ik "beroepsmatig" gewerkt heb:
Java, Perl, Php, C, C++,C#,Delphi, Cobol, Unix Shell scripts, JavaScript, VBScript, Xslt, Turbo Pascal, Basic, Assembly voor
diverse processors (8080,Z80,8031,80186,80386,Pentium). Ook programmeerde ik 30 jaar geleden al spellen, eerst in Basic, toen
in Basic en assembler, daarna in C en Assembler en de laatste jaren C++ en Assembler. Beroepsmatig programmeer ik momenteel
in C# (DotNet), Java en C, maar ook een projectje in Psql kwam er nog even tussendoor. Door mijn brede kennis en ervaring ben
ik heel breed inzetbaar en bovendien vind ik (bijna) alles ook leuk om te doen. Dit is een index pagina naar alle onderwerpen
op mijn site die te maken hebben met computers en programmeren.
Vriendelijke groet, Hein Pragt
|
Een klassiek stukje grafische code is een starfield demo. Het wekt de suggestie dat u door de ruimte vliegt en de sterren op
u afkomen en u aan alle zijden passeren. Sterren die ver weg zijn zullen kleiner zijn en ze moeten groter worden als ze de
camera (onze kijk positie) naderen. Voor de helderheid geldt hetzelfde, sterren die verder van ons vandaan zijn hebben een
minder heldere kleur dan sterren die dichtbij zijn. Dit wekt de indruk dat de sterren echt op ons afkomen.
De broncode met uitleg in C voor Win32 kunt u vinden op de volgende pagina:
Starfield code in win32 c
|
|
Nog een klassiek stukje grafische code is een 3d tunnel met circels demo. Het wekt de suggestie dat u in een tunnel
van circels kijkt die op u afkomen en u aan alle zijden passeren. Voor de punten gebruiken we een structure waarin we
de eigenschappen van de punt opslaan. Dat zijn de x, y en z positie als float, een 3d coordinaat in de wiskunde, waarmee
we de positie horizontaal, verticaal en in de diepte opslaan. Een groter z positie betekend dus dat het voorwerp ver van
ons verwijderd is (in dit wiskundig model) en de grootte en helderheid kunnen we dan ook berekenen uit de (z) afstand.
Verder slaan we deze vector (x,y,z) ook op als int waarbij ze omgerekend zijn naar een punt op het beeldscherm. Dit
is eenvoudig te doen als we toch aan het rekenen zijn en scheelt weer tijd als we de punten willen schrijven in het venster.
Deze demo verschilt ten opzichte van het starfield, dat hier ook een leuke demo van wat toegepaste wiskunde in
zit. We gebruiken de sinus en cosinus functie, zetten radialen om in graden en voeren een extra transformatie uit zodat
lijkt alsof de tunnel een sinusvirmige beweging maakt in de ruimte. In de init routine laat ik zien hoe je met behulp van een
sinus en cosinus vrij eenvoudig een circel kunt maken.
De broncode met uitleg in C voor Win32 kunt u vinden op de volgende pagina:
Tunnel code in win32 c
|
|
Een heel leuk grafisch effect dat u vaak tegenkomt in demo's is gegenereerd vuur. Ik zal in het kort proberen uit te leggen
hoe we vuur kunnen maken. Eerst hebben we een kleurenpalet nodig dat van donkerblauw naar donkerrood overloopt en dan van
rood naar geel en daarna van geel naar wit. Dit zijn de kleuren waar het vuur uit gaat bestaan. We hebben 255 kleuren en
0 is het meest donker en 255 is het meest licht. We maken een scherm buffer en die vullen we eerst met alleen maar 0. We
zetten onder in de laatste regel om de beurt 255 of 0 met een random functie. Daarna gaan we het scherm omhoog scrollen
waarbij we van een punt het gemiddelde kleurwaarde nemen met de omliggende punten. Dit zetten we als kleurwaarde in het
nieuw pixel en dit blijven we herhalen. De pixels op hogere lijnen zullen dus steeds meer gedempt gaan worden en
aangezien ons kleurenpalet mooi de kleuren van vuur bevat zal het een redelijk realistisch beeld van vuur opleveren.
De broncode met uitleg in C voor Win32 kunt u vinden op de volgende pagina:
Vuur code in win32 c
|
In de begintijd van de computer werden in grafische applicaties het beeld pixel voor pixel uitgerekend door de CPU en daarna
doorgestuurd naar de grafische kaart die ervoor zorg droeg dat een videosignaal naar de monitor gestuurd werd. Dit lost
natuurlijk veel rekenkracht en telkens moesten allerlei grafische functies opnieuw geschreven worden. Nu is een eenvoudige
lijn niet zo'n probleem maar ingewikkelde 3D transformaties werden al iets moeilijker. OpenGL wat staat voor Open Graphics
Library gebruikt een heel andere aanpak voor het genereren van een beeld via een standaard bibliotheek. Naast de CPU kan
er ook een grafische processor van de videokaart ingezet worden (de GPU) om het beeld te genereren. In plaats van het
beeld punt voor punt aan te leveren, worden kunnen complete objecten, camera posities en licht instellingen aan de GPU
geleverd die dit dan afzonderlijk van de CPU kan renderen. De GPU gaat dus zelfstandig het beeld punt voor punt berekenen
en dat beeld wordt uiteindelijk naar de monitor gestuurd. Meestal gaat het om het samenwerken van de CPU en de GPU,
afhankelijk van de mogelijkheden die beiden hebben.
OpenGL introductie
OpenGL en Visual Studio (Deel 1)
OpenGL en Visual Studio (Deel 2)
In 1991 en 1992 werd mijn belangstelling voor 3d technieken als ervaren C en C++ programmeur gewekt door de serie artikelen
van Michael Abrash in het Amerikaanse tijdschrift Dr Dobbs die ik in die tijd trouw elke maand las. Aangezien de computers nog
niet zo snel waren in die tijd en geheugen ook nog beperkt was moesten we via omwegen toch proberen om enige snelheid te halen.
Ik heb in deze tijd ook een complete fixed point wiskundige bibliotheek in x86 assembler geschreven waarmee ik in C snel 3d
vectoren kon omrekenen en polygonen kon renderen. Samen met alle informatie over 3D programmeren van Michael Abrash heb ik in
die tijd een een vrij aardige 3D demo gemaakt en deed ik mee aan demo competities. Michael Abrash ging ten tijd van deze
artikelen voor voor Microsoft werken en toen ik tegen de beperkingen van de hardware aanliep begon mijn belangstelling wat
terug te lopen maar de basiskennis is altijd gebleven. Op deze pagina wil ik wat algemene informatie geven over 3D technieken en 3D programmeer
technieken maar ook een klein stukje wiskunde. Wanneer u wilt programmeren voor 3D applicaties is een basis van wiskunde
noodzakelijk. Maar nog nooit was wiskunde zo leuk omdat u gelijk erg leuke resultaten kunt zien.
lees meer over 3D technieken.
Het spel Reversi (ook wel othello genoemd) is een bordspel voor twee personen dat in 1888 bedacht is door Lewis Waterman
in Engeland. Het spel Othello werd later door een Japanner genaamd Goro Hasegawa bedacht in 1971 en James R. Becker
ontwikkelde het spel en bracht het op de markt. Het spel is heel bekend geworden op de computer, maar is ook nog steeds
als bordspel te koop. Er is een bordspel met de naam Rolit te koop waarmee reversi door vier personen tegelijk gespeeld
kan worden. De steentjes zijn bij deze variant balletjes die in vier standen op het bord kunnen worden gelegd, met een
bepaalde kleur boven. Het spel leent zich ook perfect voor de computer en aangezien de spelregels vrij simpel zijn is
het ook snel en eenvoudig te implementeren. Het spel is in bijna elke programmeertaal gemaakt en er zijn ook veel online
versies van het spel. Aangezien javascript en flash script niet uitblinken in snelheid zijn de meeste van deze programma's
niet erg sterk en hebben ze meestal een 2 ply (spelzet niveau) min/max berekening met soms wat uitbreidingen met tabellen
met veld waarden. Maar deze programma's zijn vaak te gretig in het veroveren van stukken waardoor ze met een beetje
tactiek al snel verliezen. De wat betere versies van het programma zijn tegenwoordig in java geschreven maar zoals
voor elk spel opgaat is de taal C en C++ natuurlijk de meest voor de hand liggende keuze als het om snelheid gaat.
lees meer over het spel reversi...
Het programmeren van spellen is leuk, verslavend, een bron van heel veel ergernis maar ook heel veel plezier. Maar
hoe kunt u een spel programmeren? Grafische vormgeving en geluid zijn de dingen die het eerst opvallen wanneer we computer
spellen bekijken. Maar schitterende animaties en goede geluidseffecten zijn slechts de buitenste laag van deze fascinerende
vorm van technologie. 3D techniek vereist een goede kennis van wiskunde en verder is een spel vaak een ingewikkelde
structuur van logica en regels. Ook raken spellen vaak het vak psychologie omdat het spel een vorm van actie en reactie
is en de speler een mens is die op menselijke wijze reageert op het spel.
lees meer...
Deze pagina gaat over mijn oude liefde, de programmeertaal C. Ik leerde de taal C kennen in 1986
(dus 24 jaar geleden) door het werk wat is toen deed. Ik was programmeur van embedded software en schreef
hoofdzakelijk in Z80 assembler code maar langzaam ging dit steeds meer richting C. De taal C is ook maar
één stap hoger dat assembler dus het was ook een logische stap. Naderhand ben ik ook PC applicaties gaan
schrijven in C en er was zelfs een tijd dat ik de compiler als rekenmachine gebruikte. Na het lezen van
de C bijbel, het bekende witte boekje van Kernighan en Ritchie was ik een totale fan van de programmeertaal
C. Samen met de collega's probeerden we steeds meer geavanceerde dingen te doen en werd het schrijven van
code in C een soort van kunst.
lees meer over de programmeertaal C
In dit artikel probeer ik een aantal goede redenen te geven om over te stappen op 'C++' zonder het object georiënteerd deel
te gebruiken. Dit is in mijn visie de eerste stap die 'C' programmeurs kunnen maken zonder een cultuur schok door te maken. Object
georiënteerd programmeren is namelijk een andere denk en ontwerp wijze in plaats van alleen wat nieuwe functies. Maar 'C++' is
heel goed te gebruiken zonder object georiënteerd te werken. Toen ik voor het eerst kennismaakte met 'C++' zei ik spottend tegen
een collega, "Alles wat in 'C++' mogelijk is, kan ik ook in standaard 'C' maken, ik zie het nut niet zo". Ik had volkomen gelijk,
en vele collega 'C' programmeurs waren het met me eens.
lees meer over de programmeertaal C++
Mede door de nieuwe 3D spellen is er veel belangstelling voor 3D technieken. Bijna elke nieuw spelconsole is weer meer
realistisch, sneller en meer gedetailleerd. Er bestaan enkele goede 3D ontwerp programma's maar het prijskaartje dat hier
aan hangt is voor de gemiddelde hobbyist niet op te brengen. Maar er is een heel goed alternatief 3D ontwerp programma
genaamd Povray, voor wie zich echt wil verdiepen in 3D technieken. Voor het maken van 3D afbeeldingen kunt u een raytracer
gebruiken, veel 3D ontwerp pakketen hebben deze onder de motorkap zitten. Ray tracing of raytracing is een methode waarmee
een 3D scene omgezet kan worden in een afbeelding. De objecten in de scene worden wiskundig omschreven en er worden
eigenschappen aan toegekend zoals kleur en reflectie. In deze scene bevinden zich ook een of meerdere lampen en een
camera. Voor elke beeldpunt in de afbeelding wordt een lichtstraal (ray) vanuit de camera de scene in geschoten. Deze
lichtstraal zal dan door een wiskundige berekening gevolgd (tracing) worden om te kijken met welk object deze in aanraking
komt. Voor elk punt waar de straal het object raakt wordt de kleur berekend en zal er een beeldpunt in de afbeelding
gegenereerd worden. Dit kost zeer veel rekenkracht van de computer maar kan spectaculair mooie plaatjes opleveren.
lees meer over de Povray raytracer
Sinds het begin van de computers zijn er verschillende soorten van opslag van gegevens ontstaan. In eerste instantie ontstonden
er zelfs verschillende wijze van opslaan van tekens zoals ascii, ebcdic en tegenwoordig unicode. Maar ook werden er veel binaire
bestandsformaten ontwikkeld, niet zelden om het bestand onleesbaar te maken en ook om een bestand type aan een specifieke applicatie
te koppelen. Ook zijn er bijvoorbeeld verschillende formaten voor grafische bestanden zoals gif, jpeg, png en tiff. Ondanks dat
sommige fabrikanten de indeling van hun bestandsformaat niet wilden prijsgeven om concurrentie buiten de deur te houden, werden
deze formaten snel door slimme gebruikers gedecodeerd en beschreven. Tegenwoordig kunnen de meeste programma's elkaars
bestandsformaten lezen naar hun eigen formaat omzetten. Het bestandsformaat wordt vaak aangegeven door middel van een
zogenaamde extensie aan het einde van de bestandsnaam.
lees meer over bestandsformaten
PragtTextUtil is geen editor hoewel de basis functies om tekst te kunnen bewerken wel aanwezig zijn in het programma. Het
programma is bedoeld om bewerkingen uit te voeren op tekst zoals het omzetten naar hoofd of kleine letters of het verwijderen
van HTML tags en het omzetten naar nette paragrafen. Maar ook bewerkingen als trim, uniq, sort en filtering zitten in dit
programma en een complexe bewerking om een gesorteerd woord frequentie overzicht te maken om bijvoorbeeld goede keywords
voor een webpagina te kunnen bepalen. Ook kunt u bijvoorbeeld uit een logbestand alle regels filteren die een bepaald
woord bevatten of juist niet een bepaald woord bevatten. Ook een leuke optie is zoek en vervang met de mogelijkheid om
CTRL tekens te gebruiken in de zoek maar ook de vervang tekst. Als invoer kan het programma natuurlijk alle vormen van platte
tekstbestanden lezen, maar ook bestanden als hex/ascii dump, html pagina's, webpagina's via een HTTP verzoek (simpele wget)
om de exacte response van een internet server op te vangen. Maar ook kunt u de inhoud van uw directory in de tekstbewerker
laden om zo bijvoorbeeld een gesorteerde lijst van al uw muziek te maken. (Onder Windows is het nog steeds niet mogelijk om
de lijst uit de verkenner te knippen en plakken). Ook kunt u de uitvoer van een command line opdracht rechtstreeks in de
tekstbewerker inlezen. Verder zit er een variant van de bekende Linux / Unix utils grep, diff, head en tail in maar dan
geschikt gemaakt voor MS-Windows.
lees meer over het PragtTextUtil programma
Last update: 05-06-2011
|