Vad ska jag använda för att skapa GUI och 3D i C?

Permalänk

Vad ska jag använda för att skapa GUI och 3D i C?

Hej! Ni hörde rätt. Jag skrev C och inte C++.
Jag är C programmerare då jag har hört att man kommer lika långt med C som C++ och att C är enklare att lära sig då det är mindre att kunna. Därför valde jag C. Enligt mig så är C++ ett språk man inte väljer, om man inte ska göra 3D spel.

Spel(Quake,Doom mm), operativsystem(Linux, Unix mm), stora grafiska program(GTK, Apache, MySQL mm) med mera kan göras i C och då undrar jag vad jag ska välja om jag vill göra ett program som både kan behandla grafiskt snitt och 3D samtidigt exempelvis, CAD/CAM program som kan kontrollera USB-enheter eller något liknande?

Krav:
3D
Grafiskt snitt
Kunna styra USB-enheten

Jag har kollat på QT och GKT+ men är osäker vad som passar mig och om dessa kan verkligen göra det jag vill göra.

Permalänk
Medlem

Gör det i .NET C# och spara tonvis med timmar. Om du VILL ödsla tid på att uppfinna hjulet igen, så för all del, kör på C. Men jag ger dig ett ärligt tips i att du är mycket mer produktiv i C# och Visual Studio, med alla färdiga verktyg. Det är roligare att se resultat.

Väljer du C# så kan du köra WPF för både GUI och 3D i harmonisk mix och usb-stöd borde vara trivialt.

Lycka till vad du än väljer

Visa signatur

AMD 7700X (EK 240mm AIO) | ROG Strix B650E-F Gaming | Gigabyte RX 6800 XT 16GB OC | Kingston Fury 32GB DDR5 5600mhz | Kingston Fury Renegade M2 2TB | Alienware AW2723DF 280hz

Permalänk
Hedersmedlem
Skrivet av heretic16:

Jag har kollat på QT och GKT+ men är osäker vad som passar mig och om dessa kan verkligen göra det jag vill göra.

Qt kan nog vara knepigt med c tror jag.

Permalänk

Jag använder linux och programer mikrokontroller. Därför tänkte jag att det är bättre att man kan C riktigt bra än att man kan bara grunderna i c och sen lite mer avancerade grunder i t.ex java.

Permalänk
Medlem
Skrivet av heretic16:

Jag använder linux och programer mikrokontroller. Därför tänkte jag att det är bättre att man kan C riktigt bra än att man kan bara grunderna i c och sen lite mer avancerade grunder i t.ex java.

Du kommer nog inte undan att lära dig C,C++,C#,Java,ADA,Assembler om du vill jobba som programmerare. Lägg till php,python och javascript på det för att du skall kunna jobba med vad som helst. Sedan en ordentlig matteutbildning på detta.

Permalänk
Skrivet av Rupertoo:

Du kommer nog inte undan att lära dig C,C++,C#,Java,ADA,Assembler om du vill jobba som programmerare. Lägg till php,python och javascript på det för att du skall kunna jobba med vad som helst. Sedan en ordentlig matteutbildning på detta.

Jag tänker inte direkt jobba som just programmerare. Men jag tänker skapa program som man styra mikroprocessorer via USB.

Tänk att du har en arduinio som du har programmerat efter dina behov. Sen har du ett program som skickar digitala pulser över ett visst tidsintervall från USB till ett av arduinos digitala ingångar. Det programmet ska kunna tillämpa 3D grafik(inge avancerad grafik) och grafiskt snitt.

Med arduino så brukar man oftast köra C. Man kan köra C++ också men C är vanligast. C är också perfekt för att just kunna styra hårdvara och man kan även göra avancerade program i 3D med grafiskt snitt, dessutom spel.

Men då är frågan. Ska man lära sig grundläggande C för arduino, vilket arduino endast behöver. Man behöver inga avancerade C kunskaper för att programmera arduino. Sen lära sig t.ex Java eller C# för att just göra programmet som styr USB och tillämpar grafiskt snitt och 3D? Eller ska man lära sig tillämpa allt jag ska göra i C ?

Som jag ser det så är det enklast att bara göra det i C allt ihop. Men det är vad jag ser då jag inte vet.

Permalänk
Medlem
Skrivet av heretic16:

Jag tänker inte direkt jobba som just programmerare. Men jag tänker skapa program som man styra mikroprocessorer via USB.

Tänk att du har en arduinio som du har programmerat efter dina behov. Sen har du ett program som skickar digitala pulser över ett visst tidsintervall från USB till ett av arduinos digitala ingångar. Det programmet ska kunna tillämpa 3D grafik(inge avancerad grafik) och grafiskt snitt.

Med arduino så brukar man oftast köra C. Man kan köra C++ också men C är vanligast. C är också perfekt för att just kunna styra hårdvara och man kan även göra avancerade program i 3D med grafiskt snitt, dessutom spel.

Men då är frågan. Ska man lära sig grundläggande C för arduino, vilket arduino endast behöver. Man behöver inga avancerade C kunskaper för att programmera arduino. Sen lära sig t.ex Java eller C# för att just göra programmet som styr USB och tillämpar grafiskt snitt och 3D? Eller ska man lära sig tillämpa allt jag ska göra i C ?

Som jag ser det så är det enklast att bara göra det i C allt ihop. Men det är vad jag ser då jag inte vet.

Använd C för att göra programmet som kontrollerar hårdvaran och använd C#/Java/C++ för att göra programmet som visualiserar datan som skickas.

Visa signatur

AW3423DW QD-OLED - Ryzen 5800x - MSI Gaming Trio X 3090 - 64GB 3600@cl16 - Samsung 980 Pro 2TB/WD Black SN850 2TB

Permalänk
Skrivet av celoz:

Använd C för att göra programmet som kontrollerar hårdvaran och använd C#/Java/C++ för att göra programmet som visualiserar datan som skickas.

Du tror det blir enklast?

Jag har kollat upp två stycken saker som fungerar med C och det är GKT och openGL.
Eller vad säger ni om det?

Permalänk
Datavetare
Skrivet av Oggelito:

Gör det i .NET C# och spara tonvis med timmar. Om du VILL ödsla tid på att uppfinna hjulet igen, så för all del, kör på C. Men jag ger dig ett ärligt tips i att du är mycket mer produktiv i C# och Visual Studio, med alla färdiga verktyg. Det är roligare att se resultat.

Väljer du C# så kan du köra WPF för både GUI och 3D i harmonisk mix och usb-stöd borde vara trivialt.

Lycka till vad du än väljer

Är det inte lite dumt att överhuvudtaget starta ett projekt baserat på WPF idag då det är en teknik som Microsoft inte kommer vidareutveckla i.o.m lanseringen av WinRT (APIet)?

Vidare så är det ofta rätt omständligt att jobba med lågnivå saker som USB-protokollet i språk som Java/C# då det kommer krävas att man ändå tar till C (via JNI (Java) eller Pinvoke (C#)).

Skillnaden i mängden kod om man skriver något icke-trivialt är långt mindre än vad många hävdar när man jämför språk som C, C++, Java och C#. Alla dessa språk ligger väldigt nära varandra vad det gäller abstraktion, hade C haft closures så hade det inte varit relevant skillnad alls.

För C kan man enkelt kommunicera med USB-enheter via libusb, 3D grafik gör nog enklast med OpenGL (som är ett C API). Den svaga biten för C är "vanlig" GUI, gtk+ är nog det minst dåliga men gillar man C# så bör man ta en titt på Vala (finns både till Linux och Windows). Vala är väldigt snarlikt C# men det kompileras till C-kod och det är väldigt lätt (är en av huvud-finesserna faktiskt) att kombinera Vala och C.

Det vi normal kallar "programmeringsspråk" består i stort sätt av tre delar
1. syntaxen för språket, Vala är som sagt väldigt likt C# (men inte helt identiskt)
2. standardbiblioteket, Vala använder GTK och en rad andra Gnome bibliotek som standardbibliotek (alla dessa kommer med om man kör Vala på Windows)
3. run-time, Vala har inte en egen run-time i bemärkelsen som C#/Java (som har en virtuell maskin) eller C/C++ (som kompileras till maskinkod). Vala kompileras till C-kod som i sin tur kompileras till maskinkod (går att göra i ett steg, men det är så det fungera under huven).

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Skrivet av Yoshman:

Är det inte lite dumt att överhuvudtaget starta ett projekt baserat på WPF idag då det är en teknik som Microsoft inte kommer vidareutveckla i.o.m lanseringen av WinRT (APIet)?

Vidare så är det ofta rätt omständligt att jobba med lågnivå saker som USB-protokollet i språk som Java/C# då det kommer krävas att man ändå tar till C (via JNI (Java) eller Pinvoke (C#)).

Skillnaden i mängden kod om man skriver något icke-trivialt är långt mindre än vad många hävdar när man jämför språk som C, C++, Java och C#. Alla dessa språk ligger väldigt nära varandra vad det gäller abstraktion, hade C haft closures så hade det inte varit relevant skillnad alls.

För C kan man enkelt kommunicera med USB-enheter via libusb, 3D grafik gör nog enklast med OpenGL (som är ett C API). Den svaga biten för C är "vanlig" GUI, gtk+ är nog det minst dåliga men gillar man C# så bör man ta en titt på Vala (finns både till Linux och Windows). Vala är väldigt snarlikt C# men det kompileras till C-kod och det är väldigt lätt (är en av huvud-finesserna faktiskt) att kombinera Vala och C.

Det vi normal kallar "programmeringsspråk" består i stort sätt av tre delar
1. syntaxen för språket, Vala är som sagt väldigt likt C# (men inte helt identiskt)
2. standardbiblioteket, Vala använder GTK och en rad andra Gnome bibliotek som standardbibliotek (alla dessa kommer med om man kör Vala på Windows)
3. run-time, Vala har inte en egen run-time i bemärkelsen som C#/Java (som har en virtuell maskin) eller C/C++ (som kompileras till maskinkod). Vala kompileras till C-kod som i sin tur kompileras till maskinkod (går att göra i ett steg, men det är så det fungera under huven).

Här verkar det vara en som är påläst.
Jag tänker inte göra spel i alla fall. Bara program som har GUI och ibland kanske någon kub som man kan snurra med musen som är integrerat med GUI-snittet.

Men jag såg du skrev "gtk+ är nog det minst dåliga". Vad menar du med det? Är det inte GTK+ som högt dagligt och uppskattat av C-programmerare och övriga programmerare ?

Jag tror "3D-frågan" är nog avklarad. Det får bli openGL då man kan använda C för att skriva ut en cirkel eller kub på skärmen.

Då återstår just "GUI-frågan".

Permalänk
Datavetare
Skrivet av heretic16:

Här verkar det vara en som är påläst.
Jag tänker inte göra spel i alla fall. Bara program som har GUI och ibland kanske någon kub som man kan snurra med musen som är integrerat med GUI-snittet.

Men jag såg du skrev "gtk+ är nog det minst dåliga". Vad menar du med det? Är det inte GTK+ som högt dagligt och uppskattat av C-programmerare och övriga programmerare ?

Jag tror "3D-frågan" är nog avklarad. Det får bli openGL då man kan använda C för att skriva ut en cirkel eller kub på skärmen.

Då återstår just "GUI-frågan".

Det jag menar med "minst dåliga" är att det tyvärr är ganska jobbigt att skriva GUI kod i C. Fördelen med gtk+ är att det är väldigt välanvänt, främst på Linux men det fungerar även på Windows och OSX. gtk+ har också en rad verktyg för att underlätta jobbet bl.a. Glade.

Anledningen till att Gnome-projekt som Mono och Vala dykt upp är mycket för att underlätta GUI-programmering. Men med tanke på hur många applikationer som ändå har GUI skrivet i C (majoriteten på Linux men även en och annan på Windows, men där är VB, C# och framförallt C++ långt vanligare) så är det naturligtvis ingen omöjlighet att skriva GUI direkt i C.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem

Det är kanske seriell-porten du vill programmera till, snarare än USB.

Permalänk
Medlem
Skrivet av heretic16:

Jag tänker inte direkt jobba som just programmerare. Men jag tänker skapa program som man styra mikroprocessorer via USB.

Tänk att du har en arduinio som du har programmerat efter dina behov. Sen har du ett program som skickar digitala pulser över ett visst tidsintervall från USB till ett av arduinos digitala ingångar. Det programmet ska kunna tillämpa 3D grafik(inge avancerad grafik) och grafiskt snitt.

Med arduino så brukar man oftast köra C. Man kan köra C++ också men C är vanligast. C är också perfekt för att just kunna styra hårdvara och man kan även göra avancerade program i 3D med grafiskt snitt, dessutom spel.

Men då är frågan. Ska man lära sig grundläggande C för arduino, vilket arduino endast behöver. Man behöver inga avancerade C kunskaper för att programmera arduino. Sen lära sig t.ex Java eller C# för att just göra programmet som styr USB och tillämpar grafiskt snitt och 3D? Eller ska man lära sig tillämpa allt jag ska göra i C ?

Som jag ser det så är det enklast att bara göra det i C allt ihop. Men det är vad jag ser då jag inte vet.

Jag antar att du pratar om Arduino som baserar sig på Atmega chip? där har du ju en uppsjö av kompilatorer, samt hela miljöer där du kan labba utan att löda ett smack http://www.labcenter.com/products/vsm/vsm_overview.cfm

Sedan skulle jag rekommendera dig att använda en scengraf istället för att sätta dig i opengl o skriva allt från scratch, QT tillsammans med OSG är bra på C++ sidan, JME funkar bra på Java sidan.

Permalänk
Skrivet av Yoshman:

Det jag menar med "minst dåliga" är att det tyvärr är ganska jobbigt att skriva GUI kod i C. Fördelen med gtk+ är att det är väldigt välanvänt, främst på Linux men det fungerar även på Windows och OSX. gtk+ har också en rad verktyg för att underlätta jobbet bl.a. Glade.

Anledningen till att Gnome-projekt som Mono och Vala dykt upp är mycket för att underlätta GUI-programmering. Men med tanke på hur många applikationer som ändå har GUI skrivet i C (majoriteten på Linux men även en och annan på Windows, men där är VB, C# och framförallt C++ långt vanligare) så är det naturligtvis ingen omöjlighet att skriva GUI direkt i C.

Jag känner till Glade och det är väll mer som "drag and drop" och sedan får man skriva koden sen. Det är ganska skönt. Är det inte lika jobbigt att skriva GUI kod i C som att skriva 3D kod i C med hjälp av opengl?

Så vad rekommenderar du mig om jag vill göra grafiska program som kan behandla simpel 3d grafik i C?
GTK+ och OpelGL.

Permalänk
Medlem

Det är förmodligen mycket lättare att skriva GUI kod med GTK+ och C, än att använda OpenGL och den där USB kabeln du skulle ha. Säg till om du vill ha hjälp med att få igång OpenGL så kan jag ge dig lite kod.

Permalänk
Skrivet av MrSir:

Det är förmodligen mycket lättare att skriva GUI kod med GTK+ och C, än att använda OpenGL och den där USB kabeln du skulle ha. Säg till om du vill ha hjälp med att få igång OpenGL så kan jag ge dig lite kod.

Nu vet jag inte hur OpenGL fungerar men jag antar att man skriver i linjär algebra?
Om man kan göra simpel 3D grafik med GTK så vore det helt underbart. Kan man det?

Permalänk
Medlem

Aldrig använt GKT+, men vad jag googlar fram så är det inte till för det verkar det som (går ej då alltså). I OpenGL anger man koordinater för alla trianglar man ritar, det är i princip allt OpenGL gör åt dig, fast på grafikkortet då. Och om du bara ska göra typ, jag kan anta 3D-diagram som man kan rotera? Då kan OpenGL va lagom, speciellt om du då ska göra diagram som baseras på typ data du matar in i realtid, så kan det bli smidigt.

Men rent allmänt så lär det bli: GTK+ du gör interfacet med alla knappar, listor, fönster, menyer. Sen om du vill rita 3D i ett fönster, tar du en device handle från operativsystemet (som du lär få via någon GTK+ funktion). Initialiserar OpenGL där, och ritar grejor.

edit: Jo just det. Linjär algebra blir det när man flyttar/roterar saker. Matrismultiplikation.

Permalänk
Skrivet av MrSir:

Aldrig använt GKT+, men vad jag googlar fram så är det inte till för det verkar det som (går ej då alltså). I OpenGL anger man koordinater för alla trianglar man ritar, det är i princip allt OpenGL gör åt dig, fast på grafikkortet då. Och om du bara ska göra typ, jag kan anta 3D-diagram som man kan rotera? Då kan OpenGL va lagom, speciellt om du då ska göra diagram som baseras på typ data du matar in i realtid, så kan det bli smidigt.

Men rent allmänt så lär det bli: GTK+ du gör interfacet med alla knappar, listor, fönster, menyer. Sen om du vill rita 3D i ett fönster, tar du en device handle från operativsystemet (som du lär få via någon GTK+ funktion). Initialiserar OpenGL där, och ritar grejor.

edit: Jo just det. Linjär algebra blir det när man flyttar/roterar saker. Matrismultiplikation.

Vad bra! Linjär algebra har jag läst
Jag får se om jag behöver 3D funktioner i mina program. Det kan hända att jag kommer på något så man slipper undan openGL. Men nu blir det att repetera C kod och sen ge sig på GTK+.

Tack ska ni alla ha

Permalänk

En fråga till.
Finns det biblioteket för C så man kan skapa grafiskt i just texbaserat?

Exempelbild.
http://www.softsea.com/screenshot/image/Image-for-DOS.jpg

EDIT: Hittade det! Det heter ncurses för C.

Permalänk
Datavetare
Skrivet av heretic16:

Jag känner till Glade och det är väll mer som "drag and drop" och sedan får man skriva koden sen. Det är ganska skönt. Är det inte lika jobbigt att skriva GUI kod i C som att skriva 3D kod i C med hjälp av opengl?

Så vad rekommenderar du mig om jag vill göra grafiska program som kan behandla simpel 3d grafik i C?
GTK+ och OpelGL.

I de flesta GUI-toolkit så finns speciella "canvas" för att utföra 3D, så är fallet även i gtk+. Har tyvärr aldrig själv kört OpenGL ihop med gtk+, men har gjort det flera gånger i andra toolkit, bl.a. Qt och i Android.

Men detta verkar ju lovande för gtk+.

Skulle säga att OpenGL faktiskt är väldigt enkelt förutsatt att man förstår grundkoncepten för 3D grafik. Det är garanterat enklare att använda OpenGL för att göra 3D-grafik jämfört med att använda lågnivå saker och göra sin egen 3D-motor.

OpenGL är krångligt på ett annat sätt än GUI-kod brukar vara. OpenGL är svårt därför 3D-grafik är ett relativt komplicerat koncept. GUI-kod brukar vara jobbigt för det är så mycket boilerplait som man måste göra rätt på (men verktygen brukar hjälpa här). Har tyvärr bara jobbat med gtk+ i Vala och i C# (Mono), har bara gjort extremt enkla saker i C med gtk+, så kan inte riktigt uttala mig om hur svårt/lätt det är. Var i alla falla väldigt lätt i Vala

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Skrivet av Yoshman:

I de flesta GUI-toolkit så finns speciella "canvas" för att utföra 3D, så är fallet även i gtk+. Har tyvärr aldrig själv kört OpenGL ihop med gtk+, men har gjort det flera gånger i andra toolkit, bl.a. Qt och i Android.

Men detta verkar ju lovande för gtk+.

Skulle säga att OpenGL faktiskt är väldigt enkelt förutsatt att man förstår grundkoncepten för 3D grafik. Det är garanterat enklare att använda OpenGL för att göra 3D-grafik jämfört med att använda lågnivå saker och göra sin egen 3D-motor.

OpenGL är krångligt på ett annat sätt än GUI-kod brukar vara. OpenGL är svårt därför 3D-grafik är ett relativt komplicerat koncept. GUI-kod brukar vara jobbigt för det är så mycket boilerplait som man måste göra rätt på (men verktygen brukar hjälpa här). Har tyvärr bara jobbat med gtk+ i Vala och i C# (Mono), har bara gjort extremt enkla saker i C med gtk+, så kan inte riktigt uttala mig om hur svårt/lätt det är. Var i alla falla väldigt lätt i Vala

Så man kan göra 3D grafik med GTK+ med biblioteket gtkglext via C?

Har du några bra rekommendationer på bra utvecklingsverktyg då? Jag har kört bara geany. Fungerade bra för den var mycket enkelt tycker jag.

Permalänk

En fråga!

Om jag vill skapa ett fönster med GTK+ och en knapp. Trycker man på knappen så ska en dialog komma upp med en triangel som roterar.

Då är frågan. Man man direkt använda GTK+ med openGL eller måste man använda sig av GtkGLExt?

Enligt GtkGLExt så har den "bindings" för:
C++
C#
D
Haskell
Gauche
Pascal
Python
Perl
Ruby

och inte C?
Betyder det att om jag ska göra mitt lilla program så måste jag använda mig av t.ex C++?