begin process at 2010 02 10 03:17:43
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > PROJECTION 3D

PROJECTION 3D


 Information sur la source

Note :
1 / 10 - par 1 personne
1,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Graphique Niveau :Initié Date de création :06/12/2003 Vu / téléchargé :3 500 / 451

Auteur : crazyjoke

Ecrire un message privé
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
3D
==

Voila, je suis très cablé 3D en ce moment et j'ai fais quelques petites recherches dont celle-ci que je vous propose, la source n'est en fait pas très importante, elle est juste içi pour illustrer la "formule" de ma création.
Voila, j'ai vu la source de TheWhiteShadow, et malgrés quelques minutes de réflexion je n'ai pas compris sa méthode de projection alors j'ai décidé de m'y mettre (ça veut dire papier rêgle crayon et CERVEAU) et puis avec un peu de Thalès j'ai pondu ceci :

scr01 = hauteur de la zone d'affichage /2
scr02 = largeur de la zone d'affichage / 2

FinalX = (Pt3D.X - scr01 * (256 / (256 + Pt3D.Z))) + scr01
FinalY = (Pt3D.Y - scr02 * (256 / (256 + Pt3D.Z))) + scr02

Explications
========

Le 256 tout d'abord : il revient souvent et en fait correspond à la distance de l'observateur à l'écran, on peut la modifier cela n'aura qu'une faible répercution sur le rendu final.

Le reste : regardez la capture, qui n'en n'est pas une... :-).
Bon, maintenant que vous l'avez bien vue j'explique :

Grâce à notre cher Thalès on peut dire que OE/OB = EE'/BB' car l'objet affiché est parallèle au "vrai".
On cherche EE'.
Après une magouille mathématiques (PAPIER ;-) on obtient EE' = BB' * (OE/OB).
ça commence à devenir intéressant ;-)...

APPLICATION à LA FORMULE : Dans la formule BB' est remplacée par les X de l'objet auxquels on soustrait 1/2 de la largeur de l'écran (si vous ne comprenez pas "reregardez" le dessin) OE est égale à 256 (C'est moi qui décide !!!!!) et OB est égal a OE + les Z de l'objet (logique :)...
A la fin de la formule on ajoute 1/2 de la largeur de l'écran au résultat et oui, on EE' mais ce n'est pas le bon X de l'objet, il faut lui ajouter cette valeur pour obtenir son X.

Pour les Y c'est la même chose sauf que ce n'est plus la largeur de l'écran divisée par deux mais sa hauteur, logique...



Bon voila, j'espère que vous avez compris, sinon envoyez moi un msg.
dsl pour les "fôtes".

-==CrAzY_JoKE... ==-

Source

  • //la source est peu intéressante mais vous pouvez toujours y jeter un coup d'oeil
//la source est peu intéressante mais vous pouvez toujours y jeter un coup d'oeil


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • Demo.cfgTélécharger ce fichier [Réservé aux membres club]Voir ce fichier386 octets
  • Demo.dofTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 048 octets
  • Demo.dprTélécharger ce fichier [Réservé aux membres club]Voir ce fichier188 octets
  • Demo.exeTélécharger ce fichier [Réservé aux membres club]375 296 octets
  • Demo.resTélécharger ce fichier [Réservé aux membres club]876 octets
  • Main.~dfmTélécharger ce fichier [Réservé aux membres club]522 octets
  • Main.~pasTélécharger ce fichier [Réservé aux membres club]3 191 octets
  • Main.dcuTélécharger ce fichier [Réservé aux membres club]5 206 octets
  • Main.dfmTélécharger ce fichier [Réservé aux membres club]522 octets
  • Main.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier3 181 octets

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture INTRO À LA 3D AVEC GLSCENE
DÉSACTIVER LE BOUTON FERMER / X DE VOS FORMS EN QUELQUES LIG...

 Sources de la même categorie

Source avec Zip Source avec une capture EFFET VITRE ET THUMBNAILS SOUS VISTA par Bacterius
Source avec Zip Source avec une capture ANAGLYPHEUR OU COMMENT VOIR EN RELIEF LES STÉRÉOSCOPES ANCES... par jfs59
Source avec Zip Source avec une capture DÉFORMER UNE IMAGE AUX DIMENSIONS D'UN QUADRANGLE QUELCONQUE... par FFCAST
Source avec Zip Source avec une capture THREAD ET BITMAP (DESSIN AU CRAYON) par barbichette
Source avec Zip Source avec une capture ÉCRAN DE VEILLE FEU D'ARTIFICE par barbichette

Commentaires et avis

Commentaire de koko le 07/12/2003 10:07:36

du beau travail !!!

Commentaire de Huugooo le 20/11/2007 11:53:07

Oui pas mal !
Petite amélioration pour eviter que ça devienne le bordel =)

unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;
type
  T3DPoint = record
    X : LongInt;
    Y : LongInt;
    Z : LongInt;
  end;
type
  TFrmMain = class(TForm)
    Img: TImage;
    procedure FormCreate(Sender: TObject);
  private
    { Déclarations privées }
    Points: array[1..8] of T3DPoint;
    procedure CreerPoint(const Index, x, y, z: Integer);
    procedure Bouge(const IndexPoint: Integer);
    procedure Ligne(const IndexCible: Integer; const IndexDepart: Integer = 0);
  public
    { Déclarations publiques }
    function Get2DCoords(Point : T3DPoint): TPoint;
  end;

var
  FrmMain: TFrmMain;

implementation

{$R *.dfm}

function TfrmMain.Get2DCoords(Point : T3DPoint): TPoint;
var Buffer: TPoint;
begin
  Buffer.X := Trunc(((Point.X - 344) * (256 / (256 + Point.Z))) + 344);
  Buffer.Y := Trunc(((Point.Y - 223) * (256 / (256 + Point.Z))) + 223);
  Get2DCoords := Buffer;
end;

procedure TFrmMain.FormCreate(Sender: TObject);
var Buffer : T3DPoint;
    L: Integer;
begin
  FillChar(Points, SizeOf(Points), 0);
  L:= 200;
  CreerPoint(1, 0, 0, 0);
  CreerPoint(2, L, 0, 0);
  CreerPoint(3, L, 0, L);
  CreerPoint(4, 0, 0, L);
  CreerPoint(5, 0, L, 0);
  CreerPoint(6, L, L, 0);
  CreerPoint(7, L, L, L);
  CreerPoint(8, 0, L, L);

  with Img.Canvas do
    begin
      Bouge(1);
      Ligne(2);
      Ligne(3);
      Ligne(4);
      Ligne(1);
      Ligne(5);
      Ligne(6);
      Ligne(7);
      Ligne(8);
      Ligne(5);
      Ligne(1, 5);
      Ligne(2, 6);
      Ligne(3, 7);
      Ligne(4, 8);
    end;
end;

procedure TFrmMain.CreerPoint(const Index, x, y, z: Integer);
begin
  Points[Index].X:= x;
  Points[Index].Y:= y;
  Points[Index].Z:= z;
end;

procedure TFrmMain.Bouge(const IndexPoint: Integer);
begin
  Img.Canvas.PenPos := Get2DCoords(Points[IndexPoint]);
end;

procedure TFrmMain.Ligne(const IndexCible: Integer; const IndexDepart: Integer = 0);
begin
  if IndexDepart > 0 then
    Bouge(IndexDepart);
  Img.Canvas.LineTo(Get2DCoords(Points[IndexCible]).X, Get2DCoords(Points[IndexCible]).Y);
end;

end.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales