Pause du montage vidéo et prototype de Ken Silverman’s Build-like

Finalement, je n’ai pas encore fini le montage de ma vidéo sur le Inktober de l’année dernière. Je pense finir ça dans deux semaines. Je reprendrai lundi plus exclusivement dessus. Pour le moment, une gastro a eu la mauvaise idée de venir dans mon organisme. Depuis ce matin donc, l’intrus est en train de passer un très mauvais moment face à mon système immunitaire de kryptonienne x)

La semaine du 22 au 27 janvier 2018, j’ai assez vite mis en pause le montage vidéo après avoir avancé un petit peu dessus. Je voulais finir le dessin de mon dernier tipeur de l’année précédente, et aussi j’avais un besoin vital de coder mon Old-school 3D Renderer inspiré de Build de Ken Silverman 🙂

J’en ai fais des choses dessus, même si il y a encore des éléments fondamentaux à programmer pour terminer le minimum syndical du rendu de ce prototype. J’ai fais un thread sur Twitter que j’ai alimenté à chaque nouveauté. Je vous ai remis les captures d’écran ici et résume ce que j’ai fais. J’ai réalisé le rendu 3D des murs, fais un Z-order pour les dessiner du plus près au plus lointain. Ce dernier est insuffisant et doit entrer dans un système de Z buffer simplifié qui s’inspire un peu d’un raycasting optimisé. Disons que ce pseudo-raycasting, scanne les murs dans le même ordre que le rendu, c’est à dire dans l’axe des X relatif à la caméra. Quand je dis scanner, je ne parle pas de pixels ou de cases d’une gille comme dans un raycasting classique. Je parle d’aller sur la partie gauche des murs et faire le reste par des calculs de segments tout simples. En gros, les murs sont ramenés au repère de la caméra, puis ordonnés sur le long de l’axe X (l’horizontale de ce qu’on voit, de gauche à droite), et scanné un à un en cherchant les intersections de murs dans le champ de vision et en comparant la distance des murs qui se concurrencent pour choisir le plus proche en premier. Tout est donc codé, à l’exception de ce balayage avec comparaison. J’ai choisi de simplifier le nombre de murs en me focalisant bien entendu sur ceux visibles à l’écran. J’ai donc codé un frustum culling, et je coderai tout à l’heure un backface culling (élimination des murs qui ne font pas face à la caméra). Oui, je m’éclate 🙂

J’ai très peu joué à Factorio moddé, donc pas avancé sur le tournage de ma future série sur la construction d’un megabase. Je reprendrai ça dés lundi, en essayant de caser le montage vidéo, le développement du Build-like et des parties d’une ou deux heures, et le script d’un No-Comment que j’ai envie de faire avant celui prévu depuis l’année dernière. Pfiou…

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