![pikuma](/img/default-banner.jpg)
- Видео 29
- Просмотров 768 715
pikuma
Великобритания
Добавлен 1 мар 2019
An education platform teaching the fundamentals of computer science & math. Zero ego. Zero gimmicks.
How to Make PS1 Graphics
This video is a review of how PlayStation graphics work and why the artefacts of the PS1 make games look so unique.
We explain the hardware and software limitations of the PlayStation, going over the reason why PS1 graphics artefacts happens.
The main topics covered by our review are:
- Wobbly textures
- Polygon jitter
- Lack of FPU
- Fixed point representation
- Lack of depth buffer
- Lack of mipmapping
- PlayStation dithering
- T-junction gaps
Links:
PlayStation Programming course: pikuma.com/courses/ps1-programming-mips-assembly-language
Parking Garage Rally Circuit: store.steampowered.com/app/2737300/Parking_Garage_Rally_Circuit/
Chapters: 00:00:00
Intro 00:02:38
Visual artefacts
00:05:36 Hardware spe...
We explain the hardware and software limitations of the PlayStation, going over the reason why PS1 graphics artefacts happens.
The main topics covered by our review are:
- Wobbly textures
- Polygon jitter
- Lack of FPU
- Fixed point representation
- Lack of depth buffer
- Lack of mipmapping
- PlayStation dithering
- T-junction gaps
Links:
PlayStation Programming course: pikuma.com/courses/ps1-programming-mips-assembly-language
Parking Garage Rally Circuit: store.steampowered.com/app/2737300/Parking_Garage_Rally_Circuit/
Chapters: 00:00:00
Intro 00:02:38
Visual artefacts
00:05:36 Hardware spe...
Просмотров: 8 345
Видео
A Quick Introduction to C Pointers
Просмотров 1,8 тыс.2 месяца назад
This video is a beginner-friendly introduction to Pointers using the C programming language. We go over the main types of pointer declarations, as well as a discussion on the "address of" and the "arrow" operators. Links: PlayStation Programming: pikuma.com/courses/ps1-programming-mips-assembly-language Chapters: 00:00 Intro 01:07 What are C Pointers? 02:36 Pointers & Dynamic Memory Allocation ...
Understanding Bit-Shifting Operators
Просмотров 1,8 тыс.5 месяцев назад
This video is an extremely beginner-friendly introduction to how bitshifting works & how bitshifting was useful in older game programming code. We'll start by taking a look at the math behind positional notation, and how bitshifting in code can be used as multiplication and division by 2. We'll also look at some examples of bitshifting in the source code of Wolfenstein 3D (github.com/id-Softwar...
Creating a Game Loop with C & SDL (Tutorial)
Просмотров 53 тыс.Год назад
This video is a beginner-friendly introduction on how to create a game loop using C & SDL. We'll start by discussing how to install SDL on Linux, macOS, and Windows, and we'll then proceed to create a very simple C application that uses SDL to control game objects. We'll briefly discuss how to create an SDL window, render simple objects on the screen, cap our framerate, and achieve framerate-in...
Triangle Rasterization
Просмотров 26 тыс.Год назад
This video is an introduction to how triangle rasterization works. We'll start by discussing a parallel algorithm for polygon rasterization based on an article written by Juan Pineda in 1988. We'll review the basic algorithm and implement a simple version using C & SDL. But more than just a simple rasterizer, we'll cover some other important ideas in this video: - Rasterization rules (top-left ...
Verlet Integration
Просмотров 25 тыс.Год назад
This video explains Verlet integration and some other important numerical methods in the context of game programming. We'll start by learning how numerical integration works. The first numerical integration we'll review is called Euler method, and it's a beginner-friendly way of understanding about simulating movement. Euler integration is the most basic numerical integration technique, and it ...
Voxel Space (Comanche Terrain Rendering)
Просмотров 27 тыс.Год назад
This video explains one of my favorite algorithms ever: The Voxel Space engine. This technique was used to render the terrain in the Comanche: Maximum Overkill game. We'll start with a high-level overview of the technique, and proceed to write a very short implementation using C and a graphics framework called DOS-Like. Source code: github.com/gustavopezzi/voxelspace DOS-Like framework: github....
How C++ Vector Works
Просмотров 22 тыс.Год назад
In this video, we'll take a closer look at C vectors (STL implementation of a dynamic array). We'll learn how C vectors are implemented, and code a very simple custom class with the absolute minimum needed from a dynamic array data structure. std::vector is a sequence container that encapsulates dynamic size arrays in C . The elements are stored contiguously, which means that elements can be ac...
How Retro Video Game Graphics Work
Просмотров 15 тыс.Год назад
This video is a light conversation about how old-school video game graphics work. We discuss how popular arcade machines and other game consoles from the 70s and 80s display graphics on the screen. Special mentions to early Arcade, the Atari 2600, and the Nintendo Entertainment System. Pong Simulation at Circuit Level: www.falstad.com/pong/index.html Atari 2600 Programming with 6502 Assembly: p...
Linear Collision Resolution in 2D Game Physics
Просмотров 11 тыс.2 года назад
In this video, you will learn a game physics technique to resolve collisions between rigid bodies. We'll learn the linear impulse method, used to resolve collisions by applying linear impulses to the bodies that are colliding. For a full course on 2D Game Physics, visit: courses.pikuma.com/courses/game-physics-engine-programming Chapters: 00:00 Introduction 02:09 The Impulse Method 03:19 Collis...
Tools to make a Game Engine in C++
Просмотров 54 тыс.2 года назад
This video is a summary of my favorite C libraries and dependencies to create a game engine from scratch. Game development has always been a great helper to get my students motivated to learn more about more advanced computer science topics. Creating a game engine is a great opportunity for us to grow as programmers. Links: Create a 2D Game Engine with C : courses.pikuma.com/courses/2dgameengin...
3D Software Rendering Graphics Pipeline
Просмотров 20 тыс.2 года назад
This video goes over the stages of the graphics pipeline I like to use in my 3D software rendering projects. One of the first things game programming students read in most graphics books is the famous "Graphics Pipeline." Surprisingly, the term confuses some programmers, especially because most books already present more complex pipelines used by OpenGL, Direct3D, and Vulkan. That's why I decid...
Vector Rotation (Derivation & Geometric Proof)
Просмотров 12 тыс.2 года назад
Most game programmers know that we can use a matrix to rotate a vector around the origin. They also probably know that a vanilla rotation matrix looks something like this: [ cosθ -sinθ ] [ sinθ cosθ ] But, do you want to understand where these formulas come from? In this video, we'll learn how to derive the formulas for vector rotation in 2D, including the mathematical geometrical proof of how ...
Perspective Projection Matrix (Math for Game Developers)
Просмотров 53 тыс.2 года назад
In this video you'll learn what a projection matrix is, and how we can use a matrix to represent perspective projection in 3D game programming. You'll understand the derivation of a perspective projection matrix in 3D computer graphics. The matrix I'll derive is as used by left-handed coordinate systems like DirectX (OpenGL uses a right-handed system). In perspective projection, objects that ar...
Matrix Multiplication (A Simple Review)
Просмотров 7 тыс.2 года назад
This video explains how to perform matrix multiplication. This is a simplicity-first overview of the multiplication algorithm and it's aimed at programmers and game developers. For comprehensive courses on computer science, programming, and mathematics, visit: www.Pikuma.com. Don't forget to subscribe to receive updates and news about new courses and tutorials: ruclips.net/channel/UC8GR0g1deJB_...
Collision Detection with SAT (Math for Game Developers)
Просмотров 24 тыс.3 года назад
Collision Detection with SAT (Math for Game Developers)
Math for Game Developers: Fundamentals of Calculus
Просмотров 22 тыс.3 года назад
Math for Game Developers: Fundamentals of Calculus
Math for Game Developers: Why do we use 4x4 Matrices in 3D Graphics?
Просмотров 72 тыс.3 года назад
Math for Game Developers: Why do we use 4x4 Matrices in 3D Graphics?
Introduction to Object-Oriented Programming with Lua
Просмотров 19 тыс.3 года назад
Introduction to Object-Oriented Programming with Lua
Installing Lua on Windows Terminal & VS Code
Просмотров 85 тыс.4 года назад
Installing Lua on Windows Terminal & VS Code
How to link SDL 2 with Visual Studio on Windows (2021)
Просмотров 46 тыс.4 года назад
How to link SDL 2 with Visual Studio on Windows (2021)
GDB Debugging: How to Debug a C/C++ program
Просмотров 37 тыс.4 года назад
GDB Debugging: How to Debug a C/C program
UNIX vs Linux: Differences & Similarities Explained
Просмотров 15 тыс.4 года назад
UNIX vs Linux: Differences & Similarities Explained
Master Lua Programming (Course Promo)
Просмотров 4,3 тыс.4 года назад
Master Lua Programming (Course Promo)
Walker William Perez Melissa Smith Donald
Bro I barely passed my exam in calculus and still after years I didn't understand the nature of derivatives and integral. UNTIL NOW! Thank you so much for the video!❤
This didn't work, just like every other tutorial. I don't know what I did wrong. edit: I ended up needing 2 extra steps to get it to work. This did help, though
Aleluia! quero ouvir um amém? 🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣
Amén dos bons!
Thanks
best teacher in the world
Awesome work thanks!
Didn't know I wanted to make a PS1 game until I saw this video 😆 your work is always top-notch, Gustavo!!
Awsome content, helped me a lot, made me laugh too "zmol"
You, blew my mind today.
I honestly love these explanations. Maybe i am a mongrel, but not using fancy words before explaining them works for me. I dont know why people cant do that normally 😊
if you're using a square, wouldn't the normal of a side be in the exact same direction (but opposite magnitude) as the normal on the oposite side of the square? you only have to do 2 calculations for squares instead 4 if i undserstand this correctly.
Thank you for making these videos available
Thanks for this informative video. It’s the best video about how to start game engine dev journey.
I’m writing a simple 3D game right now for fun but it was time to implement physics and was struggling until I found an old PDF explaining Verlet integration. The PDF was great, but as I searched on Google for a couple questions I had, RUclips started recommending stuff and that’s how I found this video. This was amazing. Such a great explanation. I’m going to go back and watch the rest in order (watched all of this and also just watched your video on Calculus at the beginning of this playlist) I was pretty happy with the results of my initial (very simple) implementation converting the code to work in 3D, but I still need to implement more to support collisions with polygons, angular momentum, etc. You are a fantastic teacher. I’ve been up all night wondering how I’m gonna implement angular momentum but I have ideas now. I’m also very curious about stability (especially in 3D which seems very prone to instability?) I noticed you have a physics engine course! With a baby I only get an hour here and there to work on this stuff so not sure if I’ll be able to watch the 35 hours- but planning to buy just to support this work and maybe I’ll be judicious about which ones I watch. I can try fill in gaps in my knowledge enough to help me with my project.
I took Calculus I & II in college and did decently (got A & B). I feel like you explained calculus more clearly in 30m than in the entire semester I took it. 😂
Thanks for your great videos. I was trying to access your website and get the ps1 course but it just times out when i click the link
I was wondering, how easy is it to add rotation to these verlet objects, making one in scratch and I feel like that will make it stand out
Great video!! I’m starting to understand 😅😅🫡🫡
This is really good video.
This is an under rated teacher. The amount of knowledge i have collected just from a few hours of watching these videos is probably more than the knowledge i got from my college syllabus. Thanks.
Martin Angela Wilson Eric Hernandez Karen
@pikuma I tried a constraint that is more 'fluid', it continues the velocity of each particle off the wall by reflecting the path, not just hard resetting onto the wall. I tested it in your code and the box hit the wall, bounced a bit and then stayed there flat against the wall, so it seems more stable than the hard reset. What do you think? On line 46 onward you can test } else if (this.x > SCREEN_WIDTH) { this.x = SCREEN_WIDTH - (this.x - SCREEN_WIDTH) this.old_x = SCREEN_WIDTH + (SCREEN_WIDTH - this.old_x) } ...
Great video btw, I really appreciate you digging into the equations to understand the roles of the different components here in detail. Many thanks.
Hallelujah.
Great video. How does one introduce mass into this equation though?
It's not quite right that the fps doesn't matter as long we use some kind of deltaTime. I run into this problem lately where i didn't activated frame-cap and the game run over 12000 fps. I started and just let some ball bounce and it was somehow wrong. Activating a frame-cap made it right. The problem is simply that running at extremely high fps can lead to extremly small floating point values and floating-point arithmetic starts to break. I guess it is important because not restricting frames and starting with a new project where you literally do nothing will always yield extremely high fps.
Trying to learn to debug 16 bit Assembly programs. The very few GDB tutorials assume you are working in C or C++. Would appreciate any info on how to debug an Assembly program. Got GDB working but can't figure out how to display the program code if it's not an .exe
Why would we want to use a matrix for translation at all? It's just three addition operations.
amazing 👏👏👏
01:04:21 the formula of delta y is wrong, its missing + operator after pl.y
This is really really helpful, I am going to buy your course as well 😊
How can this transfer to, say, 3 dimensions, instead of 2D, for cases of working with a 3D OpenGL/C++ engine?
i would guess you try to find a plane in the same way as this.
drghtfbyxc
You're a good teacher
This thing is perfect for Shaders and Compute shaders
Hallelujah! Lots of fun doing it!
@@guilhermecampos8313 That's the goal. 🙂
damn i have to drop this comment praising how valuable this is. Amazing, truly amazing that you take your time to explain this
feel like theres a filter
Great video! One way of explaining perspective correct texture mapping that was particularly effective for me is as follows: Consider two quads of the same screen-space shape. For a given set of 2D coordinates, you could have either a small object up close, or a very large object far away, mapping to the same exact screen-space position. The close up object will have fine details visible, and the details of the far away object will be harder, or impossible to see, but a 2D rasterizer will have no way to differentiate between these two objects. This is because of depth. Vertexes are affected by depth, the further away they are from the camera, the closer in 2D coordinates they will become, and of course the same must apply to the details of the object (texels). Texels that are further away must be shrunk according to depth.
First, we do not need matrices to calculate Xp and Yp. Matrices will not do much if you do not understand how to manipulate the 3d vertices without them :) Aspect ratio is not needed at all, because you do not change the aspect ratio of displayed objects. In real life cameras eye and lense does not care about aspect ratios - the fov angle is always the same. zfar is not needed at all. People stop complicating easy things.
Looks awesome. Also implemented some stuff of it. But one thing i don't understand is why acceleration is multiplied twice with dt. When i calculate the velocity then it is the velocity between two frames. This is why velocity is divided by dt to get the velocity for one second. But as we are frame dependent we multiply again by dt. So in the end the division and multiplication of dt cancels and we just can add the velocity as it already is the velocity for one frame step. Same goes for acceleration. I would just add (acceleration * dt) to get the acceleration for one frame. But in Verlet it has to be (acceleration * dt * dt). Why?
I figured it out. In Euler we do add "acceleration * dt" to velocity. But then again just "velocity * dt" is again added to the position. So for acceleration it turns out to be "velocity * dt * dt" that is added to position. Btw. thanks for the video, its really great and your content is awesome.
Great lessons, thank you! About your end question: pseudo racing game (Top Gear, Outrun, Chase HQ, etc).
I love u omg. Best lecture abput homogenous coordinates
Amazing video! Thanks for sharing all that detailed knowledge with us! Gracias, Gustavo!
pretty sure aspect ratio is w/h. or am i mistaken?
Hi there. Did I make a mistake? So, for example, if we have a resolution of 800x600, the factor that we are looking for to multiply our x component is 0.75. That is h/w, no?