Vidéo Inktober reportée, prototype de moteur BUILD-like et TMTC dans Les carencés

La semaine du 29 janvier au 4 février 2018 était totalement plongée dans le développement de mon prototype de moteur de rendu 2,5D façon BUILD-like. Oui ce n’est pas tout à fait de la 3D au sens strict. Bon ce compte-rendu est en retard et du coup je compte le dimanche x)

J’ai à peine avancé sur le dessin animée de la future vidéo sur le Inktober 2017. Justement, j’ai décidé que je prendrais tout mon temps pour terminer cette vidéo et la publier sur ma chaîne. Je suis bien trop motivée par d’autres choses par rapport à la partie dessin-animée de ce projet. Comme le prochain Inktober est en octobre, je pourrai même sortir la vidéo de celui de l’année dernière dans un mois ou deux, que ça laisserait beaucoup de temps avant la prochaine. Et puis la partie dessin animée sera prête à être recyclée et le projet du montage aussi. Je ne rencontrerai donc plus le même soucis pour produire la vidéo rapidement 🙂 Je pense que si pour toutes les nouveaux contenus que je lance sur ma chaîne ou d’autres supports, je me laisse le temps, après les choses se passeraient bien mieux. C’est ma nouvelle résolution de l’année et contrairement à l’année dernière, j’ai pu faire janvier entier sans devoir arrêter de faire quelque chose pour me recharger au lit 😀

Avant d’enchaîner sur ce prototype de moteur de jeu 2,5D old school, je vous annonce la publication en début de semaine d’un épisode du podcast Les carencés dans lequel vous pourrez entre autres écouter mon TMTC : Les carencés #16 : Les p’tits éleveurs dans la prairie. Entre temps, un autre épisode s’est enchaîné. Je n’y ai aucune contribution personnelle, mais je vous le dis parce que ce podcast est très cool et donc j’en fais sa pub au passage :p Je suis donc Timidouveg dans le podcast. Je précise, au cas où je change de pseudonyme à l’avenir, comme je l’envisageais dans mon vlog 4.

Comme je vous le disais, je suis le nez dans le développement de mon prototype et je ne pense quasiment qu’à ça. Bon, pas qu’à ça, mais aussi de la dernière chose dont je vous parlerai à la fin de ce compte-rendu. J’ai hâte 🙂 Bref, j’ai passé plusieurs jours à réfléchir, et tester une idée d’algorithme pour faire le rendu des murs et surtout en respectant l’ordre d’affichage pour que les murs derrières d’autres murs restent à l’arrière. J’avais en effet un soucis qu’on rencontre toujours quand on essaye de rendre un monde 3D en 2D sur l’écran. L’ordinateur ne pouvait pas deviner quels murs sont proches de la caméra et lesquelles sont plus éloignées. J’ai trouvé une méthode pour le faire. Ça fonctionne et il reste un petit bug qui devrait être rapide à comprendre et corriger. Voici donc une petite vidéo qui montre le rendu pixel par pixel.

N’hésitez pas à regarder dans la description de la vidéo pour trouver l’auteur de la musique que j’ai utilisée ou même cliquer ici pour passer sur son site : https://jaunter.bandcamp.com. J’adore ce style de musique (le chiptune). L’auteur vend à prix libre des albums, et cette musique vient d’ailleurs de l’un d’entre eux 🙂
Je ne suis pas toujours à fait satisfaite de mon algorithme. Je crains qu’il ne permette pas facilement de faire des « portals ». Des portals ? Comme le jeu Portal ? Oui, mais dans un moteur pas tout à fait 3D :p En tout cas, c’est effectivement la même technique utilisée dans les jeux Duke nukem 3D, Blood, Shadow Warrior, bref le moteur BUILD de Ken Silverman. C’est ce qui permet de faire des géométries non-euclidiennes. Si vous voulez d’ailleurs vous éclater à faire plein d’expériences d’espaces non-euclidiens, vous pouvez jouer un peu avec l’éditeur de niveau de Duke nukem 3D, ou en plus moderne et plus poussé, Portal 2 :p

En tout cas, plus je code et réfléchis à mon algorithme qui n’est pas tout à fait, et même, presque pas du tout comme celui de BUILD, et plus je comprends l’algorithme de ce dernier. Finalement, je vais soit mixé ma méthode avec celle de Ken Silverman, soit réécrire un algorithme plus proche du sien directement, maintenant que je le comprends beaucoup mieux 🙂 Une chose est sûre, je garderai mon code, et vous en parlerai dans des articles/tutoriels dédiés à ce genre de moteur et peut-être en reparlerai un peu dans des articles sur le rendu logiciel 🙂 Pour vous mettre l’eau à la bouche, je vous annonce que je parlerai forcément des algorithmes de tri, de portals, de projection 3D vers 2D, de plaquage de textures, etc… Ce sera sûrement séparé pour réutiliser chaque techniques dans tout vos projets quel qu’il soit 😉

Bon le dernier truc à vous dire, et bien, dans une semaine, je pars en vacances chez une amie en Alsace, pour deux semaines. J’ai hâte… Ah oui je l’ai déjà dis que j’avais hâte :p

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

recaptcha/recaptchalib.php at 1.0.0 · google/recaptcha · GitHub
Skip to content
Permalink
Switch branches/tags
Find file
8a45f9d Dec 1, 2014
141 lines (129 sloc) 4.47 KB
<?php
/**
* This is a PHP library that handles calling reCAPTCHA.
* - Documentation and latest version
* https://developers.google.com/recaptcha/docs/php
* - Get a reCAPTCHA API Key
* https://www.google.com/recaptcha/admin/create
* - Discussion group
* http://groups.google.com/group/recaptcha
*
* @copyright Copyright (c) 2014, Google Inc.
* @link http://www.google.com/recaptcha
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
/**
* A ReCaptchaResponse is returned from checkAnswer().
*/
class ReCaptchaResponse
{
public $success;
public $errorCodes;
}
class ReCaptcha
{
private static $_signupUrl = "https://www.google.com/recaptcha/admin";
private static $_siteVerifyUrl =
"https://www.google.com/recaptcha/api/siteverify?";
private $_secret;
private static $_version = "php_1.0";
/**
* Constructor.
*
* @param string $secret shared secret between site and ReCAPTCHA server.
*/
function ReCaptcha($secret)
{
if ($secret == null || $secret == "") {
die("To use reCAPTCHA you must get an API key from <a href='"
. self::$_signupUrl . "'>" . self::$_signupUrl . "</a>");
}
$this->_secret=$secret;
}
/**
* Encodes the given data into a query string format.
*
* @param array $data array of string elements to be encoded.
*
* @return string - encoded request.
*/
private function _encodeQS($data)
{
$req = "";
foreach ($data as $key => $value) {
$req .= $key . '=' . urlencode(stripslashes($value)) . '&';
}
// Cut the last '&'
$req=substr($req, 0, strlen($req)-1);
return $req;
}
/**
* Submits an HTTP GET to a reCAPTCHA server.
*
* @param string $path url path to recaptcha server.
* @param array $data array of parameters to be sent.
*
* @return array response
*/
private function _submitHTTPGet($path, $data)
{
$req = $this->_encodeQS($data);
$response = file_get_contents($path . $req);
return $response;
}
/**
* Calls the reCAPTCHA siteverify API to verify whether the user passes
* CAPTCHA test.
*
* @param string $remoteIp IP address of end user.
* @param string $response response string from recaptcha verification.
*
* @return ReCaptchaResponse
*/
public function verifyResponse($remoteIp, $response)
{
// Discard empty solution submissions
if ($response == null || strlen($response) == 0) {
$recaptchaResponse = new ReCaptchaResponse();
$recaptchaResponse->success = false;
$recaptchaResponse->errorCodes = 'missing-input';
return $recaptchaResponse;
}
$getResponse = $this->_submitHttpGet(
self::$_siteVerifyUrl,
array (
'secret' => $this->_secret,
'remoteip' => $remoteIp,
'v' => self::$_version,
'response' => $response
)
);
$answers = json_decode($getResponse, true);
$recaptchaResponse = new ReCaptchaResponse();
if (trim($answers ['success']) == true) {
$recaptchaResponse->success = true;
} else {
$recaptchaResponse->success = false;
$recaptchaResponse->errorCodes = $answers [error-codes];
}
return $recaptchaResponse;
}
}
?>
You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

Fatal error: Class 'ReCaptcha' not found in /homepages/39/d436294224/htdocs/clickandbuilds/TheeDonistMonk/index.php on line 29