# Thread: 3D Math: how calculate the 3D?

1. ## 3D Math: how calculate the 3D?

for i 'convert 3D to 2D' we must create a perspective function:

Code:
```// calculate the perspective:
perspect=FocalDistance/(FocalDistance+Pos3D.Z)

// getting the the 2D position using the perspective:
PosX2D = Pos3D.X * perspect + Center.x
PosY2D = Pos3D.Y * perspect + Center.y

//the positions are float types
// now we must convert them using the trunc() function```
now i add 4 points on an array:
Code:
`Position3D Plane={ {0, 0,0}, {10, 0,100}, {100, 100,100},{0, 100,0}}`
when i press Up or DOWN we move to front or to back, like changing the Z value.
but when i press the key: the plane is like zoomed instead just move.
can anyone explain to me what i'm doing wrong.. sometimes i don't get it

2. ## Re: 3D Math: how calculate the 3D?

I am going to introduce you to Andre LaMothe's technique on creating perspective, from a VB6 point of view to make it easier on ya:

Assuming you have a 3d model loaded from file, such as an OBJ file which can easily be created using Autodesk 3DS Max, and assuming you have some sort of class to store this object broken down into faces (or polygons) that store vertices, transformed vertices, texture coords, and normals, you will first have your vertices stored into transformed vertices to avoid manipulation of its original vertex list by multiplying each transformed vertex by any translation matrices, rotation matrices, or scalar matrices:

vb6 Code:
```Private Sub transform_poly(ByRef obj As object3d_type, ByVal translate_mat As Matrix, ByVal rotate_mat As Matrix, ByVal scale_mat As Matrix, ByVal index As Long)
If Not obj.face_list(index) Is Nothing Then
Set obj.face_list(index).v0 = translate_mat.multiplyVertex(obj.vertex_list(obj.face_list_num(index).v0))
Set obj.face_list(index).v1 = translate_mat.multiplyVertex(obj.vertex_list(obj.face_list_num(index).v1))
Set obj.face_list(index).v2 = translate_mat.multiplyVertex(obj.vertex_list(obj.face_list_num(index).v2))

Set obj.face_list(index).v0 = rotate_mat.multiplyVertex(obj.face_list(index).v0)
Set obj.face_list(index).v1 = rotate_mat.multiplyVertex(obj.face_list(index).v1)
Set obj.face_list(index).v2 = rotate_mat.multiplyVertex(obj.face_list(index).v2)

Set obj.face_list(index).v0 = scale_mat.multiplyVertex(obj.face_list(index).v0)
Set obj.face_list(index).v1 = scale_mat.multiplyVertex(obj.face_list(index).v1)
Set obj.face_list(index).v2 = scale_mat.multiplyVertex(obj.face_list(index).v2)
End If
End Sub```

Next, you will add the objects world coordinates to the faces vertices:

vb6 Code:
```Private Sub model_to_world_poly(ByRef obj As object3d_type, ByVal index As Long)
If Not obj.face_list(index) Is Nothing And obj.face_list(index).clipped = False And obj.face_list(index).backface = False Then
End If
End Sub```

Assuming you have a camera class or matrix of some sort, you then would need to convert the vertices that got moved with the objects world coordinates to camera coordinates by simply multiplying the camera matrix to those vertices:

vb6 Code:
```Private Sub world_to_cam_poly(ByRef obj As object3d_type, ByVal index As Long)
If Not obj.face_list(index) Is Nothing And obj.face_list(index).clipped = False And obj.face_list(index).backface = False Then
Set obj.face_list(index).v0 = mat_cam.multiplyVertex(obj.face_list(index).v0)
Set obj.face_list(index).v1 = mat_cam.multiplyVertex(obj.face_list(index).v1)
Set obj.face_list(index).v2 = mat_cam.multiplyVertex(obj.face_list(index).v2)
End If
End Sub```

Now your camera will have a few properties. It will contain a viewplane width, viewplane height, viewport width (the screen basically at that resolution), viewport height, fov (field of view), near Z, far Z, aspect ratio, and a viewing distance.

Viewplane width and height I generally have at 2 and 2.
FOV I have at 90 degrees, or just 90.
Viewport width and heights will just be your resolution or window width and height if in windowed mode
near Z will be the closest Z possible to the viewer, but must be positive and must not be 0. Usually I have this at 10.
far Z will be the furthest Z possible from the viewer, must be positive, and must be greater than near Z. Usually I have this at 10000.
Aspect ratio can be your screen width / screen height or window width / window height
And the viewing distance formula will play out with this simple formula which can be done during initialization

Code:
```With cam
.viewing_distance = 0.5 * .viewplane_width * Tan((.fov / 2) * PI_OVER_180)
End With```
Now, with that said, camera coords of your vertices will now need converted to perspective coords. This is when X = X/Z and Y = Y/Z will play out:

vb6 Code:
```Private Sub cam_to_perspective_poly(ByRef obj As object3d_type, ByVal index As Long)
If Not obj.face_list(index) Is Nothing And obj.face_list(index).clipped = False And obj.face_list(index).backface = False Then
If obj.face_list(index).v0.z >= cam.near_z And obj.face_list(index).v0.z <= cam.far_z Then
obj.face_list(index).v0.x = cam.stretch_width * cam.viewing_distance * obj.face_list(index).v0.x / obj.face_list(index).v0.z
obj.face_list(index).v0.y = cam.stretch_height * cam.viewing_distance * obj.face_list(index).v0.y * cam.aspect_ratio / obj.face_list(index).v0.z
Else
obj.face_list(index).clipped = True
End If

If obj.face_list(index).v1.z >= cam.near_z And obj.face_list(index).v1.z <= cam.far_z Then
obj.face_list(index).v1.x = cam.stretch_width * cam.viewing_distance * obj.face_list(index).v1.x / obj.face_list(index).v1.z
obj.face_list(index).v1.y = cam.stretch_height * cam.viewing_distance * obj.face_list(index).v1.y * cam.aspect_ratio / obj.face_list(index).v1.z
Else
obj.face_list(index).clipped = True
End If

If obj.face_list(index).v2.z >= cam.near_z And obj.face_list(index).v2.z <= cam.far_z Then
obj.face_list(index).v2.x = cam.stretch_width * cam.viewing_distance * obj.face_list(index).v2.x / obj.face_list(index).v2.z
obj.face_list(index).v2.y = cam.stretch_height * cam.viewing_distance * obj.face_list(index).v2.y * cam.aspect_ratio / obj.face_list(index).v2.z
Else
obj.face_list(index).clipped = True
End If
End If
End Sub```

The stretch width and height is completely optional, and comes in handy when you stretch the window to keep its aspect ratio in tact. Otherwise this can be ommited.

Finally, you must convert perspective to screen. This is when your center plays a roll:

vb6 Code:
```Private Sub perspective_to_screen_poly(ByRef obj As object3d_type, ByVal index As Long)
Dim alpha As Double
Dim beta As Double
alpha = (0.5 * SCREEN_WIDTH - 0.5)
beta = (0.5 * SCREEN_HEIGHT - 0.5)
If Not obj.face_list(index) Is Nothing And obj.face_list(index).clipped = False And obj.face_list(index).backface = False Then
obj.face_list(index).v0.x = alpha + alpha * obj.face_list(index).v0.x
obj.face_list(index).v0.y = beta - beta * obj.face_list(index).v0.y

obj.face_list(index).v1.x = alpha + alpha * obj.face_list(index).v1.x
obj.face_list(index).v1.y = beta - beta * obj.face_list(index).v1.y

obj.face_list(index).v2.x = alpha + alpha * obj.face_list(index).v2.x
obj.face_list(index).v2.y = beta - beta * obj.face_list(index).v2.y
End If
End Sub```

You now have the proper values necessary to render the object. I generally, in VB6 was tapping into the pointer of the video buffer of the video card, and simply manipulated the array with color values. It was quite literally the fastest way to render pixels as I was able to do this:

Although I was aiming to do ray tracing, which will happen in due time, but I had to change languages as I found out the hardway that VB6 classes were entirely too slow even in 2022, so I had to switch languages to C++ to try and implement the same thing, although no where near done yet.

[EDIT] As for your controls, simply manipulating the translation values of your camera matrix should move you around within the 3D world just fine. The above technique I shared gives you proper rendering of the 3D objects like in the screenshot.

3. ## Re: 3D Math: how calculate the 3D?

my problem was that i used the 0,0,0 when then 0,0,0 is the center of screen and not the top left corner
now i'm trying avoid drawing the Z negative position
isn't easy, but i can do it

4. ## Re: 3D Math: how calculate the 3D?

It's easy. Simply have an if statement checking if the z value is in between your near Z and far Z before rendering that pixel. Generally clipping can be implemented here. However, if all 3 vertices of the polygon are outside the near z, far z, and view planes, you can remove it from the render list entirely as there is no point on rendering a polygon you cannot see.

5. ## Re: 3D Math: how calculate the 3D?

Was hard, honestly, but now is almost done
Now i must create a polygon position for don't lose the original positions. My class need more work, but it's great.
Thank you so much for all

6. ## Re: 3D Math: how calculate the 3D?

Thats why you need a transformed vertex list. And youre welcome

7. ## Re: 3D Math: how calculate the 3D?

hehehe fixed
i must update my class position... but, for now, i can draw a polygon without problems
for draw a texture, i can use the the PlgBlt() API function
1 - the polygon have several points;
2 - using that we draw a polygon;
3 - now i need understand: how can i draw the polygon without draw lines(yes the polygon is an line array) above lines?

9. ## Re: 3D Math: how calculate the 3D?

heres my code updated... with position and Object3D class's:
Code:
```#include <windows.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <math.h>
#include <array>
#include <stdlib.h>

using namespace std;

HDC HDCConsole = GetWindowDC(GetConsoleWindow());

class position
{
public:
float X;
float Y;
float Z;
float perespective;
float foco=300;
position(float posx=0, float posy=0, float posz=0,float FocalDistance=300)
{
X = posx;
Y = posy;
Z = posz;
foco = FocalDistance;
}

POINT Perspective(int FocalDistance=300, POINT Center={0,0})
{
foco=FocalDistance;
if(Z==0) Z=1;
if(foco<1) foco=1;
perespective=foco/(foco+Z);

float PosX2D = X * perespective + Center.x;
float PosY2D = Y * perespective + Center.y;
POINT Pos2D;
Pos2D.x=trunc(PosX2D);
Pos2D.y=trunc(PosY2D);
return Pos2D;
}
};

vector<position> GetLinePoints(position Origin, position Destination)
{
RECT    rcCli;
GetClientRect(GetConsoleWindow(), &rcCli);

vector<position> LinePoints;
position LinePoint;
int dx = abs(Destination.X-Origin.X), sx = Origin.X<Destination.X ? 1 : -1;
int dy = abs(Destination.Y-Origin.Y), sy = Origin.Y<Destination.Y ? 1 : -1;
int dz = abs(Destination.Z-Origin.Z), sz = Origin.Z<Destination.Z ? 1 : -1;
int dm =std::max( { dx, dy, dz } ), i = dm; /* maximum difference */
Destination.X = Destination.Y = Destination.Z = dm/2; /* error offset */

do
{
Destination.X -= dx; if (Destination.X < 0) { Destination.X += dm; Origin.X += sx; }
Destination.Y -= dy; if (Destination.Y < 0) { Destination.Y += dm; Origin.Y += sy; }
Destination.Z -= dz; if (Destination.Z < 0) { Destination.Z += dm; Origin.Z += sz; }
LinePoint.X=Origin.X;
LinePoint.Y=Origin.Y;
LinePoint.Z=Origin.Z;
if (LinePoint.Z>0)
{
LinePoints.push_back(LinePoint);
}
i--;
}while(i >=0);
return LinePoints;
}

class Object3D
{
public:
vector<position> pos;
//image texture;
Object3D(vector<position> ps)
{
pos=ps;
}

void Move(position posit)
{
for(unsigned int index=0; index<pos.size(); index++)
{
pos[index].X+=posit.X;
pos[index].Y+=posit.Y;
pos[index].Z+=posit.Z;
}
}

void draw(HDC HDCDestination)
{
RECT WindowSize;
GetClientRect(GetConsoleWindow(), & WindowSize);
WindowSize.bottom += 30;

//draw Polygon:
bool PolygonVisible=true;
vector<position> DrawPolygon = pos;
POINT PosPolygon[pos.size()];
for(unsigned int index=0; index<pos.size(); index++)
{

vector<position> pos;
if(DrawPolygon[index].Z<0 )
{
if(index<DrawPolygon.size()-1)
{
pos=GetLinePoints(DrawPolygon[index],DrawPolygon[index+1]);
if(pos.size()>0)
DrawPolygon[index]=pos[0];

}
else
{
pos=GetLinePoints(DrawPolygon[index-1],DrawPolygon[index]);
if(pos.size()>0)
DrawPolygon[index]=pos[pos.size()-1];
}
if(DrawPolygon[index].Z<0  && PolygonVisible==true)
PolygonVisible=false;

}
if (PolygonVisible==true && DrawPolygon.size()>0 )
PosPolygon[index]=DrawPolygon[index].Perspective(300,{WindowSize.right/2, WindowSize.bottom/2});
}
if (PolygonVisible==true && DrawPolygon.size()>0 )
Polygon(HDCDestination, PosPolygon,DrawPolygon.size());

}
};

bool KeyPressed(int Key)
{
return   (GetAsyncKeyState(Key) < 0);
}

int main()
{
RECT WindowSize;
GetClientRect(GetConsoleWindow(), & WindowSize);
WindowSize.bottom += 30;
HPEN hPen1 = CreatePen(PS_SOLID, 1, RGB(0, 255, 0));
HBRUSH hPlane = CreateSolidBrush(RGB(0,255,0));

Object3D Plane({{-470, 255,0},  {-470, 255,1000}, {470, 255,1000},{470, 255,0}});
Object3D Wall({{-470, -200,0}, {-470, -200,1000}, {-470, 255,1000}, {-470, 255,0}});
int speed=1;
HPEN oldhPen =(HPEN) SelectObject(HDCConsole,hPen1 );

do
{

if(KeyPressed(VK_SHIFT))
{
speed = 10;
}
else
{
speed =1;
}
if(KeyPressed(VK_UP))
{

Plane.Move({0.0,0.0,(float)-speed});
Wall.Move({0.0,0.0,(float)-speed});

}
else if(KeyPressed(VK_DOWN))
{
Plane.Move({0.0,0.0,(float)speed});
Wall.Move({0.0,0.0,(float)speed});
}
FillRect(HDCConsole,&WindowSize,CreateSolidBrush(RGB(0,0,0)));

Plane.draw(HDCConsole);
Wall.draw(HDCConsole);

Sleep(10);

}while(!(GetKeyState(VK_ESCAPE) & 0x8000));
SelectObject(HDCConsole,oldhPen );
DeleteObject(hPen1);
DeleteObject(hPlane);
return 0;
}```
now it's more easy for move and draw
if you have another way for move, i accept suggestions
how can i draw the Plane and Wall with right order? for don't been drawed 1 above the other and incorrectly?
Attachment 185667

10. ## Re: 3D Math: how calculate the 3D?

Originally Posted by joaquim
This is my perspective correct texture mapping method I performed long time ago. This does it per pixel and it is accurate:
https://www.vbforums.com/attachment....3&d=1387915938

If you want your walls and planes to be rendered in the right order, you gotta do what is either zsorting the polygons using Quicksort (something i learned in data structures class in college), or you can use what is called a zbuffer, which is simply a 2D array of all of the Z pixels on screen, with no render being a very large impossible to reach value rather than a zero. Very easy to implement, but again, you need to change how you render your polygons as that requires a per pixel render. At least when you do so, you can check the z position of every pixel. If the z position of that pixel you are at is the closest z (the smallest number within your near z and far z range), it will override that pixel in the z buffer.

11. ## Re: 3D Math: how calculate the 3D?

"This is my perspective correct texture mapping method I performed long time ago. This does it per pixel and it is accurate:"
i'm sorry but to much code. ok, you use 'Vertex3D', i use 'position' with more things. but it's the same. the rest is more that i need learn.
but tell me: the PlgBlt() isn't the best for i start? don't eat too much CPU and works... at least i belive.. the worst is test for the tile lol

"If you want your walls and planes to be rendered in the right order, you gotta do what is either zsorting the polygons using Quicksort (something i learned in data structures class in college), or you can use what is called a zbuffer, which is simply a 2D array of all of the Z pixels on screen, with no render being a very large impossible to reach value rather than a zero. Very easy to implement, but again, you need to change how you render your polygons as that requires a per pixel render. At least when you do so, you can check the z position of every pixel. If the z position of that pixel you are at is the closest z (the smallest number within your near z and far z range), it will override that pixel in the z buffer."
Code:
```Object3D Roof({{-470, -200,0},  {-470, -200,1000}, {470, -200,1000},{470, -200,0}});
Object3D Floor({{-470, 255,0},  {-470, 255,1000}, {470, 255,1000},{470, 255,0}});
Object3D Wall({{-470, -200,0}, {-470, -200,1000}, {-470, 255,1000}, {-470, 255,0}});
Object3D Wall2({{470, -200,0}, {470, -200,1000}, {470, 255,1000}, {470, 255,0}});```
result when i move up:
Attachment 185672
why i see that 2 vertical lines(on Z deph)?
i can control the Z order on Floor, but 1 vertex3d is dependent on next. and, like you see on image, the some parts(depending on Z or even on X(maybe on Y too)(and tested) the Floor must be the 1st be drawed or maybe the last...
i don't know control these

13. ## Re: 3D Math: how calculate the 3D?

correct me 1 thing: i must draw the walls before the floor\roof... they must have a right order?
ok.. they are 4 polygons and not 1... but seems that they must have 1 draw order depending on their positions
i changed the Y and i notice that the roof seems been drawed above the floor, but the floor is the last.....

or
https://imgur.com/yDiuhPX
please teach me these drawed order and, like you see, the problem isn't only the Z.
i can make the HPEN transparent, but when we use a texture, the problem remains

14. ## Re: 3D Math: how calculate the 3D?

Thats why i mentioned earlier that you need to Z Sort the polygons before rendering, since you are using polygon rendering apis. To accomplish this, you get the 3 Z values of every triangle, add them together, and divide them by 3 to obtain the average Z. Every face will have an average Z tied to it.

Next, you will have a render list of all polygons visible on screen. But, the list will be Quicksorted (faster than bubble sort by the way) of every triangle so it starts from far away to close to the viewer. That way, when you render it, it will be in the correct z order. This still produces problems though, as it is not perfect.

I recommended a different approach, called a z buffer. But this will require all of your polygons to be rendered, shaded, and texture mapped per pixel. Z buffer is very accurate, and even more accurate when its a double data type.

15. ## Re: 3D Math: how calculate the 3D?

i did these change, but the same bug is showed:
Code:
```Object3D Floor({ {-470, 255,1000}, {470, 255,1000},{470, 255,0}, {-470, 255,0}});
Object3D Roof({ {-470, -200,1000}, {470, -200,1000},{470, -200,0}, {-470, -200,0}});

Object3D Wall({ {-470, -200,1000}, {-470, 255,1000}, {-470, 255,0}, {-470, -200,0}});
Object3D Wall2({ {470, -200,1000}, {470, 255,1000}, {470, 255,0}, {470, -200,0}});```
i must combine the Roof, Floor with wall's?(just for give me 1 object)
the polygon is drawed like a single rectangle.

16. ## Re: 3D Math: how calculate the 3D?

i'm sorry Jacob, but can you tell me more?

17. ## Re: 3D Math: how calculate the 3D?

fixed
was just the polygons order, depending on view or position:
Code:
```if(Roof.pos[0].Y<0)
{
Roof.draw(HDCConsole);
if(Floor.pos[0].Y<0)
{
if(Wall2.pos[0].X>0)
{
Wall2.draw(HDCConsole);
Wall.draw(HDCConsole);
}
else
{
Wall.draw(HDCConsole);
Wall2.draw(HDCConsole);
}

Floor.draw(HDCConsole);
}
else
{
Floor.draw(HDCConsole);
if(Wall2.pos[0].X>0)
{
Wall2.draw(HDCConsole);
Wall.draw(HDCConsole);
}
else
{
Wall.draw(HDCConsole);
Wall2.draw(HDCConsole);
}
}
}
else
{

Floor.draw(HDCConsole);
if(Wall2.pos[0].X>0)
{
Wall2.draw(HDCConsole);
Wall.draw(HDCConsole);
}
else
{
Wall.draw(HDCConsole);
Wall2.draw(HDCConsole);
}
Roof.draw(HDCConsole);

}```
like i said: these 4 polygons are dependent, before draw them, on their positions.
maybe you can advice me a more perfect\'clean' 'if's'?

18. ## Re: 3D Math: how calculate the 3D?

heres the result:
Attachment 185714

19. ## Re: 3D Math: how calculate the 3D?

i had more 1 problem, on movement, that i fixed...
1 - i need understand why i must draw the walls\roofs\floors on right order depending on position(if X is more big than zero or not).. what you can tell me?
2 - avoiding drawed outside the view... but with sometime i will do it
3 - yes.. i didn't miss, i have the 3D rotation function:
Code:
```//the computer use radians and not degrees:
AngleCoordenate.z = AngleCoordenate.z*PI/180;
AngleCoordenate.x = AngleCoordenate.x*PI/180;
AngleCoordenate.y = AngleCoordenate.y*PI/180;

//we substrate the rotation center or the rotation center will be 0,0,0:
X-=RotCenter.X;
Y-=RotCenter.Y;
Z-=RotCenter.Z;

//using the Z, Y and X order:
Z-YAW:
x_new = x * cos(alpha) - y * sin(alpha) + z * 0 = x * cos(alpha) - y * sin(alpha)
y_new = x * sin(alpha) + y * cos(alpha) + z * 0 = x * sin(alpha) + y * cos(alpha)
z_new = z * 1 = z

Y-Pitch:
x_new = x * cos(alpha) + y * 0 + z * sin(alpha) = x * cos(alpha) + Z * sin(alpha)
y_new = y
z_new = -x * sin(alpha) + Y * 0 + z * cos(alpha) = -x * sin(alpha) + z * cos(alpha)

X-Roll:
x_new = x
y_new = z * 0 + y * cos(alpha) - z * sin(alpha) = y * cos(alpha) - z * sin(alpha)
z_new = x * 0 + Y * sin(alpha) + z * cos(alpha) = Y * sin(alpha) + z * cos(alpha)

X+=RotCenter.X;
Y+=RotCenter.Y;
Z+=RotCenter.Z;```
if i'm mistake, you can correct me

4 - i need understand how can i calculate the FPS... can you explain that please?(and tell me what is the best FPS)
5 - after that i will try using the Texture... maybe using PlgBlt() function, but you advice not use it... but it's what i know

20. ## Re: 3D Math: how calculate the 3D?

Originally Posted by joaquim
fixed
was just the polygons order, depending on view or position:
Code:
```if(Roof.pos[0].Y<0)
{
Roof.draw(HDCConsole);
if(Floor.pos[0].Y<0)
{
if(Wall2.pos[0].X>0)
{
Wall2.draw(HDCConsole);
Wall.draw(HDCConsole);
}
else
{
Wall.draw(HDCConsole);
Wall2.draw(HDCConsole);
}

Floor.draw(HDCConsole);
}
else
{
Floor.draw(HDCConsole);
if(Wall2.pos[0].X>0)
{
Wall2.draw(HDCConsole);
Wall.draw(HDCConsole);
}
else
{
Wall.draw(HDCConsole);
Wall2.draw(HDCConsole);
}
}
}
else
{

Floor.draw(HDCConsole);
if(Wall2.pos[0].X>0)
{
Wall2.draw(HDCConsole);
Wall.draw(HDCConsole);
}
else
{
Wall.draw(HDCConsole);
Wall2.draw(HDCConsole);
}
Roof.draw(HDCConsole);

}```
like i said: these 4 polygons are dependent, before draw them, on their positions.
maybe you can advice me a more perfect\'clean' 'if's'?
Thats why they need zsorted by average z by the computer, not manually sorted by hand prior to rendering. LOL

That is exactly what I was trying to tell you the entire time! But it is not needed if you use a zbuffer (https://www.geeksforgeeks.org/z-buff...buffer-method/), which handles cases like zorder without sorting, or piercing polygons (like a triangle stabbing into another).

Also, why aren't you using matrices or even quaternions for rotation?

21. ## Re: 3D Math: how calculate the 3D?

In between homework this week (yes i have homework) im gonna tackle your project to show you exactly what i am talking about. Itll be a massive improvement, and polygons will be rendered correctly at any angle

22. ## Re: 3D Math: how calculate the 3D?

good step:
Attachment 185755
like you see the 3rd point isn't correctly calculated :P
i don't know why. can you explain better?
only the 3rd
but at east i have the picture
i must calculate\divide the distances and then tile it

23. ## Re: 3D Math: how calculate the 3D?

Your attachments aren't working. Use [IMG] tags for images.

I think honestly, as ambitious as is is to do 3D stuff on command prompt, have you considered using Unity? Makes game creation a hell of a lot easier, and can output on either PC, phones, VR, Game consoles, Hololens, etc.

See that? Used an image tag

24. ## Re: 3D Math: how calculate the 3D?

-image removed-

25. ## Re: 3D Math: how calculate the 3D?

to be honest, i'm just learning using 3D Math(by me and not by school or something)

26. ## Re: 3D Math: how calculate the 3D?

Vertices might be backwards around that 3rd point. You might wanna check the clockwise or counter clockwise orientation

27. ## Re: 3D Math: how calculate the 3D?

Object3D Floor({{-470, 255,0}, {-470, 255,1000}, {470, 255,1000},{470, 255,0}});
Point[0]={-470, 255,0}
Point[1]= {-470, 255,1000}
Point[2]= {470, 255,1000}
Point[3]={470, 255,0}

'upper-left' = Point[0]
'upper-right' = Point[1]
'lower-left' = Point[3]
i think is on these way.
thinking on Z from close to far... what is 'upper-left', 'upper-right' and 'lower-left'?
maybe i miss something here
i'm trying several ways... but no luck

28. ## Re: 3D Math: how calculate the 3D?

[IMG]185791[/IMG]

29. ## Re: 3D Math: how calculate the 3D?

There ya go, you were working with quads rather than triangles. Your 4 vertices are upperleft, upperright, lowerleft and lowerright. Instead of 4 vertices, use 6 vertices for two triangles so you can get the orientation correctly. Try using clockwise orientation.

30. ## Re: 3D Math: how calculate the 3D?

damn.. i'm feeling crazy: i can't control the 3 points
i'm trying just draw in a triangle way without success

31. ## Re: 3D Math: how calculate the 3D?

i continue testing without success

#### Posting Permissions

• You may not post new threads
• You may not post replies
• You may not post attachments
• You may not edit your posts
•