This commit is contained in:
Miloslav Ciz 2024-08-01 02:31:53 +02:00
parent df80221a15
commit 9fc5ae8d5b
16 changed files with 2136 additions and 1807 deletions

View file

@ -12,6 +12,8 @@ Maybe most depressing of all is that people reading this article think it's some
Human is dead, he was replaced by [economy](economy.md). There are just things such as economy, laws, [rights](right_culture.md), countries, prosperity, [justice](justice.md), [correctness](political_correctness.md), then also more economy, money and prosperity, "progress", [modern](modern.md) technology and many other things, but no human. You dislike what you do and think it has no meaning? Shut up and serve the economy -- that's the OFFICIAL justification to any complaint. You are suffering every day agony and want to kill yourself? Yeah it's not ideal but shut up and serve the economy. Next: your kids are dying and are being raped every day? Yeah that's maybe not so good but anyway, shut up and serve the economy. Next.
There are now plants that could possibly end the world hunger but in [capitalism](capitalism.md) corporations can own biological species (see *plant breeders' """rights"""*) so these plants' DNA is now someone's property and the plants are forbidden to be grown by people so that hunger is sustained so that business built on top of hunger can be sustained. This is not even concealed or controversial anymore, people can do nothing about it -- there are children starving, chewing on truck tires in garbage dumps, there is food for them but they mustn't eat it because a rich faggot needs to be a tiny bit richer so the child is left to perish, that's just standard life in 21st century.
Literally in your living room, in your pocket there is constantly an annoying retard telling you to [consoome](consumerism.md), you pay him to invade your life and constantly bother you. Is this believable? No, but it is happening, no one even thinks it's weird lol.
In 21st century if you buy something there is only about 0.03% chance it will work. There is probably some law that says that if you buy something it should work, but in practice there are no laws because even if you could probably sue the seller, it would mean investing $100000000 and about 10 years of every day going to the court to get your $100 back, and the result isn't guaranteed anyway because for your investment you'll be able to afford maybe 3 lawyers while the corporation will have about 100 to 100000 lawyers, it's very unlikely you would beat that, so you just won't do it, you will just keep buying the thing over and over and praying it works. The exact breaking rates are fine tuned by special departments so as to not make people give up on buying the thing completely, but to make them buy as many of them as possible. This is basically completely optimized [capitalism](capitalism.md). Even if the thing works when you buy it, it will at best last maybe 3 days or 3 and a half days. It's similar with [work](work.md) (slavery) -- in theory there is some kind of minimum wage you should be paid but in practice you'll be very lucky to even be paid anything -- again, you could in theory sue your employer for not paying you but you can't really do it -- if you come naked or in bad clothes to the court you'll be automatically ruled guilty and since you have no money because the employer didn't pay you, you can't afford the required $1000000 suit, so you can't sue anyone -- so laws de facto only exist so that law makers have a job, they can't be used (well they can, but only by corporations). { I personally have this experience with computer mice -- I bought many mice this way because they just never worked, eventually I just gave up and stopped playing shooter games, I realized it's better to learn living without a working computer mouse, otherwise I would just spend all my life savings on them. Lol also recently I got a paddle board for birthday, it exploded in a week. ~drummyfish }

View file

@ -275,9 +275,311 @@ Let's see what a typical pipeline might look like, similarly to something we mig
4. **Stage: vertex post processing**: Usually not programmable (no shaders here). Here the GPU does things such as [clipping](clipping.md) (handling vertices outside the screen space), primitive assembly and [perspective divide](perspective_divide.md) (transforming from [homogeneous coordinates](homogeneous coordinates.md) to traditional [cartesian coordinates](cartesian_coordinates.md)).
5. **Stage: [rasterization](rasterization.md)**: Usually not programmable, the GPU here turns triangles into actual [pixels](pixel.md) (or [fragments](fragment.md)), possibly applying [backface culling](backface_culling.md), [perspective correction](perspective_correction.md) and things like [stencil test](stencil_test.md) and [depth test](dept_test.md) (even though if fragment shaders are allowed to modify depth, this may be postpones to later).
6. **Stage: pixel/fragment processing**: Each pixel (fragment) produced by rasterization is processed here by a [pixel/fragment shader](fragment_shader.md). The shader is passed the pixel/fragment along with its coordinates, depth and possibly other attributes, and outputs a processed pixel/fragment with a specific color. Typically here we perform [shading](shading.md) and [texturing](texture.md) (pixel/fragment shaders can access texture data which are again stored in texture buffers on the GPU).
7. Now the pixels are written to the output buffer which will be shown on screen. This can potentially be preceded by other operations such as depth tests, as mentioned above.
7. Now the pixels are written to the output buffer which will be shown on screen. This can potentially be preceded by other operations such as depth tests, as mentioned above.
TODO: example of specific data going through the pipeline
### Complete Fucking Detailed Example Of Rendering A 3D Model By Hand
WORK IN PROGRESS
{ This turned out to be long as hell, sowwy. ~drummyfish }
This is an example of how two very simple 3D models would be rendered using the traditional triangle rasterization pipeline. Note that this is VERY simplified, it's just to give you an idea of the whole process, BUT if you understand this you will basically get an understanding of it all.
Keep in mind this all can be done just with [fixed point](fixed_point.md), [floating point](float.md) is NOT required.
First we need to say what conventions we'll stick to:
- We'll be using ROW VECTORS, i.e. we'll be writing vectors like [x,y,z]. Some people rather use column vectors, which then means their matrices are also transposed and they do multiplication in opposite direction etcetc. Watch out about this, it's quite important to know which convention you're using, because e.g. matrix multiplication is non-commutative (i.e. with matrices A * B does NOT generally equal B * A) and the order you need to multiply in depends on this convention, so be careful.
- Counterclockwise triangles are front facing, clockwise ones are back facing (invisible).
- We'll be using LEFT HANDED coordinate systems, i.e X axis goes right, Y goes up, Z goes forward (right handed system would be the same except Z would go the opposite way -- backwards). Watch out: some systems (for example OpenGL) use the other one. I.e. our coordinate system looks like this:
Y ^ _
| _/| Z
| _/
|_/
'-------> X
Now let's have a simple **3D model data** of a quad. Quad is basically just a square made of four vertices and two triangles, it will look like this:
*quadModel*:
v3________v2
| _/ |
| _/ |
| _/ |
|/_______|
v0 v1
In a computer this is represented with two arrays: vertices and triangles. Our vertices here are (notices all Z coordinates are zero, i.e. it is a 3D model but it's flat):
*quadVertices*:
```
v0 = [-1, -1, 0]
v1 = [ 1, -1, 0]
v2 = [ 1, 1, 0]
v3 = [-1, 1, 0]
```
And our triangles are (they are indices to the vertex array, i.e. each triangle says which three vertices from the above array to connect to get the triangle):
*quadTriangles*:
```
t0 = [0,1,2]
t1 = [0,2,3]
```
Note the triangles here (from our point of view) go counterclockwise -- this is called *winding* and is usually important because of so called **backface culling** -- the order of vertices basically determines which is the front side of the triangle and which is the back side, and rendering systems often just draw the front sides for efficiency (back faces are understood to be on the inside of objects and invisible).
Now the vertex coordinates of the model above are in so called **model space** -- these are the coordinates that are stored in the 3D model's file, it's the model's "default" state of coordinates. The concept of different spaces is also important because 3D rendering is a lot about just transforming coordinates between different spaces ("frames of reference"). We'll see that the coordinates in model space will later on be transformed to world space, view space, clip space, screen space etc.
OK, so next let's have 2 actual **3D model instances** that use the above defined 3D model data. Notice the difference between 3D model DATA and 3D model INSTANCE: instance is simply one concrete, specific model that has its own place in the global 3D world (world space) and will be rendered, while data is just numbers in memory representing some 3D geometry etc. There can be several instances of the same 3D data (just like in [OOP](oop.md) there can be multiple instances/objects of a class); this is very efficient because there can be just one 3D data (like a model of a car) and then many instances of it (like many cars in a virtual city). Our two model instances will be called *quad0* and *quad1*.
Each model instance has its own **transformation**. Transformation says where the model is placed, how it's rotated, how it's scaled and so on -- different 3D engines may offer different kind of transformations, some may support things like flips, skews, non-uniform scaling, but usually at least three basic transforms are supported: translation (AKA offset, shift, position), rotation and scale. The transforms can be combined, e.g. a model can be shifted, rotated and scaled at the same time. Here we'll just rotate *quad0* by 45 degrees (pi/4 radians) around Y (vertical) axis and translate *quad1* one unit to the right and 2 back:
*quad0*:
- translation = [0,0,0]
- rotation = [0,pi/4,0]
*quad1*:
- translation = [1,0,2]
- rotation = [0,0,0]
So now we have two model instances in our world. For rendering we'll also need a **camera** -- the virtual window to our world. Camera is also a 3D object: it doesn't have 3D model data associated but it does have a transformation so that we can, naturally, adjust the view we want to render. Camera also has additional properties like field of view (FOV), aspect ratio (we'll just consider 1:1 here), near and far distances and so on. Our camera will just be shifted two units back (so that it can see the first quad that stays at position [0,0,0]):
*camera*:
- translation = [0,0,-2]
- rotation = [0,0,0]
It is important to mention the **near and far planes**. Imagine a camera placed at some point in space, looking in certain direction: the volume of space that it sees creates a kind of infinitely long pyramid (whose "steepness" depends on the camera field of view) with its tip at the point where the camera resides. Now for the purpose of rendering we define two planes, perpendicular to the camera's viewing direction, that are defined by the distance from the camera: the near plane (not surprisingly the one that's the nearer of the two) and the far plane. For example let's say our camera will have the near plane 1 unit in front of it and the far plane 5 units in front of it. These planes will CUT OFF anything that's in front and beyond them, so that only things that are BETWEEN the two planes will be rendered (you can notice this in games with render distance -- if this is not cleverly masked, you'll see things in the distance suddenly cut off from the view). These two planes will therefore CUT OFF the viewing pyramid so that now it's a six sided, finite-volume shape that looks like a box with the front side smaller than the back side. This is called the **view frustum**. Nothing outside this frustum will be rendered -- things will basically be sliced by the sides of this frustum.
You may ask WHY do we establish this frustum? Can't we just leave the near and far planes out and render "everything"? Well, firstly it's obvious that having a far cutoff view distance can help performance if you have a very complex model, but this is not the main reason why we have near and far planes. We basically have them for mathematical convenience -- as we'll see for example, perspective mapping means roughly "dividing by distance from camera" and if something was to be exactly where the camera is, we'd be dividing by zero! Attempting to render things that are just very near or on the back side of the camera would also do very nasty stuff. So that's why we have the near plane. In theory we might kind of get away with not having a strict far plane but it basically creates a nice finite-volume that will e.g. allow us to nicely map depth values for the z-buffer. Don't worry if this doesn't make much sense, this is just to say there ARE good reasons for this stuff.
Now let's summarize what we have with this top-down view of our world (the coordinates here are now *world space*):
```
Z
:
- - - - - - - 3 + - - - - - - - - far plane
:
:
2 +-----*------ quad2
:
:
1 +
: quad1
0 : _/
.|.....|.....*/....|.....|. X
-2 -1 _/: 1 2
. / : .
- - - - -'.=====:=====.'- - - - - near plane
'. : .'
'. : .'
-2 '*' camera
:
:
```
NOW actually let's see how to in fact render this. The big picture overview is this:
1. Get the model instances from model space to world space, i.e. transform their vertex coordinates according to each instance's transformation.
2. Get the model instances from world space to view space (AKA camera space). View space is the coordinate system of the camera in which the camera sits in the origin (poinr [0,0,0]) and is looking straight forward along the positive Z axis direction.
3. Get the model instances from view space to clip space. This applies perspective (deforms objects so that the further away ones become smaller as by distance) and transform everything in the view frustum to a nice cube of fixed size and with walls aligned with principal axes (unlike view frustum itself).
4. Clip everything outside the clip space, i.e. throw away everything outside the box we've got. If some things (triangles) are partially in and partially out, we CLIP them, i.e. we literally cut them into several parts and throw away the parts that aren't in (some simpler renderers just do simpler stuff like throw away anything that sticks outside or just force push the vertices inside but it will look a bit awkward).
5. Get everything from clip space into screen space, i.e. to actual pixel coordinates of the screen we are rendering to.
6. Rasterize the triangles of the models between the points we have mapped to the screen now, i.e. literally fill all the triangle pixels so that we get the final image.
As seen this involves doing many transformations between different spaces. We do these using **[linear algebra](linear_algebra.md)**, i.e. with **[vectors](vector.md)** and **[matrices](matrix.md)**. Key things here are:
- We can represent all the transformations that we need using matrices.
- Every such transformation (translation, rotation, scale, ...) can be represented with one 4x4 matrix.
- To apply a transformation to a model we simply multiply each of its vertices with the transformation matrix. So if we want to rotate a model by 30 degrees, we make a matrix that represents this rotation and just multiply all the model's vertices and it's done. Pretty elegant!
- AMAZING stuff: any number of these transformations combined in ANY order can still be represented just by a single 4x4 matrix! You just take the matrix of each of the transformations, multiply them together and you get a matrix that just does all these transformation at once. Duuuude what? Yeah that's right, this is extremely awesome, isn't it? We can basically create a single matrix that combines in it all the above mentioned rendering steps and it will just do everything. This is not only elegant but also very efficient (instead of just moving, rotating and scaling points there and back many times we simply perform ONE matrix multiplication for each vertex and that's it).
You HAVE TO learn how to multiply vector with matrix and matrix with matrix (it's not hard) else you will understand nothing now.
BIG BRAIN MOMENT: **[homogeneous coordinates](homogeneous_coordinates.md)**. Please DO NOT ragequit, it looks complicated as hell (it is a little bit) but it makes sense in the end, OK? We have to learn what homogeneous coordinates are because we need them to be able to do all the awesome matrix stuff described above. In essence: in 3D space we can perform linear transformations with 3x3 matrices -- linear operations are for example scaling and rotation, BUT some, most importantly translation (shifting and object, which we absolutely NEED), are not linear (but rather [affine](affine.md)) so they cannot be performed by a 3x3 matrix. But it turns out that if we use special kind of coordinates, we CAN do affine 3D transformations with 4x4 matrices, OK? These special coordinates are homogeneous coordinates, and they simply add one extra coordinate, *w*, to the original *x*, *y* and *z*, while it holds that that multiplying all the *x*, *y*, *z* and *w* components by the same number does nothing with the point they represent. Let's show it like this:
If we have a 3D point [1,2,3], in homogeneous coordinates we can represent it as [1,2,3,1] or [2,4,6,2] or [3,6,9,3] and so on. That's easy no? So we will ONLY add an additional 1 at the end of our vertex coordinates and that's basically it.
Let's start doing this now!
Firstly let us transform *quad0* from model space to world space. For this we construct so called **model matrix** based on the transformation that the model instance has. Our *quad0* is just rotated by pi/4 radians and for this the matrix will look like this (you don't have to know why, you usually just look up the format of the matrix somewhere, but you can derive it, it's EZ):
*quad0* model matrix:
```
| cos(A) 0 sin(A) 0| |0.7 0 0.7 0|
Mm0 = | 0 1 0 0| ~= |0 1 0 0|
|-sin(A) 0 cos(A) 0| |-0.7 0 0.7 0|
| 0 0 0 1| |0 0 0 1|
```
Let's see if this works, we'll try to multiply the first model vertex with this matrix (notice we add 1 at the end of the vertex, to convert it to homogeneous coordinates):
```
|0.7 0 0.7 0|
|0 1 0 0|
|-0.7 0 0.7 0|
|0 0 0 1|
v0 * Mm0 = [-1, -1, 0, 1] [-0.7 -1 -0.7 1] <-- result
```
So from [-1,-1,0] we got [-0.7,-1,-0.7] -- looking at the top-down view picture above this seem pretty correct (look at the coordinates of the first vertex). Try it also for the rest of the vertices. Now for the model matrix of *quad1* (again, just look up what translation matrix looks like):
*quad1* model matrix:
```
|1 0 0 0|
Mm1 = |0 1 0 0|
|0 0 1 0|
|1 0 2 1|
```
Here you can even see that multiplying a vector by this will just add 1 to *x* and 2 to *z*, right? Again, try it.
NEXT, the **view matrix** (matrix that will transform everything so that it's "in front of the camera") will basically just do the opposite transformation of that which the camera has. Imagine if you shift a camera 1 unit to the right -- that's as if the camera stands still and everything shifts 1 unit to the left. Pretty logical. So our view matrix looks like this (notice it just pushes everything by 2 to the front):
*view matrix*:
```
|1 0 0 0|
Mv = |0 1 0 0|
|0 0 1 0|
|0 0 2 1|
```
Then we'll need to apply perspective and get everything to the clip space. This will be done with so called **projection matrix** which will in essence make the *x* and *y* distances be divided by the *z* distance so that further away things will shrink and appear smaller. You can derive the view matrix, its values depend on the field of view, near and far plane etc., here we'll just copy paste numbers into a "template" for the projection matrix, so here it is:
*projection matrix* (*n* = near plane distance, *f* = far plane distance, *r* = right projection plane distance = 1, *t* = top projection plane distance = 1):
```
|n/r 0 0 0| |1 0 0 0|
Mp = |0 n/t 0 0| = |0 1 0 0|
|0 0 (f+n)/(f-n) 1| |0 0 3/2 1|
|0 0 -2*f*n/(f-n) 0| |0 0 -5/2 0|
```
This matrix will basically make the points so that their *w* coordinates will be such that when in the end we divide all components by it (to convert them back from [homo](gay.md)geneous coordinates), we'll get the effect of the perspective (it's basically the "dividing by distance from the camera" that perspective does). That is what the homogeneous coordinates allow us to do. To visually demonstrate this, here is a small picture of how it reshapes the view frustum into the clip space box (it kind of "squishes" all in the back of the frustum pyramid and also squeezes everything to shape it into that little box of the clipping space, notice how the further away objects became closer together -- that's the perspective):
```
___________________ far plane _____________
\ A B C / | ABC |
\ / | |
\ D E F / | D E F |
\ / | |
\G H I/ |G H I|
\_______/ near plane |_____________|
: : : :
: : : screen :
: : : :
* camera
```
At this point we have the matrices of the individual transforms, but as we've said, we can combine them into a single matrix. First let's combine the view matrix and projection matrix into a single view-projection matrix by multiplying the two matrices (WATCH OUT: the order of multiplication matters here! It defines in which order the transformations are applied):
*view-projection matrix*:
```
|1 0 0 0|
Mvp = Mv * Mp = |0 1 0 0|
|0 0 3/2 1|
|0 0 1/2 2|
```
The rendering will begin with *quad0*, we'll combine its model matrix and the view-projection matrix into a single uber matrix that will just do the whole transformation for this model instance:
*quad0 model-view-projection matrix*:
```
|0.7 0 21/20 0.7|
Mm0vp = Mm0 * Mvp = |0 1 0 0 |
|-0.7 0 21/20 0.7|
|0 0 1/2 2 |
```
Now we'll just transform all of the model's vertices by multiplying with this matrix, and then we'll convert back from the homogeneous coordinates to "normal" coordinates by dividing all components by *w* (AKA "perspective divide") like this:
```
v0: [-1, -1, 0, 1] (matrix multiplication) => [-0.7, -1, -0.55, 1.3] (w divide) => [-0.53, -0.76, -0.43]
v1: [ 1, -1, 0, 1] (matrix multiplication) => [ 0.7, -1, 1.55, 2.7] (w divide) => [ 0.26, -0.37, 0.57]
v2: [ 1, 1, 0, 1] (matrix multiplication) => [ 0.7, 1, 1.55, 2.7] (w divide) => [ 0.26, 0.37, 0.57]
v3: [-1, 1, 0, 1] (matrix multiplication) => [-0.7, 1, -0.55, 1.3] (w divide) => [-0.53, 0.76, -0.43]
```
And let's also do this for *quad1*.
*quad1 model-view-projection matrix*:
```
|1 0 0 0|
Mm1vp = Mm1 * Mvp = |0 1 0 0|
|0 0 3/2 1|
|0 0 7/2 4|
```
and
```
v0: [-1, -1, 0, 1] (matrix multiplication) => [-1, -1, 3.5, 4] (w divide) => [-0.25, -0.25, 0.87]
v1: [ 1, -1, 0, 1] (matrix multiplication) => [ 1, -1, 3.5, 4] (w divide) => [ 0.25, -0.25, 0.87]
v2: [ 1, 1, 0, 1] (matrix multiplication) => [ 1, 1, 3.5, 4] (w divide) => [ 0.25, 0.25, 0.87]
v3: [-1, 1, 0, 1] (matrix multiplication) => [-1, 1, 3.5, 4] (w divide) => [-0.25, 0.25, 0.87]
```
Hmmm mkay let's draw the transformed points to an X/Y grid:
```
Y
|
[-1,1]|_______________:_______________[1,-1]
| |
| v3 +--.... |
| | '''---+ v2 |
| | .'| |
| |v3 +-----:--|+ v2 |
| | | .' ..|| |
--| | | :..' || |--
| | | '' || |
| |v0 +'-------|+ v1 |
| | : | |
| |.' ...---+ v1 |
| v0 +--'''' |
|_______________________________|___X
[-1,-1] : [1,-1]
```
HOLY SHIT IT'S 3D!!1! [Magic](magic.md)! In the front we see *quad0*, rotated slightly around the vertical (Y) axis, behind it is *quad1*, non-rotated but smaller because it's further away. This looks very, very good! We're almost there.
Also notice that the points -- now nicely projected onto a 2D X/Y plane -- still have 3 coordinates, i.e. they retain the Z coordinate which now holds their depth, or distance from the camera projection plane kind of. This depth is now in range from -1 (near plane) to 1 (far plane). The depth will be important in actually drawing pixels, to decide which are more in the front and therefore visible (this is the problem of *visibility*). The depth value can also be used for cool effects like the distance fog and so on.
The work up until now -- i.e. transforming the vertices with matrices -- is what **vertex shaders** do. Now comes the **rasterization** part -- here we literally draw triangles (as in individual pixels) between the points we have now mapped on the screen. In systems such as OpenGL This is usually done automatically, you don't have to care about rasterization, however you will have to write the algorithm if you're writing e.g. your own [software renderer](sw_rendering.md). Triangle rasterization isn't trivial, it has to be not only efficient but also deal with things such as not leaving holes between adjacent triangles, interpolating triangle attributes and so on. We won't dive deeper into this, let's just suppose we have a rasterization algorithm now. For example rasterizing the first triangle of *quad0* may look like this:
```
_______________________________
| |
| +--.... |
| | '''---# |
| | .## |
| | +-----####+ |
| | | .#####| |
| | | :######| |
| | | ########| |
| | ##########+ |
| | ########### |
| | ############ |
| ####### |
|_______________________________|
```
During this rasterization process the Z coordinates of the mapped vertices are important -- the rasterizer [interpolates](interpolation.md) the depth at the vertices, so it knows the depth of each pixel it creates. This depth is written into so called **z-buffer** (AKA depth buffer) -- basically an off-screen buffer that stores one numeric value (the depth) for each pixel. Now when let's say the first triangle of *quad1* starts to be rasterized, the algorithm compares the rasterized pixel's depth to that stored on the same position in the z-buffer -- if the z-buffer value is small, the new pixel mustn't be drawn because it's covered by a previous drawn pixel already (here probably that of the triangle shown in the picture).
So the rasterization algorithm just shits out individual pixels and hands them over to the **fragment shader** (AKA pixel shader). Fragment is a program that just takes a pixel and says what color it should have (basically) -- this is called **[shading](shading.md)**. For this the rasterizer also hands over additional info to the fragment shader which may include: the X/Y coordinates of the pixel, its interpolated depth (that used in z-buffer), vertex normals, ID of the model and triangle and, very importantly, the **[barycentric coordinates](barycentric.md)**. These are three-component coordinates that say where exactly the pixel is in the triangle. These are used mainly for **texturing**, i.e. if the model we're rendering has a texture map (so called UV map) and a bitmap image (texture), the fragment shader will use the UV map and barycentric coords to compute the exact pixel of the texture that the rasterized pixel falls onto AND this will be the pixel's color. Well, not yet actually, there are more things such as **lighting**, i.e. determining what brightness the pixel should have depending on how the triangle is angled towards scene lights (for which we need the normals), how far away from them it is, what colors the lights have etcetc. And this is not nearly all, there are TONS and tons of other things, for example the interpolation done by rasterizer has to do **perspective correction** (linearly interpolating in screen space looks awkward), then there is texture filtering to prevent [aliasing](aliasing.md) (see e.g. [mipmapping](mipmap.md), transparency, effects like bump mapping, environment mapping, screen space effects, stencil buffer etcetc. -- you can read whole books about this. That's beyond the scope of this humble tutorial -- in simple renderers you can get away with ignoring a lot of this stuff, you can just draw triangles filled with constant color, or even just draw lines to get a wireframe renderer, all is up to you. But you can see it is a bit [bloated](bloat.md) if everything is to be done correctly -- don't forget there also exist other ways of rendering, see for example [raytracing](raytracing.md) which is kind of easier.
## See Also

1
42.md
View file

@ -11,4 +11,5 @@ If you make a 42 reference in front of a TBBT fan, he will shit himself.
- [bazinga](bazinga.md)
- [thrembo](thrembo.md)
- [foo](foo.md) (similarly overplayed "joke")
- [bar](bar.md)
- [69](69.md)

5
cancel_culture.md Normal file
View file

@ -0,0 +1,5 @@
# Cancel Culture
*"No man, no problem."* --[Joseph Stalin](stalin.md)
TODO

View file

@ -22,6 +22,7 @@ Some **[interesting](interesting.md) things** about Doom:
- Someone (kgsws) has been [hacking](hacking.md) the ORIGINAL Doom engine in an impressive way WITHOUT modifying the source code or the binary, rather using [arbitrary code execution](arbitrary_code_execution.md) bug; he added very advanced features known from newer source ports, for example an improved 3D rendering algorithms allowing geometry above geometry etc. (see e.g. https://yt.artemislena.eu/watch?v=RdbRPNPUWlU). It's called the Ace engine.
- Doom sprites were made from photos of physical things: weapons are modified photos of toys, enemies were made from clay and then photographed from multiple angles (actually a great alternative to [3D modeling](3d_model.md) that's less dependent on computers and produces more realistic results).
- The strongest weapon in the game is name BFG9000, which stands for "big fucking gun".
- There is some kind of "controversial" Doom mod called *Moon Man* where you shoot feminists, jews, niggas and such, apparently it triggers [SJWs](sjw.md) or something.
- TODO
## Doom Engine/Code

View file

@ -1,6 +1,6 @@
# Duke Nukem 3D
Duke Nukem 3D (often just *duke 3D*) is a legendary first man shooter video [game](game.md) released in January 1996 (as [shareware](shareware.md)), one of the best known such games and possibly the second greatest 90s FPS right after [Doom](doom.md). It was made by 3D realms, a company competing with Id software (creators of Doom), in engine made by [Ken Silverman](key_silverman.md) -- the game was developed by around 10 people and was in the making since 1994. Duke 3D is a big sequel to two previous games which were just 2D platformers; when this 3rd installment came out, it became a hit. It is remembered not only for being very technologically advanced, further pushing advanced fully textured 3D graphics that Doom introduced, but also for its great gameplay and above all for its humor and excellent parody of the prototypical 80s overtestosteroned [alpha male](chad.md) hero, the protagonist Duke himself -- it showed a serious game didn't have to take itself too seriously and became loved exactly for things like weird alien enemies or correct portrayal of [women](woman.md) as mere sexual objects which nowadays makes [feminists](feminism.md) screech in furious rage of thousand suns. Only idiots criticised it. Duke was later ported to other platforms (there was even a quite impressive 3D port for [GBA](gba.md)) and received a lot of additional "content".
Duke Nukem 3D (often just *duke 3D*) is a legendary first man shooter video [game](game.md) released in January 1996 (as [shareware](shareware.md)), one of the best known such games and possibly the second greatest 90s FPS right after [Doom](doom.md). It was made by 3D realms, a company competing with Id software (creators of Doom), in engine made by [Ken Silverman](key_silverman.md) -- the game was developed by around 10 people and was in the making since 1994. Duke 3D is a big sequel to two previous games which were just 2D platformers (and a prequel to the infamously unsuccessful *Duke Nukem Forever*); when this 3rd installment came out, it became a hit. It is remembered not only for being very technologically advanced, further pushing advanced fully textured 3D graphics that Doom introduced, but also for its great gameplay, iconic music and above all for its humor and excellent parody of the prototypical 80s overtestosteroned [alpha male](chad.md) hero, the protagonist Duke himself -- it showed a serious game didn't have to take itself too seriously and became loved exactly for things like weird alien enemies or correct portrayal of [women](woman.md) as mere sexual objects which nowadays makes [feminists](feminism.md) screech in furious rage of thousand suns. Only idiots criticised it. Duke was later ported to other platforms (there was even a quite impressive 3D port for [GBA](gba.md)) and received a lot of additional "content".
Of course, Duke is sadly [proprietary](proprietary.md), as most gaymes, though the source code was later released as [FOSS](foss.md) under [GPL](gpl.md) (excluding the game data and proprietary engine, which is only [source available](source_available.md)). A self-proclaimed [FOSS](foss.md) engine for Duke with GPU accelerated graphics exists: [EDuke32](eduke32.md) -- the repository is kind of a mess though and it's hard to tell if it is legally legit as there are parts of the engine's proprietary code (which may be actually excluded from the compiled binary), so... not sure.

8
faq.md
View file

@ -190,6 +190,14 @@ Yes, but it may need an elaboration. There are many different kinds of love: lov
That's what you would call it -- am I literally physically punching the world in the face or something? Rather ask yourself why you choose to compare things like education and advocating love to a war. I am just revealing truth, educating, sometimes expressing frustration, anger and emotion, sometimes [joking](jokes.md), without [political correctness](political_correctness.md). [Sometimes names greatly matter](name_is_important.md) and LRS voluntarily chooses to never view its endeavor as being comparable to a [fight](fight_culture.md), like capitalists like to do -- in many situations this literally IS only about using a different word -- seemingly something of small to no importance -- however the word sets a mood and establishes a mindset, when we go far enough, it will start to matter that we have chosen to not see ourselves as fighter, for example we **will NEVER advocate any violence or call for anyone's death**, unlike for example [LGBT](lgbt.md), [feminists](feminism.md) and [Antifa](antifa.md), the "fighters".
### I AM CRYING FROM FEAR THAT YOU COLLECT MY DATA, please please tell me what data you collect about me, I'm shaking right now.
Chill your balls motherfucker, I WOULD collect all your data because I absolutely shit on privacy, I would never respect any shitty privacy laws even if they gave a bullet for it, but you're lucky that I'm lazy to set anything up and that I'm not a capitalist, so I have literally no interest in collecting any data, I know exactly ZERO stuff about anything, I don't give a shit about popularity, appeal, SEO, I have no ads, I don't give a single shit about anything. Well, basically the one thing I can see is daily website bandwidth usage for the last week, so I just get a very rough idea of how many pages per day got downloaded (but I don't even know which they were), that's basically it. Unlearn [privacy](privacy.md) hysteria please (for your own good).
### OH MY GAAAAAAAWD, you are sooooo [productive](productivity_cult.md), you made so many projects all yourself, what magical rituals do you perform for such PRODUCTIVITY, do you listen to motivational speeches before sleep or drink newborn blood??? TELL ME, I HAVE TO KNOW, I wanna PRODUUUUUUCEEEE!
I am THE laziest bastard who EVER lived on this planet, if I seem """productive""" to you then only because I ditch all [bullshit](bullshit.md) and practice [minimalism](minimalism.md). Literally I sometimes do nothing for half a year, then I sometimes do thing here and there over weekends and in a few months I got a new thing made, it's simply the uneatable efficiency of minimalism. If I, the most anti-work, laziest, dumbest shit that ever walked this soil can make these things just by adopting minimalism, imagine what could be made by let's say three non-lazy, smart people. The world would be wonderful. Just ditch [capitalism](capitalism.md) and see it come true.
### I dislike this wiki, our teacher taught us that global variables are bad and that [OOP](oop.md) is good.
This is not a question you dummy. Have you even read the title of this page? Anyway, your teacher is stupid, he is, very likely unknowingly, just spreading the capitalist propaganda. He probably believes what he's saying but he's wrong.

View file

@ -29,7 +29,7 @@ Many times we apply our interpolation not just to two points but to many points,
**[Nearest neighbor](nearest_neighbor.md)** is probably the simplest interpolation (so simple that it's sometimes not even called an interpolation, even though it technically is). This method simply returns the closest value, i.e. either *A* (for *t* < 0.5) or *B* (otherwise). This creates kind of sharp steps between the points, the function is not continuous, i.e. the transition between the points is not gradual but simply jumps from one value to the other at one point.
**[Linear interpolation](lerp.md)** (so called lerp) is probably the second simplest interpolation which steps from the first point towards the second in a constant step, creating a straight line between them. This is simple and [good enough](good_enough.md) for many things, the function is continuous but not smooth, i.e. there are no "jumps" but there may be "sharp turns" at the points, the curve may look like a "saw".
**[Linear interpolation](lerp.md)** (so called LERP, not to be [confused](often_confused.md) with [LARP](larp.md)) is probably the second simplest interpolation which steps from the first point towards the second in a constant step, creating a straight line between them. This is simple and [good enough](good_enough.md) for many things, the function is continuous but not smooth, i.e. there are no "jumps" but there may be "sharp turns" at the points, the curve may look like a "saw".
**[Cosine](cos.md) interpolation** uses part of the [cosine](cos.md) function to create a continuous and smooth line between the points. The advantage over linear interpolation is the smoothness, i.e. there aren't "sharp turns" at the points, just as with the more advanced cubic interpolation against which cosine interpolation has the advantage of still requiring only the two interval points (*A* and *B*), however for the price of a disadvantage of always having the same horizontal slope at each point which may look weird in some situations (e.g. multiple points lying on the same sloped line will result in a curve that looks like smooth steps).

View file

@ -78,6 +78,7 @@ least until we're finished building them.
- A fine is tax for doing bad, a tax is fine for doing good.
- What do you like most in a [woman](woman.md)? My dick.
- [USA](usa.md) is the fastest progressing country in the world: it managed to jump from the uncivilized stage right to decadence without even going through the transitional stage of civilization.
- Hey I won a box with lifetime supply of condoms in an [assembly](assembly.md) programming competition! Turns out the box was just empty.
- The new version of [Windows](windows.md) is going to be backdoor free! The backdoor will be free of charge.
## See Also

File diff suppressed because one or more lines are too long

View file

@ -24,9 +24,10 @@ There are many terms that are very similar and can many times be used interchang
- **[causation](causation.md)** vs **[correlation](correlation.md)** (le [reddit](reddit.md) scientist rule)
- **[cepstrum](cepstrum.md)** vs **[spectrum](spectrum.md)**
- **[chaos](chaos.md)** vs **[randomness](random.md)** vs **[pseudorandomness](pseudorandom.md)** vs **[entropy](entropy.md)** vs **[statistics](statistics.md)** vs **[probability](probability.md)** vs **[stochasticity](stochastic.md)**
- **[class](class.md)** vs **[set](set.md)**
- **[closed source](closed_source.md)** vs **[proprietary](proprietary.md)**
- **[class](class.md)** vs **[set](set.md)** vs **[multiset](multiset.md)**
- **[CLI](cli.md)** vs **[TUI](tui.md)** vs **[terminal](terminal_emulator.md)** vs **[console](console.md)**
- **[clipping](clipping.md)** vs **[culling](culling.md)** vs **[pruning](pruning.md)**
- **[closed source](closed_source.md)** vs **[proprietary](proprietary.md)**
- **[college](college.md)** vs **[university](university.md)**
- **[color model](color_model.md)** vs **[color space](color_space.md)**
- **[communism](communism.md)** vs **[Marxism](marxism.md)** vs **[socialism](socialism.md)**

View file

@ -12,13 +12,15 @@ love & peace ~drummyfish }
Pedophilia (also paedophilia or paedosexuality) is a sexual orientation towards children. A pedophile is often called a *pedo* or *minor-attracted person* (map); there are also terms such as hebephilia and ephebophilia that mean attraction to a bit older "non-adults". Opposition of pedophilia is called **[pedophobia](pedophobia.md)** or [pedohysteria](pedohysteria.md) and is a form of age [discrimination](discrimination.md) and witch hunt.
**[Richard Stallman](rms.md) has spoken on the witch hunt and absurdity of this situation similarly** here (and was [canceled](cancel_culture.md)): [https://stallman.org/articles/witch-hunt.html](https://stallman.org/articles/witch-hunt.html).
*NOTE for pedophobes:* please attend [this anonymous self-help program](unretard.md).
Unlike for example pure [homosexuality](gay.md), pedophilia is completely natural and normal -- many studies confirm this (some links e.g. [here](https://incels.wiki/w/Scientific_Blackpill#It_is_normal_for_healthy_men_to_find_pubescent_.26_prepubescent_females_sexually_arousing)) but if you're not heavily brainwashed you don't even need any studies (it's really like wanting to see studies on whether men want to have sex with women at all): wanting to have sex with young, sexually mature girls who are able to reproduce is, despite it being forbidden by law, as normal as wanting to have sex with a woman that is married to someone else, despite it being culturally forbidden, or wanting to punch someone who is really annoying, despite it being forbidden by law. [Marketing](marketing.md) for example knows this very well -- online shops with clothes love to advertise children underwear and put high resolution photos of children in swimsuits all around their sites, they wouldn't do it if such images were disgusting to most people, they know that most people are taught to pretend to be disgusted by it in public but when browsing privately they'll be attracted to them (even if they are so brainwashed to internally deny it). No one can question that pedophilia is natural, the only discussion can be about it being harmful and here again it has to be said it is NOT any more harmful than any other orientation. Can it harm someone? Yes, but so can any other form of sex or any human interaction whatsoever, that's not a reason to ban it. Nevertheless, pedophilia is nowadays wrongfully, mostly for political and historical reasons, labeled a "disorder" (just as homosexuality used to be not a long time ago). It is the forbidden, tabooed, censored and bullied sexual orientation of the [21st century](21st_century.md), even though all healthy people are pedophiles -- just don't pretend you've never seen a [jailbait](jailbait.md) you found sexy, people start being sexually attractive exactly as soon as they become able to reproduce; furthermore when you've gone without sex long enough and get extremely horny, you get turned on by anything that literally has some kind of hole in it -- this is completely normal. Basically everyone has some kind of weird fetish he hides from the world, there are people who literally fuck cars in their exhausts, people who like to eat shit, dress in diapers and hang from ceiling by their nipples, people who have sexual relationships with virtual characters etc. -- this is all considered normal, but somehow once you get an erection seeing a hot 17 year old girl, you're a demon that needs to be locked up and cured, if not executed right away, just for a thought present in your mind.
Unlike for example pure [homosexuality](gay.md), pedophilia is completely natural and normal -- many studies confirm this (some links e.g. [here](https://incels.wiki/w/Scientific_Blackpill#It_is_normal_for_healthy_men_to_find_pubescent_.26_prepubescent_females_sexually_arousing)) but if you're not heavily brainwashed you don't even need any studies (it's really like wanting to see studies on whether men want to have sex with women at all): wanting to have sex with young, sexually mature girls who are able to reproduce is, despite it being forbidden by law, as normal as wanting to have sex with a woman that is married to someone else, despite it being culturally forbidden, or wanting to punch someone who is really annoying, despite it being forbidden by law. [Marketing](marketing.md) for example knows this very well -- online shops with clothes love to advertise children underwear and put high resolution photos of children in swimsuits all around their sites, they wouldn't do it if such images were disgusting to most people, they know that most people are taught to pretend to be disgusted by it in public but when browsing privately they'll be attracted to them (even if they are so brainwashed to internally deny it). Even the people who are "against" pedophilia will ask a young looking girl to see her ID before having sex with her -- stop for one second to think about this: this undeniably means that they ADMIT they are attracted to a girl that MIGHT be younger than the legal limit, i.e. if it adults weren't attracted to young girls, there would be no need to ask for IDs, they would simply know if a girl is underage simply by being attracted to her or not (and this will always hold, even if we lower the age of consent), there is absolutely no logical way out of this. No one can question that pedophilia is natural, the only discussion can be about it being harmful and here again it has to be said it is NOT any more harmful than any other orientation. Can it harm someone? Yes, but so can any other form of sex or any human interaction whatsoever, that's not a reason to ban it. Nevertheless, pedophilia is nowadays wrongfully, mostly for political and historical reasons, labeled a "disorder" (just as homosexuality used to be not a long time ago). It is the forbidden, tabooed, censored and bullied sexual orientation of the [21st century](21st_century.md), even though all healthy people are pedophiles -- just don't pretend you've never seen a [jailbait](jailbait.md) you found sexy, people start being sexually attractive exactly as soon as they become able to reproduce; furthermore when you've gone without sex long enough and get extremely horny, you get turned on by anything that literally has some kind of hole in it -- this is completely normal. Basically everyone has some kind of weird fetish he hides from the world, there are people who literally fuck cars in their exhausts, people who like to eat shit, dress in diapers and hang from ceiling by their nipples, people who have sexual relationships with virtual characters etc. -- this is all considered normal, but somehow once you get an erection seeing a hot 17 year old girl, you're a demon that needs to be locked up and cured, if not executed right away, just for a thought present in your mind.
Even though one cannot choose this orientation and even though pedophiles don't hurt anyone any more than for example gay people do, they are highly oppressed and tortured. Despite what the propaganda says, a **pedophile is not automatically a rapist** of children (a pedophile will probably choose to never actually even have sex with a child) any more than a gay man is automatically a rapist of people of the same sex, and watching [child porn](child_porn.md) won't make you want to rape children any more than watching gay porn will make you want to rape people of the same sex. It is also never the case that someone would be attracted ONLY to children just as the opposite is never the case, people are simply naturally attracted to people of all ages, the whole point is that age doesn't play much of a role in sexual attractiveness. Nevertheless the society, especially the fascists from the [LGBT](lgbt.md) movement who ought to know better than anyone else what it is like to be oppressed only because of private sexual desires, actively hunt "pedophiles" (those who simply don't conceal what others do) as if they were a different kind of species, [bully](cancel_culture.md) them and lynch them on the Internet and in the [real life](irl.md) -- this is done by both both civilians and the state (I shit you not, in [Murica](usa.md) there are whole police teams of pink haired lesbians who pretend to be little girls on the Internet and tease guys so that they can lock them up and get a medal for it). LGBT activists proclaim that a child is completely asexual, that it can't consent to sex, but at the same time they'll tell you that a child can feel sexual identity and that it can make the decision to change its sex with surgeries and drugs (yes, it's happening, even if parent's agreement is also needed, would parents also be able to allow a child to have sex if it wishes to?). Isn't it hilarious? Yes, it is. There is a literal **witch hunt** going on against completely innocent people, just like in the middle ages. Innocent people are tortured, castrated, cancelled, rid of their careers, imprisoned, beaten, rid of their friends and families and pushed to suicide sometimes only for having certain files on their computers or saying something inappropriate online (not that any of the above is ever justified to do to anyone, even the worst criminal).
In 15th century an unofficial version of the Bible, the Wycliffe's translation, was officially declared a heretic work and its possession was forbidden under penalty of prison, torture and excommunication. That's what we still do today, just with works violating a different kind of orthodoxy. We are literally still living in the middle ages.
It is hilarious that people nowadays laugh at the old timey propaganda -- absolutely embraced by contemporary ["science"](soyence.md) by the way -- that for example demonized masturbation: there used to be books that painted masturbation as a serious, even deadly mental disease that would dry your spine and kill your brain, there were books with pictures of deformed people captioned along the lines of: "this is what masturbation does to you". Nowadays we know masturbation is completely natural and harmless, everyone facepalms on seeing this old bullcrap, it's clear it was all one huge political brainwashing, but the very same people will sadly eat practically the same kind of propaganda nowadays. People never learn. In 15th century an unofficial version of the Bible, the Wycliffe's translation, was officially declared a heretic work and its possession was forbidden under penalty of prison, torture and excommunication. That's what we still do today, just with works violating a different kind of orthodoxy. We are literally still living in the middle ages.
Part of the strategy of fueling the hysteria is **strictly separating people into two groups: pedophiles and non-pedophiles** -- "evil" and "good", "us" and "them" -- to which strict age of consent and labels such as "disorder" are great helpers. While with topics such as [autism](autism.md), sexes, genders and approved sexual orientations the pseudoleft pushes the idea of a "spectrum" and "fluidity", i.e. people not simply being one or another but having individual mixes of certain attributes (which is likely correct but many times taken to misleading extremes), with pedophilia they refuse to acknowledge the same, i.e. that some people may be attracted to mature people and other people are attracted to younger people and other ones to very young people or simply all people, and that some people are attracted to younger people a lot and others just mildly, and that some people become interested in sex at 18 years of age while other ones at 15, 11 or even younger. Nature is like this, no one can in his right mind believe that biology will obey human laws and separate humans into two distinct, clearly separated groups. [Law](law.md) obsessed society has once again managed to replace sense of [morality](morality.md) with harmful oversimplifications that allow to label everyone either guilty or not guilty -- 95 year old dating 18 year old? That's fine, in fact we may call them [heroes](hero.md) for "[fighting](fight_culture.md)" stereotypes about sexuality! 18 year old dating 17 year old? Disgusting! Mental disease, highly dangerous predator! Best to castrate the monster, lock him up, lynch him, burn him like a witch, quick death would be too good for him.

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -3,9 +3,9 @@
This is an autogenerated article holding stats about this wiki.
- number of articles: 587
- number of commits: 854
- total size of all texts in bytes: 4126903
- total number of lines of article texts: 30983
- number of commits: 855
- total size of all texts in bytes: 4137883
- total number of lines of article texts: 31039
- number of script lines: 262
- occurences of the word "person": 7
- occurences of the word "nigger": 90
@ -14,8 +14,8 @@ longest articles:
- [c_tutorial](c_tutorial.md): 124K
- [exercises](exercises.md): 108K
- [capitalism](capitalism.md): 72K
- [how_to](how_to.md): 72K
- [capitalism](capitalism.md): 72K
- [less_retarded_society](less_retarded_society.md): 64K
- [chess](chess.md): 56K
- [faq](faq.md): 52K
@ -35,60 +35,90 @@ longest articles:
top 50 5+ letter words:
- which (2339)
- there (1791)
- people (1600)
- example (1368)
- which (2345)
- there (1793)
- people (1607)
- example (1376)
- other (1291)
- number (1143)
- software (1141)
- about (1105)
- program (922)
- about (1109)
- program (928)
- their (872)
- because (865)
- would (849)
- because (866)
- would (859)
- called (799)
- being (798)
- called (797)
- things (780)
- something (775)
- language (768)
- things (781)
- something (781)
- language (770)
- numbers (749)
- computer (748)
- simple (737)
- computer (749)
- simple (742)
- without (704)
- programming (683)
- function (675)
- function (676)
- these (663)
- different (651)
- however (647)
- system (613)
- world (600)
- should (598)
- doesn (590)
- doesn (591)
- games (577)
- point (576)
- games (576)
- society (571)
- society (572)
- while (557)
- drummyfish (543)
- though (539)
- still (530)
- simply (526)
- using (525)
- possible (523)
- drummyfish (545)
- though (543)
- still (531)
- using (528)
- simply (528)
- possible (524)
- similar (509)
- memory (508)
- similar (507)
- https (501)
- course (501)
- technology (497)
- always (477)
- really (467)
- basically (459)
- always (478)
- really (468)
- value (464)
- basically (462)
- extremely (452)
- value (448)
latest changes:
```
Date: Tue Jul 30 22:52:22 2024 +0200
21st_century.md
c_tutorial.md
capitalist_software.md
censorship.md
collision_detection.md
dramatica.md
everyone_does_it.md
exercises.md
gay.md
githopping.md
how_to.md
human_language.md
island.md
kek.md
lrs_dictionary.md
luke_smith.md
number.md
pedophilia.md
people.md
privacy.md
random_page.md
raycasting.md
rgb332.md
rgb565.md
smart.md
wiki_pages.md
wiki_stats.md
woman.md
youtube.md
Date: Sat Jul 27 17:25:21 2024 +0200
bootstrap.md
collision_detection.md
@ -98,30 +128,6 @@ Date: Sat Jul 27 17:25:21 2024 +0200
oop.md
programming.md
random_page.md
rationalwiki.md
soydev.md
wiki_pages.md
wiki_stats.md
windows.md
woman.md
Date: Thu Jul 25 15:20:50 2024 +0200
censorship.md
dog.md
duke3d.md
faggot.md
hacking.md
main.md
pedophilia.md
political_correctness.md
race.md
random_page.md
recursion.md
trolling.md
whale.md
wiki_pages.md
wiki_stats.md
woman.md
Date: Wed Jul 24 15:49:35 2024 +0200
```
most wanted pages:
@ -151,8 +157,8 @@ most popular and lonely pages:
- [lrs](lrs.md) (293)
- [capitalism](capitalism.md) (234)
- [c](c.md) (216)
- [bloat](bloat.md) (208)
- [c](c.md) (217)
- [bloat](bloat.md) (209)
- [free_software](free_software.md) (176)
- [game](game.md) (141)
- [suckless](suckless.md) (138)
@ -167,18 +173,18 @@ most popular and lonely pages:
- [fun](fun.md) (84)
- [censorship](censorship.md) (83)
- [free_culture](free_culture.md) (81)
- [fight_culture](fight_culture.md) (80)
- [less_retarded_society](less_retarded_society.md) (79)
- [fight_culture](fight_culture.md) (79)
- [math](math.md) (77)
- [hacking](hacking.md) (77)
- [shit](shit.md) (76)
- [public_domain](public_domain.md) (76)
- [bullshit](bullshit.md) (76)
- [shit](shit.md) (75)
- [foss](foss.md) (75)
- [art](art.md) (74)
- [programming_language](programming_language.md) (72)
- [corporation](corporation.md) (70)
- [woman](woman.md) (69)
- [internet](internet.md) (69)
- ...
- [adam_smith](adam_smith.md) (5)
- [aaron_swartz](aaron_swartz.md) (5)

View file

@ -130,7 +130,7 @@ Previously in the article I have stated the following:
This section will be dedicated to me fulfilling my promise. Please note that me acknowledging a based woman doesn't automatically come with me approving of everything she does, I just think she is very, VERY cool in many ways and I admit she impressed me to a very high level. Also keep in mind a based woman may later on turn into unbased woman, just like [Luke Smith](luke_smith.md) did for instance.
I have found the website of **[Ashley Jones](ashley_jones.md)**: [https://icum.to](https://icum.to). She immediately caught my attention, I reckon she is truly based, for example for the following reasons (note that this is purely my interpretation of what I've seen/read on her website): She is a pretty, biological woman (i.e. NOT some kind of angry trans landwhale) BUT she shits on feminism and acknowledges plain facts about women such as that they usually need to be "put in line" (with love) by a man and that they are simply different. She makes a nice, ACTUALLY ENTERTAINING, well made politically incorrect stuff, her art is sincere, not trying to pretend anything or ride on some kind of fashion wave. She is VERY talented at comedy, hosts her OWN video website with a modest fan following and even though on [Jewtube](youtube.md) she could get hundred thousand times more followers and make a fortune, she doesn't do it -- she does ask for donations but refuses to monetize her content with ads, creating a nice, pure, oldschool free speech Internet place looks to truly be the one thing she's aiming for. She makes fun of herself (like that she has a crush on [Duke Nukem](duke3d.md) lol), masterfully plays along with jokes blatantly sexualizing her and does some cool stuff like post measurements of her asshole and finding her porn lookalikes for the fanbase. It looks like she possesses some skills with technology (at least [Luke Smith](luke_smith.md) level), she supports [free software](free_software.md). She acknowledges the insanity of [pedophile](pedophilia.md) hysteria and proposes lowering age of consent (despite saying she was NOT a pedophile herself). She wants to normalize nudity, and doesn't shave her legs. Her website is quite nice, 1.0 style, with high [LRS](lrs_wiki.md)/[4chan](4chan.md)/[Dramatica](dramatica.md) vibes, there are "offensive" jokes but she stresses she in fact doesn't encourage violence and that she's not an extremist -- in one video she says she dislikes transsexuals and wants to make fun of gays but that in fact she doesn't mind any individual being gay or whatever, basically just opposing the political movements, propaganda, brainwashing etcetc., i.e. showing the exact same kind of attitude as us. She also understands internet culture and things like [trolling](trolling.md) being part of it -- in one video she clearly separates Internet and [real life](irl.md) and says you "can't apply real life logic on the Internet", that's very mature. By this she for example supports consensual incest. She even freaking has her own imageboard that's by the way very good. She seems to see through propaganda and brainwashing, she says she does "not accept the reality" forced on her by this society, something we say and do as well, she shits on vaccines and likes cool "conspiracy theories". Yes, she seems SMART, she sees the power game of the elites, the propaganda, warns about it, shits on it. She seems to know how to write [English](english.md) without making 10 errors in every word. She advocates ETHICAL veganism, to spare animals of suffering. She hates [Elon Musk](elon_musk.md). She advocates not using cellphones and mainstream social networks. (I haven't noticed any tattoos on her either, but she'll stay even if it turned out she has one, she's still cool.) **Ashley Jones, I apologize to you, please stay awesome and inspire more women to be as based as you are <3 --drummyfish**. No, the words don't come out of my penis, they come out of my heart. Please stay cool.
I have found the website of **[Ashley Jones](ashley_jones.md)**: [https://icum.to](https://icum.to). She immediately caught my attention, I reckon she is truly based, for example for the following reasons (note that this is purely my interpretation of what I've seen/read on her website): She is a pretty, biological woman (i.e. NOT some kind of angry trans landwhale) BUT she shits on feminism and acknowledges plain facts about women such as that they usually need to be "put in line" (with love) by a man and that they are simply different. She makes a nice, ACTUALLY ENTERTAINING, well made politically incorrect stuff, her art is sincere, not trying to pretend anything or ride on some kind of fashion wave. She is VERY talented at comedy, hosts her OWN video website with a modest fan following and even though on [Jewtube](youtube.md) she could get hundred thousand times more followers and make a fortune, she doesn't do it -- she does ask for donations but refuses to monetize her content with ads, creating a nice, pure, oldschool free speech Internet place looks to truly be the one thing she's aiming for. She makes fun of herself (like that she has a crush on [Duke Nukem](duke3d.md) lol), masterfully plays along with jokes blatantly sexualizing her and does some cool stuff like post measurements of her asshole and finding her porn lookalikes for the fanbase. It looks like she possesses some skills with technology (at least [Luke Smith](luke_smith.md) level), she supports [free software](free_software.md). She acknowledges the insanity of [pedophile](pedophilia.md) hysteria and proposes lowering age of consent (despite saying she was NOT a pedophile herself). She wants to normalize nudity, and doesn't shave her legs. Her website is quite nice, 1.0 style, with high [LRS](lrs_wiki.md)/[4chan](4chan.md)/[Dramatica](dramatica.md) vibes, there are "offensive" jokes but she stresses she in fact doesn't encourage violence and that she's not an extremist -- in one video she says she dislikes transsexuals and wants to make fun of gays but that in fact she doesn't mind any individual being gay or whatever, basically just opposing the political movements, propaganda, brainwashing etcetc., i.e. showing the exact same kind of attitude as us. She also understands internet culture and things like [trolling](trolling.md) being part of it -- in one video she clearly separates Internet and [real life](irl.md) and says you "can't apply real life logic on the Internet", that's very mature. By this she for example supports consensual incest. She even freaking has her own imageboard that's by the way very good. She seems to see through propaganda and brainwashing, she says she does "not accept the reality" forced on her by this society, something we say and do as well, she shits on vaccines and likes cool "conspiracy theories". Yes, she seems SMART, she sees the power game of the elites, the propaganda, warns about it, shits on it. She seems to know how to write [English](english.md) without making 10 errors in every word. She advocates ETHICAL veganism, to spare animals of suffering. She hates [Elon Musk](elon_musk.md). She advocates not using cellphones and mainstream social networks. (She does NOT have any [tattoos](tattoo.md) either and expressed what looked like gisgust over them.) **Ashley Jones, I apologize to you, please stay awesome and inspire more women to be as based as you are <3 --drummyfish**. No, the words don't come out of my penis, they come out of my heart. Please stay cool.
PLEASE PLEASE PLEASE Ashley don't fuck it up please, stay our Internet queen don't get [shitty](shit.md) pretty please! (LRS note for those who are retarded: yes, this is a bit of a hyperbole, don't unironically make [cults of personalities](hero_culture.md). But Ashley is officially a mini queen of the Internetz now.)