Make the projection map a uniform
This commit is contained in:
parent
81f9b8e040
commit
80b210e667
@ -25,6 +25,7 @@ features = [
|
||||
'WebGlBuffer',
|
||||
'WebGlProgram',
|
||||
'WebGlShader',
|
||||
'WebGlUniformLocation',
|
||||
'WebGlVertexArrayObject',
|
||||
'Window'
|
||||
]
|
||||
|
@ -10,7 +10,7 @@
|
||||
extern crate js_sys;
|
||||
/* use std::f64::consts::PI as PI; */
|
||||
use sycamore::{prelude::*, rt::{JsCast, JsValue}};
|
||||
use web_sys::{console, WebGl2RenderingContext, WebGlProgram, WebGlShader};
|
||||
use web_sys::{console, WebGl2RenderingContext, WebGlShader};
|
||||
|
||||
fn compile_shader(
|
||||
context: &WebGl2RenderingContext,
|
||||
@ -97,18 +97,9 @@ fn main() {
|
||||
|
||||
out vec4 vertexColor;
|
||||
|
||||
const float focal_length = 3.0;
|
||||
const float near_clip = 0.1;
|
||||
const float far_clip = 20.0;
|
||||
const float depth_inv = 1. / (far_clip - near_clip);
|
||||
uniform mat4 world_to_clip;
|
||||
|
||||
void main() {
|
||||
const mat4 world_to_clip = mat4(
|
||||
focal_length, 0.0, 0.0, 0.0,
|
||||
0.0, focal_length, 0.0, 0.0,
|
||||
0.0, 0.0, (near_clip + far_clip) * depth_inv, -1.,
|
||||
0.0, 0.0, 2. * near_clip * far_clip * depth_inv, 0.0
|
||||
);
|
||||
gl_Position = world_to_clip * vec4(position, 1.);
|
||||
vertexColor = vec4(color, 1.);
|
||||
}
|
||||
@ -146,14 +137,28 @@ fn main() {
|
||||
console::log_1(&JsValue::from(link_msg));
|
||||
ctx.use_program(Some(&program));
|
||||
|
||||
// find indices of vertex attributes
|
||||
// find indices of vertex attributes and uniforms
|
||||
let position_index = ctx.get_attrib_location(&program, "position") as u32;
|
||||
let color_index = ctx.get_attrib_location(&program, "color") as u32;
|
||||
let world_to_clip_loc = ctx.get_uniform_location(&program, "world_to_clip");
|
||||
|
||||
// create a vertex array and bind it to the graphics context
|
||||
let vertex_array = ctx.create_vertex_array().unwrap();
|
||||
ctx.bind_vertex_array(Some(&vertex_array));
|
||||
|
||||
// set the projection map
|
||||
let focal_length = 3.0_f32;
|
||||
let near_clip = 0.1_f32;
|
||||
let far_clip = 20_f32;
|
||||
let depth_inv = 1_f32 / (far_clip - near_clip);
|
||||
let world_to_clip: [f32; 16] = [
|
||||
focal_length, 0.0, 0.0, 0.0,
|
||||
0.0, focal_length, 0.0, 0.0,
|
||||
0.0, 0.0, (near_clip + far_clip) * depth_inv, -1.,
|
||||
0.0, 0.0, 2. * near_clip * far_clip * depth_inv, 0.0
|
||||
];
|
||||
ctx.uniform_matrix4fv_with_f32_array(world_to_clip_loc.as_ref(), false, &world_to_clip);
|
||||
|
||||
// set up a repainting routine
|
||||
create_effect(move || {
|
||||
const VERTEX_CNT: usize = 9;
|
||||
|
Loading…
Reference in New Issue
Block a user