CS
VB, VB.NET
ASP.NET,ASP
C, C++
ColdFusion
PHP
Javascript
Delphi
Flash
Java
Graphisme
Irc
Assembleur
C#
Mobilité
SQL
Foxpro
Python
Regex
Flex
Windev
Ce site au démarrage
Derniers codes
Outils
Divers
Connexion
Visual Basic
ASP
C++
ColdFusion
PHP
Javascript
Delphi
Flash
Java
Graphisme
Irc
Assembleur
C#
Mobilité
SQL
Foxpro
Python
Regex
Flex
Statistiques ;-)
Crédits
>>
Sites CodeS-SourceS
Visual basic
C++
C#
Java
PHP
ASP
ASP.NET
ColdFusion
Delphi
Javascript
Flash
Flex / AIR
Graphisme
Assembleur
IRC
Mobilité
SQL
FoxPro
Python
CodeS-SourceS ToolBox
Convertisseur C#<->VB
Colorisation de Code
Table ASCII
Trouver un fichier de code source :
Version Française -
English Version
Accueil
>
C++
>
BASE/MOTEUR 3D EN QT/OPENGL (COMPLET ET FONCTIONNEL!) POUR UN TRÈS PROCHAIN JEU 3D
>
Envi3D/Coord3D.cpp
BASE/MOTEUR 3D EN QT/OPENGL (COMPLET ET FONCTIONNEL!) POUR UN TRÈS PROCHAIN JEU 3D
Envi3D/Coord3D.cpp
Informations sur ce code source
Code Source
BASE/MOTEUR 3D EN QT/OPENGL (COMPLET ET FONCTIONNEL!) POUR UN TRÈS PROCHAIN JEU 3D
Auteur
envi33
Fichier
Envi3D/Coord3D.cpp en
C / C++ / C++.NET
Publié le
25/07/2011
Mis à jour le
25/07/2011
Bonjour à tous, Voici un moteur 3D gérant les textures tous formats (supporté par QT) et contient un loader de fichier .obj que j'ai écrit personnellement. Il permet d'illustrer l'utilisation de deux QGLWidget en même temps et comment se servir de
Fichier :
Envi3D/Coord3D.cpp
Nombre de lignes :
192 lignes
Afficher ce fichier en plein écran
#include "
Coord3D.h
"
Coord3D::Coord3D()
{
X = 0;
Y = 0;
Z = 0;
}
Coord3D::Coord3D(
float
x,
float
y,
float
z)
{
X = x;
Y = y;
Z = z;
}
Coord3D::Coord3D(
const
Coord3D & v)
{
X = v.X;
Y = v.Y;
Z = v.Z;
}
Coord3D::Coord3D(
const
Coord3D & from,
const
Coord3D & to)
{
X = to.X - from.X;
Y = to.Y - from.Y;
Z = to.Z - from.Z;
}
Coord3D & Coord3D::
operator
= (
const
Coord3D & v)
{
X = v.X;
Y = v.Y;
Z = v.Z;
return
*
this
;
}
/*Coord3D & Coord3D::operator+= (const Coord3D & v) //avec pointeur sur
{
X += v.X;
Y += v.Y;
Z += v.Z;
return *this;
}*/
Coord3D & Coord3D::
operator
+= (
const
Coord3D & v)
{
X += v.X;
Y += v.Y;
Z += v.Z;
return
*
this
;
}
Coord3D Coord3D::
operator
+ (
const
Coord3D &v)
const
{
Coord3D t = *
this
;
t += v;
return
t;
}
Coord3D & Coord3D::
operator
+ (
const
float
a)
{
X += a;
Y += a;
Z += a;
return
*
this
;
}
/*Coord3D Coord3D::operator+ (const Coord3D *v)
{
Coord3D t = *this;
t.X += v->X;
t.Y += v->Y;
t.Z += v->Z;
return t;
}*/
Coord3D & Coord3D::
operator
-= (
const
Coord3D & v)
{
X -= v.X;
Y -= v.Y;
Z -= v.Z;
return
*
this
;
}
Coord3D Coord3D::
operator
- (
const
Coord3D & v)
const
{
Coord3D t = *
this
;
t -= v;
return
t;
}
Coord3D & Coord3D::
operator
- (
const
float
a)
{
X -= a;
Y -= a;
Z -= a;
return
*
this
;
}
Coord3D & Coord3D::
operator
*= (
const
float
a)
{
X *= a;
Y *= a;
Z *= a;
return
*
this
;
}
/*Coord3D & Coord3D::operator+= (const float a)
{
X += a;
Y += a;
Z += a;
return *this;
}*/
Coord3D Coord3D::
operator
* (
const
float
a)
const
{
Coord3D t = *
this
;
t *= a;
return
t;
}
Coord3D
operator
* (
const
float
a,
const
Coord3D & v)
{
return
Coord3D(v.X*a,v.Y*a,v.Z*a);
}
Coord3D & Coord3D::
operator
/= (
const
float
a)
{
X /= a;
Y /= a;
Z /= a;
return
*
this
;
}
Coord3D Coord3D::
operator
/ (
const
float
a)
const
{
Coord3D t = *
this
;
t /= a;
return
t;
}
Coord3D Coord3D::crossProduct(
const
Coord3D & vect)
const
//produit vectoriel
{
Coord3D t;
t.X = Y*vect.Z - Z*vect.Y;
t.Y = Z*vect.X - X*vect.Z;
t.Z = X*vect.Y - Y*vect.X;
return
t;
}
//calcul de la distance minimale entre un point et la droite, il faut l'utiliser comme cela : droite->distanceDroiteAuPoint(...)
float
Coord3D::distanceDroiteAuPoint(
const
Coord3D & pointDeLaDroite,
const
Coord3D & point)
const
//calcul la distance entre la droite (defini par un vecteur directeur et un pointDeLaDroite) et le point
{
float
distance;
float
tailleVect;
float
tailleVectDirecteur;
//le vect directeur etant 'this'
Coord3D vectDeuxPoints(pointDeLaDroite, point);
Coord3D prod;
prod =
this
->crossProduct(vectDeuxPoints);
prod = prod-prod*2;
//on inverse le produit vectoriel
tailleVect = prod.length();
tailleVectDirecteur =
this
->length();
distance = tailleVect/tailleVectDirecteur;
return
distance;
}
float
Coord3D::length()
const
{
return
sqrt( X*X + Y*Y + Z*Z);
}
Coord3D & Coord3D::normalize()
{
(*
this
) /= length();
return
(*
this
);
}