home *** CD-ROM | disk | FTP | other *** search
- #define STRICT
-
- // Includes standard Windows
- #include <windows.h>
- #include <windowsx.h>
- #include <time.h>
- #include <stdlib.h>
- #include <malloc.h>
- #include <memory.h>
- #include <stdio.h>
- #include <math.h>
-
- // Includes D3D
- #define D3D_OVERLOADS
- #include <ddraw.h>
- #include <d3d.h>
- #include <d3dx.h>
-
- // Includes utilitaires D3D
- #include "d3dmath.h"
- #include "d3dutil.h"
- #include "D3DEnum.h"
-
- // Ids Resources
- #include "resource.h"
-
- // Constantes
- #include "const.h"
-
- // Types
- #include "types.h"
-
- // Variables globales projet
- #include "vars.h"
-
- // Prototypes fonctions autres modules
- #include "proto.h"
-
- // Macros
- #include "macros.h"
-
- void vAddSphere(D3DVECTOR vCenter, float r, int horiz, int vert, BOOL bHalf)
- {
- float hIncr = 2.f * g_PI / horiz;
- float vIncr = g_PI / vert;
-
- D3DVECTOR a, b, c;
-
- for(int i = 0; i < (bHalf ? vert / 2 : vert) ; i++)
- {
- float rTemp1, rTemp2; // rayon des deux cercles
-
- rTemp1 = (float) sin(i * vIncr) * r;
- rTemp2 = (float) sin((i + 1) * vIncr) * r;
-
- for(int j = 0; j < horiz; j++)
- {
- a.x = (float) cos( j * hIncr) * rTemp1 + vCenter.x;
- a.y = (float) cos( i * vIncr) * r + vCenter.y;
- a.z = (float) sin( j * hIncr) * rTemp1 + vCenter.z;
-
- b.x = (float) cos((j + 1) * hIncr) * rTemp1 + vCenter.x;
- b.y = (float) cos( i * vIncr) * r + vCenter.y;
- b.z = (float) sin((j + 1) * hIncr) * rTemp1 + vCenter.z;
-
- c.x = (float) cos( j * hIncr) * rTemp2 + vCenter.x;
- c.y = (float) cos((i + 1) * vIncr) * r + vCenter.y;
- c.z = (float) sin( j * hIncr) * rTemp2 + vCenter.z;
-
- iMakeTriangle(iMakeVertex(a, XDC_ALLOWSAME),
- iMakeVertex(b, XDC_ALLOWSAME),
- iMakeVertex(c, XDC_ALLOWSAME),
- 0);
-
- a.x = (float) cos((j + 1) * hIncr) * rTemp2 + vCenter.x;
- a.y = (float) cos((i + 1) * vIncr) * r + vCenter.y;
- a.z = (float) sin((j + 1) * hIncr) * rTemp2 + vCenter.z;
-
- iMakeTriangle(iMakeVertex(a, XDC_ALLOWSAME),
- iMakeVertex(b, XDC_ALLOWSAME),
- iMakeVertex(c, XDC_ALLOWSAME),
- 0);
- }
- }
- }
-
- void vAddBoing(D3DVECTOR vCenter, float r)
- {
- int horiz = 14, vert = 6;
- float hIncr = 2.f * g_PI / horiz;
- float vIncr = g_PI / vert;
-
- D3DVECTOR a, b, c;
-
- for(int i = 0; i < vert; i++)
- {
- float rTemp1, rTemp2; // rayon des deux cercles
-
- rTemp1 = (float) sin(i * vIncr) * r;
- rTemp2 = (float) sin((i + 1) * vIncr) * r;
-
- for(int j = 0; j < horiz; j++)
- {
- a.x = (float) cos( j * hIncr) * rTemp1 + vCenter.x;
- a.y = (float) cos( i * vIncr) * r + vCenter.y;
- a.z = (float) sin( j * hIncr) * rTemp1 + vCenter.z;
-
- b.x = (float) cos((j + 1) * hIncr) * rTemp1 + vCenter.x;
- b.y = (float) cos( i * vIncr) * r + vCenter.y;
- b.z = (float) sin((j + 1) * hIncr) * rTemp1 + vCenter.z;
-
- c.x = (float) cos( j * hIncr) * rTemp2 + vCenter.x;
- c.y = (float) cos((i + 1) * vIncr) * r + vCenter.y;
- c.z = (float) sin( j * hIncr) * rTemp2 + vCenter.z;
-
- if((i & 1)?(j & 1):!(j & 1))
- iMakeTriangle(iMakeVertex(a, XDC_ALLOWSAME),
- iMakeVertex(b, XDC_ALLOWSAME),
- iMakeVertex(c, XDC_ALLOWSAME),
- 2);
- else
- iMakeTriangle(iMakeVertex(a, XDC_ALLOWSAME),
- iMakeVertex(b, XDC_ALLOWSAME),
- iMakeVertex(c, XDC_ALLOWSAME),
- 0);
-
- a.x = (float) cos((j + 1) * hIncr) * rTemp2 + vCenter.x;
- a.y = (float) cos((i + 1) * vIncr) * r + vCenter.y;
- a.z = (float) sin((j + 1) * hIncr) * rTemp2 + vCenter.z;
-
- if((i & 1)?(j & 1):!(j & 1))
- iMakeTriangle(iMakeVertex(a, XDC_ALLOWSAME),
- iMakeVertex(b, XDC_ALLOWSAME),
- iMakeVertex(c, XDC_ALLOWSAME),
- 2);
- else
- iMakeTriangle(iMakeVertex(a, XDC_ALLOWSAME),
- iMakeVertex(b, XDC_ALLOWSAME),
- iMakeVertex(c, XDC_ALLOWSAME),
- 0);
- }
- }
- }
-
- #define AddTorusCalcX(i,j) ((float) (((r * cos((j) * 2*g_PI/m)) + R) * cos((i) * 2*g_PI/n) + vCenter.x))
- #define AddTorusCalcY(i,j) ((float) (r * sin((j) * 2*g_PI/m) + vCenter.y))
- #define AddTorusCalcZ(i,j) ((float) (((r * cos((j) * 2*g_PI/m)) + R) * sin((i) * 2*g_PI/n) + vCenter.z))
-
- void vAddTorus(D3DVECTOR vCenter, float R, float r, int n, int m)
- {
- D3DVECTOR a, b, c, d;
-
- for(int i = 0; i <= n; i++)
- for(int j = 0; j <= m; j++)
- {
- a.x=AddTorusCalcX( i , j ); a.y=AddTorusCalcY( i , j ); a.z=AddTorusCalcZ( i , j );
- b.x=AddTorusCalcX( i ,j+1); b.y=AddTorusCalcY( i ,j+1); b.z=AddTorusCalcZ( i ,j+1);
- c.x=AddTorusCalcX(i+1, j ); c.y=AddTorusCalcY(i+1, j ); c.z=AddTorusCalcZ(i+1, j );
- d.x=AddTorusCalcX(i+1,j+1); d.y=AddTorusCalcY(i+1,j+1); d.z=AddTorusCalcZ(i+1,j+1);
-
- if((i & 1)?(j & 1):!(j & 1))
- {
- iMakeTriangle(iMakeVertex(a, XDC_ALLOWSAME),
- iMakeVertex(b, XDC_ALLOWSAME),
- iMakeVertex(c, XDC_ALLOWSAME),
- 2);
- iMakeTriangle(iMakeVertex(c, XDC_ALLOWSAME),
- iMakeVertex(b, XDC_ALLOWSAME),
- iMakeVertex(d, XDC_ALLOWSAME),
- 2);
- }
- else
- {
- iMakeTriangle(iMakeVertex(a, XDC_ALLOWSAME),
- iMakeVertex(b, XDC_ALLOWSAME),
- iMakeVertex(c, XDC_ALLOWSAME),
- 0);
- iMakeTriangle(iMakeVertex(c, XDC_ALLOWSAME),
- iMakeVertex(b, XDC_ALLOWSAME),
- iMakeVertex(d, XDC_ALLOWSAME),
- 0);
- }
- }
- }
-
- void vAddDisk(D3DVECTOR vCenter, float r, int iSubdiv)
- {
- float fIncr = 2.f * g_PI / iSubdiv;
-
- D3DVECTOR a, b;
-
- for(int j = 0; j < iSubdiv; j++)
- {
- a.x = (float) sin( j * fIncr) * r + vCenter.x;
- a.y = (float) cos( j * fIncr) * r + vCenter.y;
- b.x = (float) sin((j + 1) * fIncr) * r + vCenter.x;
- b.y = (float) cos((j + 1) * fIncr) * r + vCenter.y;
- a.z = b.z = vCenter.z;
- iMakeTriangle(iMakeVertex(vCenter, XDC_ALLOWSAME),
- iMakeVertex(a, XDC_ALLOWSAME),
- iMakeVertex(b, XDC_ALLOWSAME),
- (j & 1) ? 0 : 2);
- }
- }
-
- void vAddCircle(D3DVECTOR vCenter, float r, int iSubdiv)
- {
- float fIncr = 2.f * g_PI / iSubdiv;
-
- D3DVECTOR a, b;
-
- for(int j = 0; j < iSubdiv; j++)
- {
- a.x = (float) sin( j * fIncr) * r + vCenter.x;
- a.y = (float) cos( j * fIncr) * r + vCenter.y;
- b.x = (float) sin((j + 1) * fIncr) * r + vCenter.x;
- b.y = (float) cos((j + 1) * fIncr) * r + vCenter.y;
- a.z = b.z = vCenter.z;
-
- iMakeEdge(iMakeVertex(a, XDC_ALLOWSAME), iMakeVertex(b, XDC_ALLOWSAME));
- }
- }
-
-