summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2003-09-22 07:44:48 +0000
committerDimitri Sokolyuk <demon@dim13.org>2003-09-22 07:44:48 +0000
commit0ce1636e8e6c0a7a9a6cc8343fbbdc6fe51224d9 (patch)
tree4c3561ff30c7476700dd18c1fff098a632c864d9
parent8ab70c739e68071304b13a629ac083b369eebdeb (diff)
2000-Feb-13 v1
-rw-r--r--stern.cpp105
1 files changed, 80 insertions, 25 deletions
diff --git a/stern.cpp b/stern.cpp
index f991ff9..a2ea075 100644
--- a/stern.cpp
+++ b/stern.cpp
@@ -1,19 +1,48 @@
/* $Id$ */
+// STERN.BAS 29.04.1996
// STERN.CPP 11.02.2000
+
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include <process.h>
#include <math.h>
+void Calc3D(void);
+void DrawObject(void);
void InitProgram(void);
void MainLoop(void);
-void Calc3D(void);
void Rotation(void);
-void DrawObject(void);
+int key(void);
#define COPYRIGHT "Dark Alliance (c) 1996-2000 DreamDemon"
-#define Lines 72
+#define PI 3.1415926
+#define Lines 36
+
+static int World[Lines][3] = {
+ -60, 40, 20, -20, 40, 20,
+ -20, 40, 20, -20, 0, 20,
+ -20, 0, 20, 60, 0, 20,
+ 60, 0, 20, 60,-40, 20,
+ 60,-40, 20, -60,-40, 20,
+ -60,-40, 20, -60, 40, 20,
+
+ -60, 40,-20, -20, 40,-20,
+ -20, 40,-20, -20, 0,-20,
+ -20, 0,-20, 60, 0,-20,
+ 60, 0,-20, 60,-40,-20,
+ 60,-40,-20, -60,-40,-20,
+ -60,-40,-20, -60, 40,-20,
+
+ -60, 40, 20, -60, 40,-20,
+ -20, 40, 20, -20, 40,-20,
+ -20, 0, 20, -20, 0,-20,
+ 60, 0, 20, 60, 0,-20,
+ 60,-40, 20, 60,-40,-20,
+ -60,-40, 20, -60,-40,-20};
+
+
+/* Lines 72
static int World[Lines][3] = {
90, 0, 0, 10, 10, 10, 90, 0, 0, 10, 10,-10,
90, 0, 0, 10,-10,-10, 90, 0, 0, 10,-10, 10,
@@ -33,9 +62,9 @@ static int World[Lines][3] = {
10, 10,-10, 10,-10,-10, -10, 10,-10, -10,-10,-10,
10, 10, 10, 10, 10,-10, 10,-10, 10, 10,-10,-10,
-10,-10, 10, -10,-10,-10, -10, 10, 10, -10, 10,-10};
-
-float X, Y, Z, sX, sY, Xa, Ya, Za, sXs, sYs, D, Page;
-float R1, R2, R3, Sr1, Sr2, Sr3, Cr1, Cr2, Cr3, mX, mY, mZ;
+*/
+float X, Y, Z, sX, sY, Xa, Ya, Za, sXs, sYs, D, Page, Xmid, Ymid;
+float R, R1, R2, R3, Sr1, Sr2, Sr3, Cr1, Cr2, Cr3, mX, mY, mZ;
void main(void)
{
@@ -43,23 +72,23 @@ void main(void)
MainLoop();
closegraph();
printf("%s\n",COPYRIGHT);
- getch();
+// getch();
}
void Calc3D(void)
{
- X = -1 * X;
- Xa = Cr1 * X - Sr1 * Z;
- Za = Sr1 * X + Cr1 * Z;
+ X = -1 * X;
+ Xa = Cr1 * X - Sr1 * Z;
+ Za = Sr1 * X + Cr1 * Z;
X = Cr2 * Xa + Sr2 * Y;
- Ya = Cr2 * Y - Sr2 * Xa;
+ Ya = Cr2 * Y - Sr2 * Xa;
Z = Cr3 * Za - Sr3 * Ya;
Y = Sr3 * Za + Cr3 * Ya;
X = X + mX;
Y = Y + mY;
Z = Z + mZ;
- sX = 320 + D * X / Z;
- sY = 175 + D * Y / Z;
+ sX = Xmid + D * X / Z;
+ sY = Ymid + D * Y / Z;
}
void DrawObject(void)
@@ -67,17 +96,21 @@ void DrawObject(void)
int i;
Rotation();
- for(i=0; i<Lines; i+=2) {
+ for(i=0; i<Lines; i+=2)
+ {
X = World[i][0];
Y = World[i][1];
Z = World[i][2];
Calc3D();
sXs = sX;
sYs = sY;
+
X = World[i+1][0];
Y = World[i+1][1];
Z = World[i+1][2];
Calc3D();
+
+// line(abs(sXs), abs(sYs), abs(sX), abs(sY));
line(sXs, sYs, sX, sY);
}
}
@@ -87,12 +120,14 @@ void InitProgram(void)
int gdriver = EGA, gmode = EGAHI, errorcode;
initgraph(&gdriver, &gmode, "");
errorcode = graphresult();
- if (errorcode != grOk) {
- printf("Graphics error: %s\n", grapherrormsg(errorcode));
- printf("Press any key to halt:");
- getch();
+ if (errorcode != grOk)
+ {
+ printf("%s\n", grapherrormsg(errorcode));
exit(1);
}
+ Xmid = getmaxx() / 2;
+ Ymid = getmaxy() / 2;
+
D = 1200; // View point and rotation values
mZ = -850;
mX = -5;
@@ -103,16 +138,25 @@ void InitProgram(void)
void MainLoop(void)
{
- while(!kbhit()) {
- R1 = R1 + 0.1;
- if(R1 > 6.28) R1 = 0;
- R2 = R1;
- R3 = R1;
+ int k;
+ while((k=key()) != 27)
+ {
+ R += 0.1;
+ if(R > (2 * PI)) R = 0;
+// R -= 0.1;
+// if(R < 0) R = 2 * PI;
+ R1 = R;
+ R2 = R;
+ R3 = R;
+
+
+// WAIT 986, 8
clearviewport();
DrawObject();
- (Page == 0)? Page = 1: Page = 0;
- setactivepage(1-Page);
+ outtextxy(10,330,COPYRIGHT);
setvisualpage(Page);
+ Page = 1 - Page;
+ setactivepage(Page);
}
}
@@ -125,3 +169,14 @@ void Rotation(void)
Cr2 = cos(R2);
Cr3 = cos(R3);
}
+
+extern int key(void)
+{
+ int k=0;
+ if(kbhit()) {
+ k = getch();
+ if (k == 0)
+ k = key();
+ }
+ return k;
+}