zauonlok / renderer Goto Github PK
View Code? Open in Web Editor NEWA shader-based software renderer written from scratch in C89
Home Page: https://zauonlok.github.io/renderer/
License: MIT License
A shader-based software renderer written from scratch in C89
Home Page: https://zauonlok.github.io/renderer/
License: MIT License
求问自己写的渲染器跟opengl等的性能比怎么样?
function calculate_pan
in camera.c
:
static vec3_t calculate_pan(vec3_t from_camera, motion_t motion) {
vec3_t forward = vec3_normalize(from_camera);
vec3_t left = vec3_cross(UP, forward);
vec3_t up = vec3_cross(forward, left);
float distance = vec3_length(from_camera);
float factor = distance * (float)tan(FOVY / 2) * 2;
vec3_t delta_x = vec3_mul(left, motion.pan.x * factor);
vec3_t delta_y = vec3_mul(up, motion.pan.y * factor);
return vec3_add(delta_x, delta_y);
}
vector left
and vector up
are not normalize.
This error causes the camera's motion speed to shrink as the Angle between the forward vector and the UP vector changes.
Specifically, the less close the angle between the forward vector and the UP vector is to 90 degrees, the slower the camera moves and will not move at all in extreme cases (when forward is on the same line as UP).
The correct code should look like this:
static vec3_t calculate_pan(vec3_t from_camera, motion_t motion) {
vec3_t forward = vec3_normalize(from_camera);
vec3_t left = vec3_cross(UP, forward);
left = vec3_normalize(left);
vec3_t up = vec3_cross(forward, left);
up = vec3_normalize(up);
float distance = vec3_length(from_camera);
float factor = distance * (float)tan(FOVY / 2) * 2;
vec3_t delta_x = vec3_mul(left, motion.pan.x * factor);
vec3_t delta_y = vec3_mul(up, motion.pan.y * factor);
return vec3_add(delta_x, delta_y);
}
Hey, this renderer is really a great job, I like the 3D and its algorithms (it's all illusions), and I personally made a simple one using pure javascript running on the browser:
https://github.com/medram/3Din2DCanvas
any way, about your renderer, I've noticed that when I zoom closer to the 3D object the renderer get suffering and the frame rate tremendously get low, and I guess it caused by the clipping, and to fix this issue I suggest the following:
I hope that make sense (my English is a little bit broken).
and all of the mentioned ideas/algorithms has been implemented in my Javascript renderer and it helps a lot in the performance.
One last thing please, I'm a python expert, but I didn't know how and where did you connect C code with Python code? and did you use Python "ctype"?
Thanks.
I'm trying to learn OpenGL but I'm finding the guides to be lacking in the key points so I'm now trying to learn from existing code, I'd like you to add a basic triangle example so I can follow the code back to it's roots and see how new vertices are passed after movement of the triangle via the AWSD keys. It would helpful if the triangle had 3 modes, the first being a flat colour, the 2nd being changeable colours from the arrow keys with/without the shift or control key pressed along side (the 2 modifiers deciding which point to effect) and the 3rd mode having a texture applied instead of modifiable colours, if you can add modes for lighting as well that would be appreciated. You don't need to add a lot of comments, just 1 for each mode branch so that I know where to start analysing from.
Edit: Pure C would be easier for me to read than C++ so that would also be appreciated
Edit 2: I should mention that what I'm having most difficulty with is indexed buffers, I've been able to manipulate positions with uniforms and I've also been able to change vertices by just destroying previous buffers in favour of a new buffer.
Edit 3: Actually could you add a 2nd triangle that moves independently of the 1st, the numpad should be fine for moving it about, the goal isn't an actual game after all, just an example of utilising vertex arrays with vertex & index buffers on multiple objects
I love how minimal and clean this code is. Do you have any other open source projects? I'd love to take a look.
Hi! I was wondering, is is possible (or planned) to be able to render wireframes in the scene? Something along the lines of http://brlcad.org/gallery/picture.php?/96/category/12 ?
HI dear author,
It's truly a honor to write a letter to you, Could you please tell me what kind of algorithms in the renderer :)
thank you
best regards to you
William
Dear author, I have been studying your project recently.How are the .scn files in your model files generated?Can I export from .3DS or other 3D files?
your win32 binaries are 64bit hehe
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.