We want to find a perspective camera lookat direction
World local up vector:
Camera lookat vector:
| // Fast sixel encoder for indexed color bitmap terminal graphics | |
| // Copyright 2025- Juha Järvi | |
| // | |
| // Permission to use, copy, modify, and/or distribute this software for any | |
| // purpose with or without fee is hereby granted. | |
| // | |
| // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH | |
| // REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY | |
| // AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, | |
| // INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM |
| // Copyright 2025- Juha Järvi | |
| // | |
| // Permission to use, copy, modify, and/or distribute this software for any | |
| // purpose with or without fee is hereby granted. | |
| // | |
| // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH | |
| // REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY | |
| // AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, | |
| // INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM | |
| // LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR |
| const std = @import("std"); | |
| pub const Sizes = @Vector(4, u6); | |
| const debug = true; | |
| pub const BitReader = struct { | |
| word_buf: [*]const u32, | |
| bit_count: u6, | |
| bits: u64, |
| /* | |
| Map index along 2D Hilbert curve to coordinates (x,y) and back, | |
| branchless using bit twiddling. | |
| Copyright 2012, 2024 Juha Järvi | |
| Permission to use, copy, modify, and/or distribute this software for any | |
| purpose with or without fee is hereby granted. | |
| THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH |
| Copyright 2024- Juha Järvi | |
| Permission to use, copy, modify, and/or distribute this software for any | |
| purpose with or without fee is hereby granted. | |
| THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH | |
| REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY | |
| AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, | |
| INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM | |
| LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR |
| import { LCS, Interned } from './lcs'; | |
| export class Histogram<Token> { | |
| constructor(before: Token[], after: Token[]) { | |
| let prefix = 0; | |
| let beforeEnd = before.length; | |
| let afterEnd = after.length; | |
| // Skip common prefix. |
We want to find a perspective camera lookat direction
World local up vector:
Camera lookat vector:
| const std = @import("std"); | |
| /// Given an example struct with methods, create a function that produces vtables for similarly shaped structs. | |
| /// A vtable contains function pointers to all the struct methods, with the struct type erased. | |
| /// All structs should have an init function that takes an allocator as the first parameter and stores it in a field called "allocator". | |
| /// At most 2 parameters are supported for methods (in addition to the initial self parameter). | |
| pub fn VTableShape(comptime Template: type) type { | |
| var fields = @typeInfo(struct { // | |
| deinit: *const fn (*anyopaque) void, | |
| }).Struct.fields; |
| Copyright (c) 2020- Juha Järvi | |
| Permission to use, copy, modify, and/or distribute this software for any | |
| purpose with or without fee is hereby granted. | |
| THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH | |
| REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY | |
| AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, | |
| INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM | |
| LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR |
| import { Widget } from '@phosphor/widgets'; | |
| import { ElementExt } from '@phosphor/domutils'; | |
| export class IframePanel extends Widget { | |
| constructor(iframe?: HTMLIFrameElement | null) { | |
| super({ node: IframePanel.createNode() }); | |
| if(!iframe) iframe = document.createElement('iframe'); | |
| this.iframe = iframe; |