<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Forum Pasja Informatyki - Najnowsze z tagiem webgl</title>
<link>https://forum.pasja-informatyki.pl/tag/webgl</link>
<description>Powered by Question2Answer</description>
<item>
<title>Webgl - Obracanie kamery i problem z osiami</title>
<link>https://forum.pasja-informatyki.pl/549271/webgl-obracanie-kamery-i-problem-z-osiami</link>
<description>

&lt;p&gt;Witam.&lt;/p&gt;



&lt;p&gt;To mój pierwszy post na tym forum. Chciałbym się przywitać&amp;nbsp;z wszystkimi użytkownikami tego wspaniałego forum.&lt;/p&gt;



&lt;p&gt;Niestety moja wizyta podyktowana jest pewnym problemem na jaki napotkałem. Od pewnego czasu pisze bibliotekę obsługująca webgl i obecnie zabrałem się za pisanie kamery. Chciałem to zrobić po najmniejszej linii oporu. Miała działać tak:&lt;/p&gt;



&lt;p&gt;1. Generuje macierz widoku perspektywicznego.&lt;/p&gt;



&lt;pre class=&quot;brush:jscript;&quot;&gt;
const aspect = GL.canvas.clientWidth / GL.canvas.clientHeight;
const projectionMatrix = m4.perspective(fieldOfViewRadians, aspect, 1, 2000);&lt;/pre&gt;



&lt;p&gt;2. Ustawiam kamerę na jakiejś pozycji i ustawiam punkt patrzenia na wprost.&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:jscript;&quot;&gt;
cameraPosition = [pos_x, pos_y, pos_z];
cameraMatrix = m4.lookAt(cameraPosition, this.target, up);&lt;/pre&gt;



&lt;p&gt;3. Modyfikuje za pomocą macierzy obrotu widok w dwóch płaszczyznach.&lt;/p&gt;



&lt;pre class=&quot;brush:jscript;&quot;&gt;
cameraMatrix = m4.zRotate(cameraMatrix, angle_z); 
viewMatrix = m4.yRotate(cameraMatrix, angle_y); // ta oś sprawia kłopot&lt;/pre&gt;



&lt;p&gt;4.Potem wszystko składam:&lt;/p&gt;



&lt;pre class=&quot;brush:jscript;&quot;&gt;
 viewMatrix = m4.inverse(viewMatrix);// Make a view matrix from the camera matrix.
 matrix = m4.multiply(projectionMatrix, viewMatrix);&lt;/pre&gt;



&lt;p&gt;W teorii wydaje się że powinno działać i faktycznie działa dla jednej osi ale problem pojawia się gdy dodaje 2 oś, Nagle obraz zaczyna dziwnie skręcać przy próbie ruchu kamery. Podejrzewam że oś nie jest sztywno połączona z&amp;nbsp;&amp;nbsp;kamerą lub też pierwsza modyfikacja ją zmienia. Czy ktoś wie jak to naprawić? I czy mógłby to tak jakoś prosto mi wyjaśnić?&lt;/p&gt;</description>
<category>JavaScript</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/549271/webgl-obracanie-kamery-i-problem-z-osiami</guid>
<pubDate>Tue, 17 Aug 2021 22:10:17 +0000</pubDate>
</item>
<item>
<title>WebGL, rozciąganie modeli</title>
<link>https://forum.pasja-informatyki.pl/514353/webgl-rozciaganie-modeli</link>
<description>

&lt;p&gt;Witam, tworzę bibliotekę graficzną w &lt;em&gt;Rust / WASM + ugli_webgl i stdweb&lt;/em&gt;. Myślę jednak że technologia ani cały kod nie mają tu żadnego znaczenia. Problem jest dość prozaiczny i polega na rozciąganiu się modeli w&amp;nbsp;stosunku do wymiarów okna:&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;https://forum.pasja-informatyki.pl/?qa=blob&amp;amp;qa_blobid=8847510108216634479&quot; style=&quot;height:351px; width:600px&quot;&gt;&lt;/p&gt;



&lt;p&gt;Przedstawione powyżej bryły powinny być sześcianami. Perspektywa wygląda tak:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
self.context.viewport(0, 0, window().inner_width(), window().inner_height());

projection = glm::perspective(
        (self.camera.get_zoom() as f32).to_radians(),
         window().inner_width() as f32 / window().inner_height() as f32,
         0.1,
         100.0,
);&lt;/pre&gt;



&lt;p&gt;FOV domyślnie jest ustawiony na 45 stopni, druki argument to tradycyjne stosunek szerokości do wysokości obszaru wyświetlania. Podobne rozwiązanie zastosowałem w wersji&amp;nbsp;desktopowej&amp;nbsp;w C++, tam jednak wszystko działało poprawnie. Nie wiem co mogłem pominąć, będę bardzo wdzięczny za wskazówki. Implementacja kamery:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
use stdweb::web::TypedArray;
use ugli_webgl::WebGL2RenderingContext as gl;

use super::exceptions::{EngineResult, EngineRuntimeError};

use nalgebra_glm as glm;

use stdweb::console;

// -----------------------------------------------------------------------------------------------------------

pub enum MovementDirection {
    Forward,
    Backward,
    Left,
    Right,
}

// -----------------------------------------------------------------------------------------------------------

pub const DEFAULT_YAW: f32 = -90.0;
pub const DEFAULT_PITCH: f32 = 0.0;
pub const DEFAULT_MOVEMENT_SPEED: f32 = 6.0;
pub const DEFAULT_MOVEMENT_SENSITIVITY: f32 = 1.3;
pub const DEFAULT_ZOOM: f32 = 45.0;

// -----------------------------------------------------------------------------------------------------------

pub struct FPSCamera {
    position: glm::TVec3&amp;lt;f32&amp;gt;,
    front: glm::TVec3&amp;lt;f32&amp;gt;,
    up: glm::TVec3&amp;lt;f32&amp;gt;,
    right: glm::TVec3&amp;lt;f32&amp;gt;,
    world_up: glm::TVec3&amp;lt;f32&amp;gt;,
    yaw: f32,
    pitch: f32,
    zoom: f32,
    // const
    movement_speed: f32,
    mouse_sensitivity: f32,
}

// -----------------------------------------------------------------------------------------------------------

impl FPSCamera {
    pub fn new(
        position: glm::TVec3&amp;lt;f32&amp;gt;,
        world_up: glm::TVec3&amp;lt;f32&amp;gt;,
        yaw: f32,
        pitch: f32,
    ) -&amp;gt; FPSCamera {
        let mut camera = FPSCamera {
            front: glm::vec3(0.0, 0.0, -1.0),
            movement_speed: DEFAULT_MOVEMENT_SPEED,
            mouse_sensitivity: DEFAULT_MOVEMENT_SENSITIVITY,
            zoom: DEFAULT_ZOOM,
            position,
            world_up,
            yaw,
            pitch,
            right: glm::vec3(0.5, 0.0, 0.0),
            up: glm::vec3(0.5, 0.0, 0.0),
        };

        camera.update_camera_vectors();

        camera
    }

    fn update_camera_vectors(&amp;amp;mut self) {
        let mut front = glm::vec3(0.0, 0.0, 0.0);
        front.x = self.yaw.to_radians().cos() * &amp;amp;self.pitch.to_radians().cos();
        front.y = self.pitch.to_radians().sin();
        front.z = self.yaw.to_radians().sin() * self.pitch.to_radians().cos();
        self.front = glm::normalize(&amp;amp;front);
        self.right = glm::normalize(&amp;amp;glm::cross(&amp;amp;self.front, &amp;amp;self.world_up));
        self.up = glm::normalize(&amp;amp;glm::cross(&amp;amp;self.right, &amp;amp;self.front));
    }

    pub fn get_view_matrix(&amp;amp;self) -&amp;gt; glm::TMat4&amp;lt;f32&amp;gt; {
        glm::look_at(&amp;amp;self.position, &amp;amp;(self.position + self.front), &amp;amp;self.up)
    }

    pub fn get_zoom(&amp;amp;self) -&amp;gt; f32 {
        self.zoom
    }

    pub fn get_position(&amp;amp;self) -&amp;gt; &amp;amp;glm::TVec3&amp;lt;f32&amp;gt; {
        &amp;amp;self.position
    }

    pub fn process_direction(&amp;amp;mut self, dir: MovementDirection) {
        let velocity = self.movement_speed * 0.01;
        match dir {
            MovementDirection::Forward =&amp;gt; self.position += self.front * velocity,
            MovementDirection::Backward =&amp;gt; self.position -= self.front * velocity,
            MovementDirection::Left =&amp;gt; self.position -= self.right * velocity,
            MovementDirection::Right =&amp;gt; self.position += self.right * velocity,
        }
    }

    pub fn process_mouse_movement(&amp;amp;mut self, mut xoffset: f32, mut yoffset: f32) {

        xoffset *= self.mouse_sensitivity;
        yoffset *= self.mouse_sensitivity;

        self.yaw += xoffset;
        self.pitch += yoffset;

        if self.pitch &amp;gt; 89.0 {
            self.pitch = 89.0;
        }
        if self.pitch &amp;lt; -89.0 {
            self.pitch = -89.0;
        }

        self.update_camera_vectors();
    }
}
&lt;/pre&gt;



&lt;p&gt;W razie potrzeby mogę dać resztę kodu lub w ogóle link do repozytorium. Z góry dziękuje za pomoc i pozdrawiam :)&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/514353/webgl-rozciaganie-modeli</guid>
<pubDate>Sat, 31 Oct 2020 12:32:07 +0000</pubDate>
</item>
<item>
<title>Witam, mam następujący problem: element canvas nie chce mi wyświetlić żadnej figury z poziomu kodu. co robić</title>
<link>https://forum.pasja-informatyki.pl/487022/witam-nastepujacy-problem-element-canvas-wyswietlic-zadnej-figury-poziomu-robic</link>
<description>

&lt;pre class=&quot;brush:jscript;&quot;&gt;
function main(){

var plotno=document.querySelector(&quot;plotno&quot;);
var gl=plotno.getContext(&quot;WEBGL&quot;);

if(gl===null) {

alert('Nie można zainicjować renderowania.');

return;
}

gl.clearColor(0.0,0.0,0.0,1.0);

gl.clear(gl.COLOR_BUFFER_BIT);
}

window.onload=main;

function draw(drawScene) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var plotno = document.querySelector(&quot;plotno&quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var plotno = getContext('webgl');

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var vsSource = `
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;attribute vec4 aVertexPosition;&quot;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;uniform mat4 uModelViewMatrix;&quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;uniform mat4 uProjectionMatrix;&quot;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;void main() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gl_Position = &quot;uProjectionMatrix * uModelViewMatrix * aVertexPosition;&quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;`;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function initShaderProgram(gl, vsSource, fsSource) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var vertexShader = &quot;loadShader(gl, gl.VERTEX_SHADER, vsSource);&quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var fragmentShader = &quot;loadShader(gl, gl.FRAGMENT_SHADER, fsSource);&quot;

&amp;nbsp;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var shaderProgram = &quot;gl.createProgram();&quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;gl.attachShader(shaderProgram, vertexShader);&quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;gl.attachShader(shaderProgram, fragmentShader);&quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;gl.linkProgram(shaderProgram);&quot;

&amp;nbsp;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert('Unable to initialize the shader program: ' + gl.getProgramInfoLog(shaderProgram));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return null;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return shaderProgram;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function loadShader(gl, type, source) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var shader = &quot;gl.createShader(type);&quot;

&amp;nbsp;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gl.shaderSource(shader, source);

&amp;nbsp;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert('An error occurred compiling the shaders: ' + gl.getShaderInfoLog(shader));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gl.deleteShader(shader);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return null;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return shader;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var shaderProgram = &quot;initShaderProgram(gl, vsSource, fsSource);&quot;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var programInfo = {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;program: shaderProgram,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;attribLocations: {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vertexPosition: gl.getAttribLocation(shaderProgram, 'aVertexPosition'),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uniformLocations: {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;projectionMatrix: &quot;gl.getUniformLocation(shaderProgram, 'uProjectionMatrix')&quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;modelViewMatrix: &quot;gl.getUniformLocation(shaderProgram, 'uModelViewMatrix')&quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function initBuffers(gl) {

&amp;nbsp;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const positionBuffer = gl.createBuffer();

&amp;nbsp;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);

&amp;nbsp;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var positions = [-1.0, 1.0,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1.0, 1.0, -1.0, -1.0,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1.0, -1.0,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;];

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gl.bufferData(gl.ARRAY_BUFFER,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new Float32Array(positions),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gl.STATIC_DRAW);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;position: positionBuffer,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function drawScene(gl, programInfo, buffers) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gl.clearColor(0.0, 0.0, 0.0, 1.0);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gl.clearDepth(1.0);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gl.enable(gl.DEPTH_TEST);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gl.depthFunc(gl.LEQUAL);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const fieldOfView = 45 * Math.PI / 180; // in radians
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const aspect = gl.canvas.clientWidth / gl.canvas.clientHeight;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const zNear = 0.1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const zFar = 100.0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const projectionMatrix = mat4.create();

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mat4.perspective(projectionMatrix,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fieldOfView,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aspect,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;zNear,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;zFar);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var modelViewMatrix = mat4.create();

&amp;nbsp;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mat4.translate(modelViewMatrix,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;modelViewMatrix, [-0.0, 0.0, -6.0]);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const numComponents = 2; // pull out 2 values per iteration
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const type = gl.FLOAT; // the data in the buffer is 32bit floats
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const normalize = false; // don't normalize
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const stride = 0; // how many bytes to get from one set of values to the next
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// 0 = use type and numComponents above
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const offset = 0; // how many bytes inside the buffer to start from
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gl.bindBuffer(gl.ARRAY_BUFFER, buffers.position);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gl.vertexAttribPointer(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;programInfo.attribLocations.vertexPosition,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;numComponents,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;type,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;normalize,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stride,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;offset);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gl.enableVertexAttribArray(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;programInfo.attribLocations.vertexPosition);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gl.useProgram(programInfo.program);

&amp;nbsp;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gl.uniformMatrix4fv(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;programInfo.uniformLocations.projectionMatrix,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;false,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;projectionMatrix);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gl.uniformMatrix4fv(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;programInfo.uniformLocations.modelViewMatrix,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;false,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;modelViewMatrix);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var offset = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var vertexCount = 4;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gl.drawArrays(gl.TRIANGLE_STRIP, offset, vertexCount);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}
window.onload=draw;&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>JavaScript</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/487022/witam-nastepujacy-problem-element-canvas-wyswietlic-zadnej-figury-poziomu-robic</guid>
<pubDate>Fri, 08 May 2020 08:13:21 +0000</pubDate>
</item>
<item>
<title>Canvas/ webgl/ phaser ... - Wypełnianie kolorem, grafika</title>
<link>https://forum.pasja-informatyki.pl/408122/canvas-webgl-phaser-wypelnianie-kolorem-grafika</link>
<description>Witam, uzywam frameworka phaser, lecz on sam wykorzystuje pixi.js i jest renderowany w Canvas/Webgl i teraz pytanie, chce dodać kontury postaci i żeby można było je wypełnić kolorem (np. buty do postaci i żeby ktoś mog ustawic kolor RGB)&lt;br /&gt;
&lt;br /&gt;
Jak tego dokonać?</description>
<category>JavaScript</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/408122/canvas-webgl-phaser-wypelnianie-kolorem-grafika</guid>
<pubDate>Sat, 19 Jan 2019 00:01:17 +0000</pubDate>
</item>
<item>
<title>WebGL z canvas</title>
<link>https://forum.pasja-informatyki.pl/398029/webgl-z-canvas</link>
<description>Witam, czy istnieje możliwość robienia gier w canvas z użyciem WebGL?&lt;br /&gt;
&lt;br /&gt;
Jak zacząć zabawe z WebGL i czy w ogóle warto się uczyć robić gry na tym, czy może lepiej zastąpić to phaserem, lub połączyć oba?</description>
<category>JavaScript</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/398029/webgl-z-canvas</guid>
<pubDate>Mon, 03 Dec 2018 23:20:06 +0000</pubDate>
</item>
<item>
<title>WebGL zapobieganie zwiększaniu szybkości obrotu</title>
<link>https://forum.pasja-informatyki.pl/221631/webgl-zapobieganie-zwiekszaniu-szybkosci-obrotu</link>
<description>

&lt;p&gt;Witam!&amp;nbsp;
&lt;br&gt;
Mam pewien problem z moim skryptem WebGL.&amp;nbsp;
&lt;br&gt;
Przy klikaniu przycisku 'Uruchom' obiekt za każdym razem zyskuje na prędkości. Chciałbym, żeby prędkość obrotu była stała, bez względu na to ile razy przycisk zostanie wciśnięty. Proszę o pomoc w tym temacie ;)&amp;nbsp;
&lt;br&gt;

&lt;br&gt;
&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:xml;&quot;&gt;
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
&amp;lt;head&amp;gt;
   &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
   &amp;lt;title&amp;gt;Grafika komputerowa - WebGL&amp;lt;/title&amp;gt;
   &amp;lt;link rel=&quot;stylesheet&quot; href=&quot;CSS/style.css&quot;&amp;gt;
   &amp;lt;script src=&quot;JS/matrix.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
   &amp;lt;script src=&quot;JS/main.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
	&amp;lt;div&amp;gt;
		&amp;lt;form class=&quot;rotationCheckboxes&quot;&amp;gt;
			&amp;lt;input type=&quot;checkbox&quot; id=&quot;rotateX&quot;&amp;gt; Rotacja X&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
			&amp;lt;input type=&quot;checkbox&quot; id=&quot;rotateY&quot;&amp;gt; Rotacja Y&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
			&amp;lt;input type=&quot;checkbox&quot; id=&quot;rotateZ&quot;&amp;gt; Rotacja Z
		&amp;lt;/form&amp;gt;
		&amp;lt;canvas id=&quot;glcanvas&quot; width=&quot;500&quot; height=&quot;300&quot;&amp;gt;Brak wsparcia dla elementu HTML canvas.&amp;lt;/canvas&amp;gt;
		&amp;lt;br /&amp;gt;
		&amp;lt;input type=&quot;button&quot; value=&quot;Uruchom&quot; onclick=&quot;runWebGL()&quot;/&amp;gt;
		&amp;lt;input type=&quot;button&quot; value=&quot;Zamknij&quot; onclick=&quot;self.close()&quot;/&amp;gt; 
   &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;



&lt;pre class=&quot;brush:jscript;&quot;&gt;
var gl_canvas;
var gl_ctx;

var _triangleVertexBuffer;
var _triangleFacesBuffer;
var _position;
var _color;
var _PosMatrix;
var _MovMatrix;
var _ViewMatrix;
var _matrixProjection;
var _matrixMovement;
var _matrixView;

var rotationSpeed = 0.001;
var zoomRatio = -6;

var X, Y, Z;

function runWebGL () {
   getRotation();
   gl_canvas = document.getElementById(&quot;glcanvas&quot;);
   gl_ctx = gl_getContext(gl_canvas);
   gl_initShaders();
   gl_initBuffers();
   gl_setMatrix();
   gl_draw();
}

function getRotation() {
   X = document.getElementById('rotateX').checked;
   Y = document.getElementById('rotateY').checked;
   Z = document.getElementById('rotateZ').checked;
}

// ==================================================================== //

function gl_getContext (canvas) {
   try {
      var ctx = canvas.getContext(&quot;webgl&quot;) || canvas.getContext(&quot;experimental-webgl&quot;);
      ctx.viewportWidth = canvas.width;
      ctx.viewportHeight = canvas.height;
   } catch (e) {}

   if (!ctx) {
      document.write('Unable to initialize WebGL. Your browser may not support it.')
   }
   return ctx;
}

// ==================================================================== //

// Declare the shaders. They are pieces of code compiled by WebGL and
// executed on the graphics device. They are written in GLSL.
function gl_initShaders () {
   // position of the point - 0. is Z and 1. is W
   // PosMatrix is uniform variable - its value is constant while rendering an object
   // MovMatrix is the movement matrix of the triangle
   // gl_position -&amp;gt; we move position with MovMatrix before projecting it
   var vertexShader = &quot;\n\
      attribute vec3 position;\n\
      uniform mat4 PosMatrix;\n\
      uniform mat4 MovMatrix;\n\
      uniform mat4 ViewMatrix; \n\
      attribute vec3 color;\n\
      varying vec3 vColor;\n\
      void main(void) {\n\
         gl_Position = PosMatrix * ViewMatrix * MovMatrix * vec4(position, 1.);\n\
         vColor = color;\n\
      }&quot;;

   // set black color
   var fragmentShader = &quot;\n\
      precision mediump float;\n\
      varying vec3 vColor;\n\
      void main(void) {\n\
         gl_FragColor = vec4(vColor, 1.);\n\
      }&quot;;

   // this function is used to compile a shader
   var getShader = function(source, type, typeString) {
      var shader = gl_ctx.createShader(type);
      gl_ctx.shaderSource(shader, source);
      gl_ctx.compileShader(shader);

      if (!gl_ctx.getShaderParameter(shader, gl_ctx.COMPILE_STATUS)) {
         alert('error in' + typeString);
         return false;
      }
      return shader;
   };

   // Compile the vertex and fragment shaders
   var shader_vertex = getShader(vertexShader, gl_ctx.VERTEX_SHADER, &quot;VERTEX&quot;);
   var shader_fragment = getShader(fragmentShader, gl_ctx.FRAGMENT_SHADER, &quot;FRAGMENT&quot;);


   // Create the Shader program.
   // Shader program is a combination of a vertex and fragment shaders.
   var SHADER_PROGRAM = gl_ctx.createProgram();
   gl_ctx.attachShader(SHADER_PROGRAM, shader_vertex);
   gl_ctx.attachShader(SHADER_PROGRAM, shader_fragment);


   // Linking of the shader program to the WebGL context - gl_ctx,
   // in order to match the shader variables to javascript variables
   gl_ctx.linkProgram(SHADER_PROGRAM);

   // Link PosMatrix\MovMatrix\ViewMatrix GLSL variables to
   // _PosMatrix\_MovMatrix\_ViewMatrix javascript variables
   // Uniforms do not need to be enabled like attributes
   _PosMatrix = gl_ctx.getUniformLocation(SHADER_PROGRAM, &quot;PosMatrix&quot;);
   _MovMatrix = gl_ctx.getUniformLocation(SHADER_PROGRAM, &quot;MovMatrix&quot;);
   _ViewMatrix = gl_ctx.getUniformLocation(SHADER_PROGRAM, &quot;ViewMatrix&quot;);

   // position GLSL variable links to _position variable
   _position = gl_ctx.getAttribLocation(SHADER_PROGRAM, &quot;position&quot;);    // *******
   // color GLSL variable links to _color variable
   _color = gl_ctx.getAttribLocation(SHADER_PROGRAM, &quot;color&quot;);
   // enable GLSL attributes variables
   gl_ctx.enableVertexAttribArray(_position);
   gl_ctx.enableVertexAttribArray(_color);
   // linking is over - tells WebGL context to use SHADER_PROGRAM for rendering.
   gl_ctx.useProgram(SHADER_PROGRAM);
}

// ==================================================================== //

function gl_initBuffers () {
   // Point coordinates array of the triangle
//   var triangleVertices = [
//      -1, -1, 0,    // bottom left
//       0, 0, 1,      // submit color: blue
//       1, -1, 0,    // bottom right
//       1, 1, 1,      // submit color: white
//       1, 1, 0,     // top right
//       1, 0, 0       // submit color: red
//   ];
   var triangleVertices = [
    1,0,2,    // wierzchołek #1
    0, 0, 0,       // kolor: czarny
    1,0,0,      // wierzchołek #2
    2, 0, 0,       // kolor: czerwony
    -1,0,1,       // wierzchołek #3
    1, 1, 0,       // kolor: zółty
    0,2,0,       // wierzchołek #4
    0, 1, 0      // kolor: niebieski
];


   // Building Vertex Buffer Object - WebGL vertex array
   _triangleVertexBuffer = gl_ctx.createBuffer();                // *******
   gl_ctx.bindBuffer(gl_ctx.ARRAY_BUFFER, _triangleVertexBuffer);
   gl_ctx.bufferData(gl_ctx.ARRAY_BUFFER, new Float32Array(triangleVertices), gl_ctx.STATIC_DRAW);


   // Triangle faces array
   // var triangleFaces = [0, 1, 2];
   var triangleFaces = [
   0, 1, 2,       // pobierz 1, 2 i 3 wierzchołek z tablicy triangleVertices
   0, 1, 3,
   1, 2, 3,
   0, 2, 3
];

   _triangleFacesBuffer = gl_ctx.createBuffer();                     // *******
   gl_ctx.bindBuffer(gl_ctx.ELEMENT_ARRAY_BUFFER, _triangleFacesBuffer);
   gl_ctx.bufferData(gl_ctx.ELEMENT_ARRAY_BUFFER, new Uint16Array(triangleFaces), gl_ctx.STATIC_DRAW);
}

// ==================================================================== //

function gl_setMatrix () {
   _matrixProjection = MATRIX.getProjection(40, gl_canvas.width/gl_canvas.height, 1, 100);
   _matrixMovement = MATRIX.getIdentityMatrix();
   _matrixView = MATRIX.getIdentityMatrix();

   MATRIX.translateZ(_matrixView, zoomRatio);
}

// ==================================================================== //

function gl_draw() {
   // set the color to transparent
   gl_ctx.clearColor(0.0, 0.0, 0.0, 0.0);
   // enable Depth buffer test and set depth buffer comparison function
   gl_ctx.enable(gl_ctx.DEPTH_TEST);
   gl_ctx.depthFunc(gl_ctx.LEQUAL);

   // set the clear value for the depth buffer to 1
   gl_ctx.clearDepth(1.0);

    var timeOld = 0;
	var dAngle = 0;
	
   var animate = function (time) {
       dAngle = rotationSpeed * (time - timeOld);
		
      if (X) {
         MATRIX.rotateX(_matrixMovement, dAngle);
      }
      if (Y) {
         MATRIX.rotateY(_matrixMovement, dAngle);
      }
      if (Z) {
         MATRIX.rotateZ(_matrixMovement, dAngle);
      }

      timeOld = time;

      // set the drawing area on the canvas and clear it
      gl_ctx.viewport(0.0, 0.0, gl_canvas.width, gl_canvas.height);
      gl_ctx.clear(gl_ctx.COLOR_BUFFER_BIT | gl_ctx.DEPTH_BUFFER_BIT);

      // set projection matrix. _matrixProjection is not set yet.
      // It is a javascript array of 1 dimension with 16 floats
      gl_ctx.uniformMatrix4fv(_PosMatrix, false, _matrixProjection);
      gl_ctx.uniformMatrix4fv(_MovMatrix, false, _matrixMovement);
      gl_ctx.uniformMatrix4fv(_ViewMatrix, false, _matrixView);
      // drawing is here - use these points for next drawing
      // gl_ctx.vertexAttribPointer(variable, dimension, type, normalize, total vertex size in bytes, offset)
      gl_ctx.vertexAttribPointer(_position, 3, gl_ctx.FLOAT, false, 4*6, 0);
      gl_ctx.vertexAttribPointer(_color, 3, gl_ctx.FLOAT, false, 4*4, 0);

      gl_ctx.bindBuffer(gl_ctx.ARRAY_BUFFER, _triangleVertexBuffer);
      gl_ctx.bindBuffer(gl_ctx.ELEMENT_ARRAY_BUFFER, _triangleFacesBuffer);

      // draw the triangle
      //gl_ctx.drawElements(gl_ctx.TRIANGLES, 3, gl_ctx.UNSIGNED_SHORT, 0);

      // draw cube
      gl_ctx.drawElements(gl_ctx.TRIANGLES, 12, gl_ctx.UNSIGNED_SHORT, 0);

      // drawing is finished - show the render
      gl_ctx.flush();
      // redraws the scene as soon as ready
      window.requestAnimationFrame(animate);
   };

   // launch animate for the first time
	   animate(timeOld);

}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>JavaScript</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/221631/webgl-zapobieganie-zwiekszaniu-szybkosci-obrotu</guid>
<pubDate>Mon, 30 Jan 2017 02:34:14 +0000</pubDate>
</item>
<item>
<title>Przechwycenie i wypakowanie octet-stream oraz jaki to framework</title>
<link>https://forum.pasja-informatyki.pl/147625/przechwycenie-i-wypakowanie-octet-stream-oraz-jaki-to-framework</link>
<description>

&lt;p&gt;A więc mamy sobie jakąś tam grę przeglądarkową.
&lt;br&gt;
Gra wyświetlana jest w canvas za pośrednictwem JS'a.
&lt;br&gt;
Po przez akcję w grze, przeglądarka wysyła request do serwera i otrzymuje odpowiedź zwrotną.
&lt;br&gt;
W 90% jest to octet-stream. Potrzebuję się dowiedzieć&amp;nbsp;jak wypakować taki response.
&lt;br&gt;
Niestety, nie znam nazwy frameworka, w kórym została ta gra zrobiona.
&lt;br&gt;
Dlatego też przesyłam główny plik z grą:&amp;nbsp;&lt;a href=&quot;https://drive.google.com/open?id=0B_m8fC4d_bzNdlZnVzVjQWpuaW8&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://drive.google.com/open?id=0B_m8fC4d_bzNdlZnVzVjQWpuaW8&lt;/a&gt;
&lt;br&gt;
&lt;span style=&quot;color:#FF0000&quot;&gt;&lt;strong&gt;Uwaga, gra po rozpakowaniu waży 11mb i jest zminifikowana w js. Nie polecam otwierać w IDE.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;</description>
<category>JavaScript</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/147625/przechwycenie-i-wypakowanie-octet-stream-oraz-jaki-to-framework</guid>
<pubDate>Sat, 04 Jun 2016 18:10:58 +0000</pubDate>
</item>
<item>
<title>BabylonJS czy ThreeJS?</title>
<link>https://forum.pasja-informatyki.pl/133780/babylonjs-czy-threejs</link>
<description>Witam!&lt;br /&gt;
Jak w temacie: BabylonJS czy ThreeJS? a może alternatywa?&lt;br /&gt;
Proszę o uzasadnianie swoich wypowiedzi, wypisać plusy i minusy :)&lt;br /&gt;
&lt;br /&gt;
Pozdrawiam!</description>
<category>JavaScript</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/133780/babylonjs-czy-threejs</guid>
<pubDate>Sun, 24 Apr 2016 07:57:48 +0000</pubDate>
</item>
<item>
<title>Generowanie koloru na losowym obiekcie</title>
<link>https://forum.pasja-informatyki.pl/121386/generowanie-koloru-na-losowym-obiekcie</link>
<description>

&lt;p&gt;Dobry. Mam sobie kwadraciki&amp;nbsp;3x3x3 (kostka rubika) i domyślnie kolor&amp;nbsp;jaki ustawiłem przy generacji każdego z nich to czarny z opacity: 0.3. I teraz chciałbym wygenerować dla 10 losowych kwadracików (w położeniu X, Y, Z)&amp;nbsp;inny kolor. Niby mam tablicę i mam wektory, ale nie potrafię ogarnąć logiki takiej funkcji. Za każdy tip byłbym wdzięczny :)&lt;/p&gt;



&lt;pre class=&quot;brush:jscript;&quot;&gt;
var camera, controls, mesh, scene, renderer, helper,
            MeshBasicMaterial=new THREE.MeshBasicMaterial({
                color: 0x000000,
                opacity: 0.3,
                transparent: true
            });
var BoxGeometry = new THREE.BoxGeometry(16, 16, 16);

var meshArrayX = [];
        for (var x=0; x&amp;lt;3; x++) {
            var meshArrayY = [meshArrayX.push(mesh = new THREE.Mesh(BoxGeometry, MeshBasicMaterial))];
            for(var y=0; y&amp;lt;3; y++){
                var meshArrayZ = [meshArrayY.push(mesh = new THREE.Mesh(BoxGeometry, MeshBasicMaterial))];
                for(var z=0; z&amp;lt;3; z++){
                    meshArrayZ.push(mesh = new THREE.Mesh(BoxGeometry, MeshBasicMaterial));
                    mesh.position.x = 16*x;
                    mesh.position.y = 16*y;
                    mesh.position.z = 16*z;
                    scene.add(mesh);


                    console.log(meshArrayX.length, meshArrayY.length-1, meshArrayZ.length-1, mesh.position);
                    }
                }
            }
        color(mesh)

function random(){
        var random = [0, 16, 32];
        var randomValue = random[Math.floor(random.length * Math.random())];
        console.log(randomValue);
    }

    function color(selector){
        for(var v=0; v&amp;lt;10; v++){
            selector.position.x = random();
            selector.position.y = random();
            selector.position.z = random();
            selector.material.color.setHex(0x0000ff);
        }
    }&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>JavaScript</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/121386/generowanie-koloru-na-losowym-obiekcie</guid>
<pubDate>Thu, 24 Mar 2016 13:47:14 +0000</pubDate>
</item>
</channel>
</rss>