Я пытаюсь сделать игру, которая требует проверки столкновений с камерой игроков. При попытке справиться с столкновениями я обнаружил, что я не смог обнаружить столкновения с помощью модели, если только параметр позиции функции draitmodel () был установлен на мировое происхождение {0, 0, 0}.
Далее, кажется, что луча возвращается с GetScreEntoworld () не в центре. Добавлено. Это минимальный пример кода, который содержит проблему, который у меня есть: < /p>
#include "raylib.h"
#include "raymath.h"
#include
#include
#include
int main(void){
const int screenWidth = 1920;
const int screenHeight = 1080;
InitWindow(screenWidth, screenHeight, "Bob's Mansion");
InitAudioDevice();
Camera camera = { 0 };
camera.position = (Vector3){ 0.0f, 1.0f, 5.0f };
camera.target = (Vector3){ 3.0f, 1.0f, 3.0f };
camera.up = (Vector3){ 0.0f, 1.0f, 0.0f };
camera.fovy = 60.0f;
camera.projection = CAMERA_PERSPECTIVE;
Model BobModel = LoadModel("../assets/BobModel.glb");
Vector3 BobPosition = { 3.0f, 0.5f, 3.0f };
// Vector3 BobPosition = { 0.0f, 0.0f, 0.0f };
Ray ray = { 0 };
DisableCursor();
SetTargetFPS(30);
while(!WindowShouldClose()){
UpdateCamera(&camera, CAMERA_FIRST_PERSON);
ray = GetScreenToWorldRay(GetMousePosition(), camera);
RayCollision collision = { 0 };
RayCollision meshHitInfo = { 0 };
for (int m = 0; m < BobModel.meshCount; m++)
{
meshHitInfo = GetRayCollisionMesh(ray, BobModel.meshes[m], BobModel.transform);
if (meshHitInfo.hit)
{
// Save the closest hit mesh
if ((!collision.hit) || (collision.distance > meshHitInfo.distance)) collision = meshHitInfo;
break; // Stop once one mesh collision is detected, the colliding mesh is m
}
}
BeginDrawing();
ClearBackground(BLACK);
BeginMode3D(camera);
DrawModel(BobModel, BobPosition, 1.0f, WHITE);
DrawPlane( {0, 0, 0}, {20, 20}, GRAY);
// If we hit something, draw the cursor at the hit point
if (collision.hit)
{
DrawCube(collision.point, 0.3f, 0.3f, 0.3f, GREEN);
DrawCubeWires(collision.point, 0.3f, 0.3f, 0.3f, RED);
Vector3 normalEnd;
normalEnd.x = collision.point.x + collision.normal.x;
normalEnd.y = collision.point.y + collision.normal.y;
normalEnd.z = collision.point.z + collision.normal.z;
DrawLine3D(collision.point, normalEnd, RED);
}
DrawRay(ray, MAROON);
EndMode3D();
const float crosshairRadiusOutter = 7;
const float crosshairRadiusInner = 4;
DrawCircle(screenWidth/2, screenHeight/2, crosshairRadiusOutter, BLACK);
DrawCircle(screenWidth/2, screenHeight/2, crosshairRadiusInner, RAYWHITE);
EndDrawing();
}
UnloadModel(BobModel);
CloseWindow();
}
< /code>
Мне приходится, что мне может потребоваться как -то преобразовать матрицу модели, так как это то, что проверяется, но я не знаю, как. Это также не объясняет, почему столкновение не обнаруживается в центре экрана. Но столкновение все еще не в центре экрана. Если у кого -нибудь есть информация, пожалуйста, поделитесь! < /P>
Параметр позиции тестирования DrawModel ()
тестирование testmodel () в World Origin < /p>
Подробнее здесь: https://stackoverflow.com/questions/797 ... el-positio