Got a point rendering, but still need to cull it if behind
This commit is contained in:
		
							parent
							
								
									03aeac765d
								
							
						
					
					
						commit
						2ff6576142
					
				
					 2 changed files with 174 additions and 3 deletions
				
			
		
							
								
								
									
										2
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -1,6 +1,6 @@ | |||
| CC = gcc | ||||
| CFLAGS = -g | ||||
| LDLIBS = -lraylib | ||||
| LDLIBS = -lraylib -lm | ||||
| 
 | ||||
| objects  = c3d.o | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										171
									
								
								c3d.c
									
										
									
									
									
								
							
							
						
						
									
										171
									
								
								c3d.c
									
										
									
									
									
								
							|  | @ -1,19 +1,168 @@ | |||
| #include <math.h> | ||||
| #include <stdio.h> | ||||
| #include "raylib.h" | ||||
| 
 | ||||
| const int RENDERWIDTH = 1920; | ||||
| const int RENDERHEIGHT = 1080; | ||||
| 
 | ||||
| const int HALFWIDTH = RENDERWIDTH / 2; | ||||
| const int HALFHEIGHT = RENDERHEIGHT / 2; | ||||
| 
 | ||||
| 
 | ||||
| const int SCREENWIDTH = 1280; | ||||
| const int SCREENHEIGHT = 720; | ||||
| 
 | ||||
| const float WIDTHSCALE = (float)RENDERWIDTH / SCREENWIDTH; | ||||
| const float HEIGHTSCALE = (float) RENDERHEIGHT / SCREENHEIGHT; | ||||
| 
 | ||||
| 
 | ||||
| const float fov = 90.0 / 180.0 * 3.14159265369; | ||||
| const float half_fov = fov / 2; | ||||
| 
 | ||||
| float proj; //HALFWIDTH / tan(half_fov) Inited later
 | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|   The point is now rendering, but it is in front of and behind us at the same time | ||||
| */ | ||||
| 
 | ||||
| 
 | ||||
| struct LocalCam { | ||||
|     Vector3 position; | ||||
|     Vector3 velocity; | ||||
|     Vector3 acceleration; | ||||
|     Vector3 angles; | ||||
|     Vector3 angleVelocity; | ||||
|     Vector3 angleAcceleration; | ||||
| }; | ||||
| 
 | ||||
| typedef struct LocalCam LocalCam; | ||||
| 
 | ||||
| Vector3 Vector3Sum(Vector3 v1, Vector3 v2) { | ||||
|     Vector3 retvec; | ||||
|     retvec.x = v1.x + v2.x; | ||||
|     retvec.y = v1.y + v2.y; | ||||
|     retvec.z = v1.z + v2.z; | ||||
|     return retvec; | ||||
| } | ||||
| 
 | ||||
| Vector3 Vector3Scale(Vector3 v1, float scale) { | ||||
|     Vector3 retvec; | ||||
|     retvec.x = v1.x * scale; | ||||
|     retvec.y = v1.y * scale; | ||||
|     retvec.z = v1.z * scale; | ||||
|     return retvec; | ||||
| } | ||||
| 
 | ||||
| Vector3 RotateAboutX(Vector3 v, double radians){ | ||||
|     Vector3 rotatedvector; | ||||
|     rotatedvector.x = 1*v.x + (0) + (0); | ||||
|     rotatedvector.y = (0) + cos(radians)*v.y + (-sin(radians)*v.z); | ||||
|     rotatedvector.z = 0 + sin(radians)*v.y + cos(radians)*v.z; | ||||
|     return rotatedvector; | ||||
| } | ||||
| Vector3 RotateAboutY(Vector3 v, double radians){ | ||||
|     Vector3 rotatedvector; | ||||
|     rotatedvector.x = cos(radians)*v.x + (0) + sin(radians)*v.z; | ||||
|     rotatedvector.y = (0) + 1*v.y + (0); | ||||
|     rotatedvector.z = -sin(radians)*v.x + 0 + cos(radians)*v.z; | ||||
|     return rotatedvector; | ||||
| } | ||||
| 
 | ||||
| Vector3 RotateAboutZ(Vector3 v, double radians){ | ||||
|     Vector3 rotatedvector; | ||||
|     rotatedvector.x = cos(radians)*v.x + (-sin(radians)*v.y) + (0); | ||||
|     rotatedvector.y = sin(radians)*v.x + cos(radians)*v.y + (0); | ||||
|     rotatedvector.z = 0 + 0 + 1*v.z; | ||||
|     return rotatedvector; | ||||
| } | ||||
| 
 | ||||
| void CtrlLocalCam(LocalCam *cam, float time) { | ||||
|     cam->velocity.x = 0; | ||||
|     cam->velocity.y = 0; | ||||
|     cam->velocity.z = 0; | ||||
|     cam->angleVelocity.x = 0; | ||||
|     cam->angleVelocity.y = 0; | ||||
|     cam->angleVelocity.z = 0; | ||||
| 
 | ||||
|     if (IsKeyDown(KEY_W)) { | ||||
| 	Vector3 forceForward = (Vector3){0,0,500}; | ||||
| 	Vector3 rotatedforce = RotateAboutY(forceForward,cam->angles.y); | ||||
| 	cam->velocity = Vector3Sum(cam->velocity,rotatedforce); | ||||
| 
 | ||||
| 	//cam->velocity.z = cam->velocity.z + 50000*time*sin(cam->angles.y);
 | ||||
| 	//cam->velocity.x = cam->velocity.x + 500*time*cos(cam->angles.y);
 | ||||
|     } | ||||
| 
 | ||||
|     if(IsKeyDown(KEY_SPACE)) { | ||||
| 	cam->velocity.y = cam->velocity.y - 50; | ||||
|     } | ||||
| 
 | ||||
|     if (IsKeyDown(KEY_Q)){ | ||||
| 	cam->angleVelocity.y = cam->angleVelocity.y + time*1000; | ||||
|     } | ||||
|     if (IsKeyDown(KEY_E)){ | ||||
| 	cam->angleVelocity.y = cam->angleVelocity.y - time*1000; | ||||
|     } | ||||
| 
 | ||||
|     if (IsKeyDown(KEY_G)) { | ||||
| 	printf("PosX: %f PosY: %f, PosZ: %f\n",cam->position.x,cam->position.y,cam->position.z); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void LocalCamApplyVelo(LocalCam *cam,float time){ | ||||
|     cam->position.x = cam->position.x + cam->velocity.x * time; | ||||
|     cam->position.y = cam->position.y + cam->velocity.y * time; | ||||
|     cam->position.z = cam->position.z + cam->velocity.z * time; | ||||
| 
 | ||||
|     cam->angles.x = cam->angles.x + cam->angleVelocity.x * time; | ||||
|     cam->angles.y = cam->angles.y + cam->angleVelocity.y * time; | ||||
|     cam->angles.z = cam->angles.z + cam->angleVelocity.z * time; | ||||
|     //printf("%f %f %f\n",cam->angles.x, cam->angles.y, cam->angles.z);
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| Vector2 Conv3Dto2D(Vector3 v) { | ||||
|     Vector2 returnvector; | ||||
|     returnvector.x = proj * v.x / v.z; | ||||
|     returnvector.y = proj * v.y / v.z; | ||||
|     return returnvector; | ||||
| } | ||||
| 
 | ||||
| Vector2 Conv2DCenteredToScreen(Vector2 v) { | ||||
|     Vector2 returnvector; | ||||
|     returnvector.x = v.x + HALFWIDTH; | ||||
|     returnvector.y = v.y + HALFHEIGHT; | ||||
|     return returnvector; | ||||
| } | ||||
| 
 | ||||
| Vector3 TransformWithCam(Vector3 v, LocalCam * cam) { | ||||
|     Vector3 returnvector; | ||||
|     returnvector.x = v.x - cam->position.x; | ||||
|     returnvector.y = v.y - cam->position.y; | ||||
|     returnvector.z = v.z - cam->position.z; | ||||
| 
 | ||||
|     returnvector = RotateAboutZ(returnvector,cam->angles.z); | ||||
|     returnvector = RotateAboutY(returnvector,cam->angles.y); | ||||
|     returnvector = RotateAboutZ(returnvector,cam->angles.z); | ||||
| 
 | ||||
|     //printf("Before: %f %f %f, After: %f %f %f\n", v.x, v.y, v.z, returnvector.x, returnvector.y, returnvector.z);
 | ||||
|     return returnvector; | ||||
| } | ||||
| 
 | ||||
| int main() { | ||||
|     proj = HALFWIDTH / tan(half_fov); | ||||
| 
 | ||||
| 
 | ||||
|      | ||||
|      | ||||
|     SetConfigFlags(FLAG_WINDOW_UNDECORATED); | ||||
|     InitWindow(SCREENWIDTH, SCREENHEIGHT, "raylib [core] example - basic window"); | ||||
|      | ||||
| 
 | ||||
|     // SetWindowPosition(0,1080);
 | ||||
|     Vector2 a = GetMonitorPosition(0); | ||||
|     int mh = GetMonitorHeight(0); | ||||
|  | @ -26,11 +175,33 @@ int main() { | |||
|     RenderTexture2D renderTexture = LoadRenderTexture(RENDERWIDTH,RENDERHEIGHT); | ||||
| 
 | ||||
| 
 | ||||
|     // Init cube model
 | ||||
|     // TODO: Load from obj
 | ||||
| 
 | ||||
|     LocalCam camera; | ||||
|     camera.position = (Vector3){0,0,0}; | ||||
|     camera.acceleration = (Vector3){0,0,0}; | ||||
|     camera.angleAcceleration = (Vector3){0,0,0}; | ||||
|     camera.angles = (Vector3){0,0,0}; | ||||
|     camera.velocity = (Vector3){0,0,0}; | ||||
|     camera.angleVelocity = (Vector3){0,0,0}; | ||||
|      | ||||
|     Vector3 point = (Vector3){0,0,10}; | ||||
| 
 | ||||
|      | ||||
|      | ||||
|     while (!WindowShouldClose()) { | ||||
| 	float frametime = GetFrameTime(); | ||||
| 	CtrlLocalCam(&camera,frametime); | ||||
| 	LocalCamApplyVelo(&camera,frametime); | ||||
|         BeginTextureMode(renderTexture); | ||||
|         ClearBackground(WHITE); | ||||
|         DrawText("Congrats! You created your first window!", 190, 200, 20, | ||||
|                  BLACK); | ||||
| 	Vector3 TransVector = TransformWithCam(point,&camera); | ||||
| 	Vector2 MPos = Conv3Dto2D(TransVector); | ||||
| 	Vector2 FinPos = Conv2DCenteredToScreen(MPos); | ||||
| 	DrawCircleV(FinPos,100,BLACK); | ||||
|         EndTextureMode(); | ||||
| 
 | ||||
| 	//Copytexture to main display :0
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue