| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/API/WebGL_API/Tutorial/Animating_objects_with_WebGL | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
In diesem Beispiel werden wir tatschlich unsere Kamera rotieren. Dadurch sieht es so aus, als ob wir das Quadrat drehen. Zuerst bentigen wir einige Variablen, um die aktuelle Rotation der Kamera zu verfolgen.
Hinweis: Fgen Sie diesen Code am Anfang Ihres "webgl-demo.js"-Scripts hinzu:
let squareRotation = 0.0;
let deltaTime = 0;
Nun mssen wir die Funktion drawScene() so aktualisieren, dass die aktuelle Rotation auf die Kamera angewendet wird, wenn sie gezeichnet wird. Nachdem die Kamera auf die ursprngliche Zeichenposition fr das Quadrat verschoben wurde, wenden wir die Rotation an.
Aktualisieren Sie in Ihrem "draw-scene.js"-Modul die Deklaration Ihrer drawScene()-Funktion, damit sie die zu verwendende Rotation erhalten kann:
function drawScene(gl, programInfo, buffers, squareRotation) {
//
}
Fgen Sie in Ihrer drawScene()-Funktion direkt nach dem mat4.translate()-Aufruf diesen Code hinzu:
mat4.rotate(
modelViewMatrix, // destination matrix
modelViewMatrix, // matrix to rotate
squareRotation, // amount to rotate in radians
[0, 0, 1],
); // axis to rotate around
Dies rotiert die modelViewMatrix um den aktuellen Wert von squareRotation um die Z-Achse.
Um die Animation tatschlich zu realisieren, mssen wir Code hinzufgen, der den Wert von squareRotation im Laufe der Zeit verndert.
Fgen Sie diesen Code am Ende Ihrer main()-Funktion hinzu und ersetzen Sie den vorhandenen drawScene()-Aufruf:
let then = 0;
// Draw the scene repeatedly
function render(now) {
now *= 0.001; // convert to seconds
deltaTime = now - then;
then = now;
drawScene(gl, programInfo, buffers, squareRotation);
squareRotation += deltaTime;
requestAnimationFrame(render);
}
requestAnimationFrame(render);
Dieser Code verwendet requestAnimationFrame, um den Browser zu bitten, die Funktion render bei jedem Frame aufzurufen. requestAnimationFrame gibt uns die Zeit in Millisekunden seit dem Laden der Seite. Wir konvertieren diese in Sekunden und ziehen dann die letzte Zeit ab, um deltaTime zu berechnen, was die Anzahl der Sekunden seit dem letzten gerenderten Frame ist.
Zum Schluss aktualisieren wir squareRotation.
Den kompletten Code anzeigen | Dieses Demo auf einer neuen Seite ffnen
WebGLRenderingContextWebGLBufferWebGLFramebufferWebGLRenderbufferWebGLObjectWebGLProgramWebGLShaderWebGLTextureWebGLUniformLocationWebGLActiveInfoWebGLShaderPrecisionFormatWebGLContextEventWebGLQueryWebGLSamplerWebGLSyncWebGLTransformFeedbackWebGLVertexArrayObjectWebGL2RenderingContextWEBGL_compressed_texture_s3tcWEBGL_compressed_texture_s3tc_srgbWEBGL_compressed_texture_etc1WEBGL_compressed_texture_pvrtcWEBGL_debug_renderer_infoWEBGL_debug_shadersWEBGL_depth_textureOES_element_index_uintEXT_frag_depthWEBGL_lose_contextEXT_texture_filter_anisotropicEXT_sRGBOES_standard_derivativesOES_texture_floatWEBGL_draw_buffersOES_texture_float_linearEXT_shader_texture_lodOES_texture_half_floatOES_texture_half_float_linearWEBGL_color_buffer_floatEXT_color_buffer_half_floatOES_vertex_array_objectANGLE_instanced_arraysEXT_blend_minmaxEXT_disjoint_timer_queryOES_draw_buffers_indexedDer Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |