[Boards: 3 / a / aco / adv / an / asp / b / biz / c / cgl / ck / cm / co / d / diy / e / fa / fit / g / gd / gif / h / hc / his / hm / hr / i / ic / int / jp / k / lgbt / lit / m / mlp / mu / n / news / o / out / p / po / pol / qa / r / r9k / s / s4s / sci / soc / sp / t / tg / toy / trash / trv / tv / u / v / vg / vp / vr / w / wg / wsg / wsr / x / y ] [Home]
4chanarchives logo
Lets have a thread about graphic programming. I have seen a lot
Images are sometimes not shown due to bandwidth/network limitations. Refreshing the page usually helps.

You are currently reading a thread in /g/ - Technology

Thread replies: 83
Thread images: 28
File: Sdl-logo.png (39 KB, 457x266) Image search: [Google]
Sdl-logo.png
39 KB, 457x266
Lets have a thread about graphic programming. I have seen a lot of general programming talk on /dpt/ but lets have thread directed to graphics programming. SDL, OpenGL, everything goes

>what do you generally use?
>what project are you working on?
>how hard was it to learn?
>do you enjoy using it?
>>
>>52667939
>what do you generally use?
OpenGL
>what project are you working on?
I'm working on a simple RTS game and also on a software rasterizer for fun, which uses OpenGL only for drawing to the screen.
>how hard was it to learn?
It took me some time to get my head around how modern OpenGL works.
>do you enjoy using it?
Kinda, figuring out how to optimize the rendering process is actually more fun for me.
>>
>>52667939
>>what do you generally use?
SDL
>>what project are you working on?
a simple UI to execute some commands
>>how hard was it to learn?
A bit
>>do you enjoy using it?
yes, very fun
>>
>>52667939
I just started to learn SDL. Can someone explain why it does this plain faggotry?
#if defined(SDL_MAIN_NEEDED) || defined(SDL_MAIN_AVAILABLE)
#define main SDL_main
#endif

/**
* The prototype for the application's main() function
*/
extern C_LINKAGE int SDL_main(int argc, char *argv[]);

It's in SDL_main.h .
>>
>>52668251
It's for people who simply want to use
int main(int argc, char** argv)
and don't care about the initialization process.
>>
>>52667939
>what do you generally use?
SDL2
>what project are you working on?
Helping a friend with a bomberman and also making a hack & slash in my free time
>how hard was it to learn?
I don't think learning the library it self is hard. Learning where you put the graphical components etc. is harder.
>do you enjoy using it?
yeah it's always fun to achieve something and see what's going on in the screen. More than using a GUI library like Qt or GTK+.


Question related to graphical programming.
For my game when the player click somewhere in the screen, I have to calculate how to go from the point P0(x0, y0) to the point P1(x1, Y1).
Obvious way to calculate the straight line from P0 to P1 is using the
y=ax+b ; a=(y1-y0)/(x1-x0)  and b = y - a*x0

But what about algorithms like this one https://en.wikipedia.org/wiki/Bresenham's_line_algorithm
Do you guys use those algorithms ?
>>
>>52668655
That algorithm isn't useful for a timed traversal, only for drawing the expected straight line approximation.
>>
File: kJSk9.png (569 KB, 1920x1080) Image search: [Google]
kJSk9.png
569 KB, 1920x1080
>>52667939
>what do you generally use?
OpenGL
>what project are you working on?
Fractal renderer in Rust. I'm planning to make GUI library purely in Rust + SDL
>how hard was it to learn?
It wasn't hard. It's pretty straightforward if you already know how graphic rendering works in general
>do you enjoy using it?
It's ok, but I wish there was good wrappers for it in Rust and C++ so I could use features of modern languages.
>>
>>52667939
OpenGL a best

I have too many projects that use it. One of my favorites right now is a Game of Life implementation using GLSL and WebGL but I've also made 3D platformers using OpenGL and C++

As long as you start learning modern OpenGL quickly after you learn the old fixed function pipeline you should be ok. Understanding how buffers and matrix binds work is half the battle. I would say that doing stuff with GLSL is the most fun part of the whole process.

I love OpenGL and hope that Vulkan or whatever the next thing is will further destabilize DirectX as the go to platform since thats one of the main things tying games down to Windows. I mean I can usually do just about everything that can be done in DirectX in OpenGL anyway with enough fiddling.
>>
>>52668315
But you have to call SDL_init anyway, what's the point?
>>
Should I write my own image file parser?
>>
>>52669510
because on Windows it does some voodoo to account for the differing entry points of a console vs Windows program, as well as handling stdin and stdout

it does something similar on OS X too
>>
>>52669580
Only if you feel doing what libpng and libjpeg already do well is worth the learning experience
>>
>>52668007

>>52668974
>I'm planning to make GUI library purely in Rust + SDL
How are you dealing with the fact that SDL2 can't into OS interrupts anymore? They changed the waitEvent function that it works a 10ms delayed polling loop internally...

It bugged the fuck out of grafx in matters of power efficiency.
>>
just use Unity m8
>>
whats the best book to get started with SDL? Anyone?
>>
>>52669168
>since thats one of the main things tying games down to Windows

Pretty sure that the main thing tying games to Windows is the fact that 99% of "gamers" use Windows.

There's a lot more to creating cross platform software than just using a cross platform graphics API, anyways. Studios don't want to develop, test, and maintain multiple versions of a game, especially not for so little return.
>>
File: Frac2.png (3 MB, 1919x1079) Image search: [Google]
Frac2.png
3 MB, 1919x1079
>>52670452
I didn't know about it. I've been thinking about what technology use for that, and SDL seemed like the most reasonable option. I wanted my library to be as simple as possible to implement in your app just like derma. SDL is cross platform, widely used and it would be as simple as forwarding all events to some function and graphic complex to other function every frame.
>>
>>52670486
SDL is easy, there is no need for a book.
Just look for online SDL 2.0 tutorials.
>>
>>52670873
>and it would be as simple as forwarding all events to some function and graphic complex to other function every frame.
But now that you know that SDL will mess with your OSs scheduler, what's next?
>>
>>52670452
>How are you dealing with the fact that SDL2 can't into OS interrupts anymore?

Why did they nerf WaitEvent anyway? Pretty fucking stupid. Now I just poll at the vsync rate.

GLFW looks really nice, much better documentation than SDL (the SDL devs clearly don't give a fuck about SDL2; the development moves at a snail's pace) I might give that a shot, but GLFW doens't have android or ios support.

SFML has event based polling too iirc.
>>
>>52671080
I dunno, I'll make more research.
I wanted to make it modular anyway, so you could be using it no matter if you use SDL, plan opengl or your own engine.
>>
>>52668655
Like >>52668726 said, that's for drawing lines. Yours is fine, just be careful of vertical lines or you'll end up dividing by 0.
>>
>>52670479
>things plebs say
>>
>>52668726
>>52672123
why it wouldn't be good for just moving something on the screen like a character ?
Too complexe for what it does ? No real improvement ?
>>
>>52671781
>>52672004
Allegro supports interrupt based loops, somewhat surprising given their forcus on games alone.
>>
>>52673810
Because that algorithm is for drawing lines. I'm not sure how you intend to use it for movement.
For basic movement you can do something like this
// on click
target_x = mouse.x
target_y = mouse.y
dx = target_x - x
dy = target_y - y
angle = arctan(dx, dy)
x_speed = max_speed*cos(angle)
y_speed = max_speed*sin(angle)

// game loop
dx = target_x - x
dy = target_y - y
if (dx > x_speed)
x += x_speed
else
x = target_x
x_speed = 0
if (dy > y_speed)
y += y_speed
else
y = target_y
y_speed = 0
>>
>>52674233
Implementing it for movement is just :
calculate dx & dy and for each octants calculate D which will gives you the pixel to choose.
Basically once I click I have to calculate
dx = target_x - x;
dy = target_y - y;
D = dy - (dx / 2);


Then
to move it I just have to calculate D
D = D - dy;


But the thing is that I have to do it for each octant
>>
>>52669168
Do you normally get to use a lot of C++ stuff while using OpenGL or is it more like C all the way down?

Just curious before trying to begin learning it.
>>
learn opengl or wait for vulkan ?
>>
>>52674853
What do you gain by doing that? Why not just move along the line directly?
>>
>>52667939
>what do you generally use?
OpenGL, I will switch to Vulkan when it comes out
>what project are you working on?
I have just finished particle system that runs solely on GPU, it was school project
> how hard was it to learn?
I took OpenGL course at univeristy - the old OpenGL with fixed pipeline (though we still learnt about VAOs and VBOs). I switched to modern version year later and it took me like 2 weeks to learn GLSL and all the basic concepts about shaders.
>do you enjoy using it?
Yep, I enjoy programming in modern OpenGL.

Also I suggest GLFW instead of SDL, I have used both and GLFW seems less bloated and more user friendly.
>>
>what do you generally use?
OpenGL with C
>what project are you working on?
masters thesis and medical image processing in opengl
> how hard was it to learn?
learned the basics from the redbook and doing stuff on my own.
>do you enjoy using it?
Its awesome and super portable between different os.
>>
File: WLW2mfT.png (1001 KB, 1600x900) Image search: [Google]
WLW2mfT.png
1001 KB, 1600x900
>>52667939
>what do you generally use?
I use OpenGL & C++ without actual C++ features. Don't usually want to do anything complex enough to make using classes cost effective. Don't use any libraries besides the minimal requirement (xwind on linux and winapi (lol) on windows).
>what project are you working on?
fractals, physics sims using quadtree/octree, trying to figure out how to do convolutional neural networks for image processing or game AI, recently found out about perturbation for mandelbrot/julia and still trying to understand how that works
>how hard was it to learn?
not hard at all, I first learned OpenGL from nehe gamedev website
>do you enjoy using it?
yes.. muh fractals
>>
File: 2KGsb46.jpg (97 KB, 1600x900) Image search: [Google]
2KGsb46.jpg
97 KB, 1600x900
>>52668974
I see you are using a normalized escape count with a small (close to 1) escape threshold in that image.

Also, dumping images from programs I've wrote I guess.
>>
File: boxframe.webm (3 MB, 1280x720) Image search: [Google]
boxframe.webm
3 MB, 1280x720
shadertoy is a good place to program opengl shaders if you like raymarching and stuff
>>
File: fo6dGUD.jpg (696 KB, 1600x900) Image search: [Google]
fo6dGUD.jpg
696 KB, 1600x900
>>52675657
if you are only programming on linux and nothing else, xwind is more universal and will work on basically every distro of linux and I think mac as well
>>
File: L7SSY50.jpg (132 KB, 1600x900) Image search: [Google]
L7SSY50.jpg
132 KB, 1600x900
This is a render of julia set using pickover stalks. Instead of coloring the fractal based on escape count, it colors based on closest approach to the x/y axis.
>>
File: 6aBy6XQ.jpg (232 KB, 1600x900) Image search: [Google]
6aBy6XQ.jpg
232 KB, 1600x900
mandelbrot in pickover style
>>
>>52676127
Good to know, but I use Windows for graphics programming.
>>
>>52676188
>it colors based on closest approach to the x/y axis

What does that mean ?
>>
File: I8A8WOC.jpg (117 KB, 1600x900) Image search: [Google]
I8A8WOC.jpg
117 KB, 1600x900
>>52676267
I've only used winapi on windows, seems to have everything I need to just make a window and get mouse/keyboard events. I've heard .net and WPF are a lot better and have some nice features in them tho. Winapi will still compile the smallest executable if you care about that.
>>
>>52667939
>what do you generally use?
OpenGL
>what project are you working on?
strategy game
>how hard was it to learn?
dunno
>do you enjoy using it?
i guess

>>52675054
learn opengl
vulkan/d3d12 assume prior experience
>>
>>52667939
>what do you generally use?
SMFL
>what project are you working on?
compiler, databases, but sfml for ui and shit
>how hard was it to learn?
hard
>do you enjoy using it?
yes
>>
File: eUNJj2t.jpg (232 KB, 1600x900) Image search: [Google]
eUNJj2t.jpg
232 KB, 1600x900
>>52676381
usually for a mandelbrot set you render like this:
vec2 zn;
vec2 z=z0;
for(int i=0;i<max_iter;i++)
{
zn.x = (z0.x*z0x-z0.y*z0.y)+c.x;
zn.y = (z0.x*z0x+z0.y*z0.y)+c.y;
z=zn;
if(distance(z)>escape_thres) break;
}

color based off of last i value before break
there's a formula that combines i with the last z value to get a smooth value instead of integer as well called the normalized escape count

for a pickover mandelbrot you do this:
vec2 zn;
vec2 z=z0;
vec2 zmin=vec2(100000.0);//big number
for(int i=0;i<max_iter;i++)
{
zn.x = (z0.x*z0x-z0.y*z0.y)+c.x;
zn.y = (z0.x*z0x+z0.y*z0.y)+c.y;
z=zn;
if(distance(z)>escape_thres) break;
zmin=min(zmin,abs(zn));
}

then you color based on the value:
closest = min(zmin.x,zmin.y);

I usually put whatever value it is into a sin function like this:
color.r = sin(value + 0.4);
color.g = sin(value + 0.8);
color.b = sin(value + 1.2);
>>
>>52675991
>physics sims using quadtree/octree
Do you have some book/tutorial recommendations? I'm a physicist, I'm only interested on the algorithmic/datastructure part.
>>
>>52675117
it remove the multiplication for each path
>>
>>52676596
>path
step.
Every time you have to check were to move you just have one subtraction or addition to do and not a multiplication. It's about optimization, but I don't know if you gain a lot nowadays.
>>
>>52676385
I used native windows api in delphi - I loved that the size of the app was less than 100KB, if you used delphi gui lib it was about more than 2MB (and more than 10MB with Lazarus). I'll give it a try again when the Vulkan comes out.
>>
File: attractor.png (1 MB, 1920x1080) Image search: [Google]
attractor.png
1 MB, 1920x1080
>>52676563
I based my implementation off of what was written on wikipedia for quadtree/octree. The quadtree page is easier to follow than the octree one. For either case, you have to write a function that inserts all of your points/objects into the data structure and has to be recursive in order to be the optimal big O speed. For my implementation of a quadtree I used a big static array of something like this:

struct node
{
node *children[4];
float points[2*MAX_POINTS];
int numPoints;
boolean leaf;
float bounds[8];
float center[2];
}


I'm still trying to write a working barnes hut implementation on it so I can simulate colliding galaxies. So far all I can do is collide particles.
>>
>>52676040
Yeah. It took me some time to realize what's wrong. But the effect was surprisingly nice looking.

>>52676188
>>52676235
>>52676551
Awesome.
>>
bamp4u guys.
lovin the fractals btw.
>>
File: Attractor 2014-02-20 18-49-44-77.png (421 KB, 1920x1080) Image search: [Google]
Attractor 2014-02-20 18-49-44-77.png
421 KB, 1920x1080
Here's some old pastebins in case anyone wants.

Attractor fractal renderer (compiles on visual studio):
http://pastebin.com/5pcsgFzt

OpenGL font in linux:
http://pastebin.com/X8PV31Bd

N-Body sim for linux (not a very good one):
http://pastebin.com/NKiMWTwR

pic shows an attractor fractal along with the custom OpenGL font.
>>
>>52679035
>>
File: 01.png (106 KB, 1032x746) Image search: [Google]
01.png
106 KB, 1032x746
>>52679035
pic from the nbody sim
>>
I find it weird that people in /g/ doesn't seems to give a fuck about graphical programming.

Anyway
>>52668655
>>52668726
>>52672123
>>52674233
>>52675117
http://pastebin.com/Z1VjYtcr
Here's how I did it.
When player click somewhere, it calls the first function to find the variables -dx, dy & d
Then I can call the second function to get there.
And I realize I should optimize some parts of the code
>>
these are really cool though I'm too lazy to dl and compile

When you have C or C++ projects using few libraries and doing OpenGL stuff, consider porting them to browser/WebGL with emscripten. Works quite well and has good support for SDL, GLFW, and some others. These kinds of web demos sometimes make a killing and I think the emscripten porting is really neat
>>
>>52679778
asm.js is a meme
>>
File: tav4o4H.png (11 KB, 739x563) Image search: [Google]
tav4o4H.png
11 KB, 739x563
I've made a software engine that uses the windows console as the output, it's done in C++.

It doesn't use OpenGL or anything like that. I've seen some use the GPU and just draw the framebuffer on the console, but that's not what I do, it's entirely done in software and no libraries are used besides the ones that Windows has for the console.

Been adding to it when I free time, but I haven't really touched it in some months sadly.

I think software engines are really cool and you learn a lot from it even if it's not very useful. I recommend anyone who is into graphics programming to try to make a simple software renderer

I have some videos of it running smoothly if anyone wants.
>>
>>52667939
>what do you generally use?
Monogames
>what project are you working on?
Working on a 2D platformer with 3D assets.
>how hard was it to learn?
Very easy and straight forwards especially if you've worked with OpenGl in the past.
>do you enjoy using it?
Greatly. It allows for cross compile between different platforms so I can have my windows solution use DirectX and my Linux/Android solution use openGl. And there's talk of adding Vulkan and DX12 support.
>>
File: renderer.jpg (206 KB, 1440x900) Image search: [Google]
renderer.jpg
206 KB, 1440x900
>>52680127
Yeah, writing your own software renders are fun.
Here is mine made in Garry's Mod.
>>
>>52683320
Wiremod?
>>
File: miku1.jpg (331 KB, 1440x900) Image search: [Google]
miku1.jpg
331 KB, 1440x900
>>52683412
Yes. I made it in Expression 2 and then ported to StarFall for better performance.


Also one of best challenge I've ever made was to create arbitrary object renderer(renders .obj file instead of using raytraceing from source engine) in Garry's Mod. I will write short summary:

First I've got some MikuMikuDance Miku model and used some plugin to import to blender. Posed it and extracted to .obj model because it's the easiest to parse. Then I've figured out how this format works and wrote parser in Starfall. I've read about matrices and used 3 matrices (Model, World and perspective) to translate 3D points to 2D screen space. I've also decided to use StarFall screen because it gives the best possible performance and features, but sadly doesn't have depth buffer, 3D acceleration or anything like that(Which means more fun coding!). The result was this wireframe.

(cont.)
>>
File: miku2.jpg (140 KB, 1440x900) Image search: [Google]
miku2.jpg
140 KB, 1440x900
Then it was time to made some simple shading. Starfall screen only allows you to render 2D triangles and rectangles and lines of any color and in-game(!) texture. so I've just took some arbitrary point in space and considered it as light source. The color of face was calculated by something like min(ambientlight, dot(cameraToFaceCenter, FaceCenterToLight))
The faces were pre-sorted so I didn't had to bother with depth buffer.

(cont.)
>>
File: miku3.jpg (262 KB, 1440x900) Image search: [Google]
miku3.jpg
262 KB, 1440x900
I realized it has pretty good performance, so I've changed to more high poly model. I wanted to texture it but couldn't come with anything, so I've made simple lua script that took UV pos of centre of every face, take color of it and expanded the .obj format with new data that determines color of face. Then I've multiplied color by light and got this. Here I used build-in qsort function for sorting triangles so the closer faces get rendered last.

(cont.)
>>
File: miku4.jpg (208 KB, 1440x900) Image search: [Google]
miku4.jpg
208 KB, 1440x900
Then I came up with idea for textures. When I create render target inside the screen to render data on virtual texture, I can use them as texture for these triangles. But parsing png file in Starfall would take ages. So I wrote small php script to get image from any url and return its pixel data. After overcoming some bugs(my php didn't wanted to send some ascii chars for some reason) I was able to download pixel data to my chip. Now to put it on texture I render 1x1 pixel rectangles on the virtual texture. Because obj has UVs, I could render whole model textured. It's still full bright though.

(cont.)
>>
>>52667939
I've never really done much graphics programming lately.
Last time I did it I used gloss which is a nice 2D library for Haskell, using OpenGL.
Else I've only used SDL with PyGame.
>>
File: miku.jpg (213 KB, 1440x900) Image search: [Google]
miku.jpg
213 KB, 1440x900
Loading textures does take some time(1-5 minutes) but the object renders fines(1FPS on screen in Gmod is A LOT).
Now I wanted to make smooth lighting. I realized I can just use gradients. I've found in game files a texture that is just 256x256 top-down gradient from transparent to black. To calculate lighting for every vertex I used similar algorythm, but this time I took vertex normal vector in account. To shade face I had to render it twice. One to draw texture and then to put this shadow gradient on top of it. Calculating shading UVs was rather easy, [(0, light), (0.5, light), (1, light)]
Seeing how well everything works I thought: "Why not optimalize shit out of it?". I've exported ApiMiku model which is has thousands polygons. The first problem was that StarFall rendering script is getting executed every frame, but it has limited CPU time. Usually it's not a problem because you can always yield and wait for next frame but when I run build-in qsort it doesn't have enough CPU time to finish. I can't yield inside the user defined comparing function, because its not supported. Writing qsort in Lua was extremely slow and got me really low FPS(0.01 or something).
After some time I've come up with something. Lua has very efficient (hash)tables so why not just use bucket sort? I've defined table[1000] of arrays and put every face to corresponding bucket's arrays basing on where is it placed between far and near clipping plane. Then I just iterated ever these buckets to render from the furthest to nearest faces. It was surprisingly fast, even faster than native qsort. But it was still not enough.
The screen is only 512x512 so there was many faces that were too small to render. I made Lua script to find all vertices that are very close to each other and merged them, then it took every face and deleted these which ended up being infinitesimal. This boosted my performance a lot while the model still looked the same. I ended up with 2 FPS which is incredible for gmod
>>
File: raytrace.jpg (157 KB, 1366x768) Image search: [Google]
raytrace.jpg
157 KB, 1366x768
Also posting some more raytraces.
>>
File: raytrace2.jpg (271 KB, 1366x768) Image search: [Google]
raytrace2.jpg
271 KB, 1366x768
And that's all
>>
File: 1437339616680.png (12 KB, 642x501) Image search: [Google]
1437339616680.png
12 KB, 642x501
I suck at graphics.
This is my 2D rasterizer, I can't even do 3D matrix transformation.
>>
I didn't think I would ever witness a thread with so many closeted graphics programmers.
It got interesting really quickly.
>>
>>52685074
I wanted to contribute, but I haven't progressed enough in my HSA rasterizer to have anything to show.
>>
>>52685074
We used to have a daily graphics programming thread but it always dies out.
>>
File: TlMY3ao.jpg (909 KB, 2048x1366) Image search: [Google]
TlMY3ao.jpg
909 KB, 2048x1366
I have a question, fellow graphicsfags

I'm using OpenGL ES 2 (I know, I know) to render hundreds of really simple quads.

Because most hardware that runs OpenGL ES 2 is garbage, I can't spam a lot of draw calls without getting garbage performance

So you'd think I could just merge all the quads together and draw them at once... except I need most of the quads to have an individual transform.

The only thing I can think of doing is premultiplying the transforms against all the vertices CPU-side and then uploading the vertex buffer every single frame

Any other suggestions for a better way to render lots of quads?
>>
>>52669580
Depends on the image format you want. I think It's worth doing once, to see all the crap that has to be dealt with. Something simple like ppm/ppm or tga are good for this exercise. Unless you're dealing with a really unusual format though, use one of the standard libraries for anything outside of that exercise.
>>
>>52683830
holy
>>
are the first google results for OpenGL tutorials good or shit-tier/outdated?

should I go straight for a book? any recommendations?
>>
>>52685786
>Deprecated features include:
>All fixed-function vertex and fragment processing
>Direct-mode rendering, using glBegin and glEnd
>Display lists
>Indexed-color rendering targets
>OpenGL Shading Language versions 1.10 and 1.20

Just look what kind of function does it use.

>>52685180
Are you making a particle system?
I'm not an expert, but I've heard Compute Shader are great for something like that, but I don't know if OpenGL ES 2 supports it.
If you could generate all these transforms from some seed values, you could just do it do it in shader and send data through uniforms.
Otherwise, it can't be helped. You'll have to calculate them on CPU and stream to GPU memory.

>>52685680
I'm glad you enjoyed it.
>>
File: d7872c6892.webm (3 MB, 1918x1060) Image search: [Google]
d7872c6892.webm
3 MB, 1918x1060
>>52667939
>what do you generally use?
Vulkan ;}
>what project are you working on?
This
>how hard was it to learn
Not
>do you enjoy using it?
Yes
>>
>>52685786
There's no problem starting with the fixed pipeline as a beginner - the basic concepts are the same, setting up vertices, attributes and transforms whether you use the fixed or programmable one.
If you start with the pure programmable one (i.e core 3.3+) you will inevitably end up implementing a kind of abstraction layer mimicking the fixed functionality anyway because the fixed pipeline is way more convenient for quick hacks and experiments - just pull in some 2.x shaders and you can follow most shader effect tutorials as well.
>>
File: the matrix.jpg (44 KB, 632x480) Image search: [Google]
the matrix.jpg
44 KB, 632x480
>>52667939
>>52667939
>what do you generally use?
GDI+

>what project are you working on?
cloud Visualizer

>how hard was it to learn?
I can't feel my legs
>do you enjoy
>>
We're having a plotting challenge at /sci/ and I thought some of you would be interested.

>>>/sci/7819684

t. /sci/ crossposter
Thread replies: 83
Thread images: 28

banner
banner
[Boards: 3 / a / aco / adv / an / asp / b / biz / c / cgl / ck / cm / co / d / diy / e / fa / fit / g / gd / gif / h / hc / his / hm / hr / i / ic / int / jp / k / lgbt / lit / m / mlp / mu / n / news / o / out / p / po / pol / qa / r / r9k / s / s4s / sci / soc / sp / t / tg / toy / trash / trv / tv / u / v / vg / vp / vr / w / wg / wsg / wsr / x / y] [Home]

All trademarks and copyrights on this page are owned by their respective parties. Images uploaded are the responsibility of the Poster. Comments are owned by the Poster.
If a post contains personal/copyrighted/illegal content you can contact me at [email protected] with that post and thread number and it will be removed as soon as possible.
DMCA Content Takedown via dmca.com
All images are hosted on imgur.com, send takedown notices to them.
This is a 4chan archive - all of the content originated from them. If you need IP information for a Poster - you need to contact them. This website shows only archived content.