קודקודייל
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
קודקודייל
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
ראשי ♦ כללי ♦ קורס תכנות משחקים – webgl – שיעור ראשון – הקמת הפרויקט

קורס תכנות משחקים – webgl – שיעור ראשון – הקמת הפרויקט

וינר יאיר 13 בינואר 2022 אין תגובות

יכול להיות שנתקלתם פה ושם באתרים שעושים שימוש בתלת מימד באתר שלהם. יכול להיות שחשבתם שזה איזה וידאו או קובץ תמונה כל שהוא שכן זה יתכן אבל אם עשיתם "בדוק מרכיב" אולי נתקלתם בתגית canvas ולשם זה החלטתי לבנות קורס שיתן לכם כלים לבנות אובייקטים תלת מימדיים על גבי דפדפן . אז ברוכים הבאים לקורס בתלת מימד עם canvas. מי שעוד לא מכיר canvas, זהו תגית HTML , המאפשרת לנו לצייר בתוכה עם קוד java script, מה שבעצם אנחנו עושים עם התגית הזו , זה משתמשים בפונקציה של getContext שמקבלת contextType שיכול להיות מסוגים שונים. בשביל לעשות תלת מימד אנחנו משתמשים ב"webgl" וכך מאפשרים לבנות אובייקט תלת מימדי :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>codcodile Webgl course</title>
</head>
<body>
    <canvas id="myCanvas"></canvas>
<script>
    const canvas = document.getElementById('myCanvas');
    const gl = canvas.getContext('webgl');
    console.log(gl)
</script>
</body>
</html>

הטכנולוגיה הזו מאפשרת לנו להשתמש במשאבי הGPU של המשחב וכך לקבל ביצועי עיבוד גובוהים ולייצר אפילו משחקים מלאי גרפיקה על דפדפן האינטרנט.

למה ללמוד webgl

מתכנתי פרונט שאוהבים דברים חדשים ואתגרי קוד שכן משפיעים על הנראות ישמחו מאד לשלב תלת מימד בקוד שלהם, וכן אני מזהיר מדובר בקוד מורכב, בוודאי שאם אתם תעמיקו בנושא אז זה כבר ניהיה קוד כבד שמשלם המון מתמטיקה והראש שלכם הולך לכאוב קצת. אין לי ספק (וגם מניסיון כמובן) שעבודה עם webgl תשפר לכם את יכולות הקידוד שלכם וההבנה שלכם עם עיבודים גרפיים שיש למחשב והדפדפן. כלו כלים שכל מפתח צד לקוח צריך שיהיו לו אם הוא מכוו גבוהה. ברמת דרישות בתעשייה לא רואים הרבה בקשות של ידע עם webgl , זה פחות נפוץ בתעשייה אלא אם מדובר בחברות של פיתוח משחקים שכן רואים דרישות מסוג זה.


ספריית עזר threejs

אפשר לעבוד ישירות עם webgl אבל ישנם ספריות שיעזרו לנו המון להתקדם מהר יותר וקבל תוצאות מעולות . הספריה הפופולארית ביותר היום בתחום היא threejs , ולכן נאעזר בה בקורס זה.

מתחילים! react and three

אז נכין את התשתית שלנו כך שנרים סביבת צד לקוח ב react ונתקין את הספריה של threejs.

בשביל להקים את הפרויקט שלנו נריץ :

npx create-react-app toss-up


ועכשיו נתקין את הספריה של threejs:

npm i three

ועכשיו נכין כמה קבצים:

  • נכין רכיב ריאקטי של coin עם תגית קאנווס.
  • נשים את כל הלוגיקה של three ב coin.jsx
  • נשנה מעט את app.jsx
  • נוסיף קצת CSS לstyle.css הראשי בשביל לסדר את הקאנווס בגודל של כל המסך

להלן הקבצים:

* {
  box-sizing: border-box;
}
html, #root{
  margin: 0;
  padding: 0;
  width: 100%;
  height: 100%;
}
body {
  margin: 0;
  padding: 0;
  width: 100%;
  height: 100%;
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans",
    "Droid Sans", "Helvetica Neue", sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

code {
  font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace;
}
import React, { useRef, useEffect } from 'react';
import * as THREE from 'three';

let renderer = null;

const initilaze = (canvas) => {
    renderer = new THREE.WebGLRenderer({
       canvas,
   });
}

function Coin() {
    const canvasRef = useRef(null);
    
    

    useEffect(() => {
        initilaze(canvasRef.current);
    }, [])
    return (
        <canvas ref={canvasRef} className="canvasClass" style={{ width: '100%', height: '100%' }}></canvas>
    )
}

export default Coin;
import Coin from "./coin";
import './App.css';
function App() {
  return (
    <div className="App">
      <Coin />
    </div>
  );
}

export default App;

מה שאתם אמורים לראות כרגע שזה מסך שחור שתופס את כל המסך. למעשה זהו הרכיב של הקאנווס שפרוס על כל המסך . בהגדרה שלו הוא בצבע שחור כברירת מחדל. ונמשיך להסבר על הקוד שלנו .

מה זה WebGLRenderer

נראה כי הקוד דיי ברור , יש לנו רכיב coin שהוא function component שמחזיקה HTML אלמנט מסוג canvas. והחלק המעניין הוא העבודה עם three . נתחיל עם הגדרה בסיסית :

WebGLRenderer | מרנדר את היצירה שלנו לתוך canvas . מקבל פרמטרים כאובייקט . כפי שניתן לראות העברנו את קאנווס לקאנווס פרמטר וכך למעשה הופך הקאנווס שלנו ל canvas עם context של webgl.

WebGLRenderer הינו קלאס מאוד שימושי, בהמשך תראו עוד שימושים שהוא עושה עבורנו והוא מאד בסיסי לעבודה עם THREE כמו למשל לרנדר את ה secne וה camera לתוך הקאנווס שלנו. (כל ההסברים בהמשך הקורס כמובן)

ממליץ בחום להדפיס לקונסול את renderer ולראות איך נראה הקלאס של WebGLRenderer מאד מעניין.

סיכום שיעור ראשון webgl | תכנות משחקים

אומנם לא עשינו יותר מידי אבל זה בדיוק השלב לסיים ולעבור לנושא הבא שלנו . כפי שאולי נחשתם הפרויקט יהיה הטלת מטבע. יהיה פה איזה משחק נחמד שכולו מבוסס תלת מימד על גבי דפדפן באמצעות תגית הקאנווס ומימוש של three ורינדורו לתוך הקאנווס. אז כרגע יצרנו רק את הבסיס להמשך עבודה ומפה נרשום בעיקר three. בחרתי לשלב react כי זה נוח לי אישית אבל כל המימוש יכול להתבצע בקובץ js אחד וקובץ index.html.

פוסטים קשורים:

קורס תכנות משחקים - webgl - שיעור שני- הסצנה והמצלמהקורס תכנות משחקים – webgl – שיעור שני- הסצנה והמצלמה קורס-חינם-React-GraphQL-שיעור-ראשוןקורס חינם React & GraphQL – שיעור ראשון – אתחול צד לקוח קורס חינם React & GraphQL – שיעור שלישי – צד שרת Nodejs של המשחק איקס עיגול.קורס חינם React & GraphQL – שיעור שלישי – צד שרת Nodejs של המשחק איקס עיגול. קורס-חינם-React-&-GraphQL---שיעור-ראשון---משחק-איקס-עיגול-TIK-TAK-TOEקורס חינם React & GraphQL – שיעור שני – משחק איקס עיגול TIK-TAK-TOE
canvas threejs webgl קורס תכנות קורס תכנות בחינם תכנות משחקים

אודות המחבר

יאיר וינר להציג את כל הפוסטים של וינר יאיר


« פוסט קודם
פוסט הבא »

השארת תגובה

ביטול

חיפוש באתר
בחירת העורכים
29 בדצמבר 2023 עידן יצחקי

שדה טקסט עשיר עם תמונות

אתם הולכים להיות מופתעים עד כמה HTML יכול להיות חכם ולבצע משהו כל כך מורכב, שאם אנחנו היינו רוצים ליצור

1 באוקטובר 2021 עידן יצחקי

איך למשוך דינמית favicon של אתרים אחרים ב-JS

בפוסט זה נראה איך אפשר על פי לינקים בדף למשוך את ה-favicon מהדומיין שלהם באופן דינמי, בדיקה של תקינות התמונה

פופולרי
Javascript functions – היכרות עם סוגי פונקציות
Javascript
21 בדצמבר 2024 אין תגובות
Nested routing in angular standalone component
Typescript
15 בנובמבר 2024 תגובה אחת
בחרו לפי תגיות
angular blockchain css ethers express front-end fullstack GQL html javascript next js nextjs nodejs react hooks reactjs solidity webgl אנגולר בלוקציין וורדפרס לימודי אנגולר לימודי וורדפרס לימוד ריאקט מדריך front-end מדריך GQL מדריך אנגולר מדריך וורדפרס מדריך חינם react מדריך ריאקט מפתח בלוק מפתח בלוקציין מתכנת front-end מתכנת בלוקציין מתכנת פרונט סולידיטי קורס front end קורס fullstack קורס nextjs קורס אנגולר קורס בלוקציין קורס בלוקציין בחינם קורס סולידיטי קורס ריאקט קורס תכנות קורס תכנות בחינם
סינון על פי קטגוריות
CSS fullstack HTML IIS Javascript nodeJs SEO Typescript אנגולר בלוקציין בניית אתרים וורדפרס חיפוש עבודה כלים נוספים כללי נגישות קורסים ריאקט תלת מימד תקלות ופתרונות
צור קשר
כל הזכויות שמורות לקודקודייל
ליצירת קשר: @ קודקודייל
גלילה לראש העמוד