C ++ Raylib Проблема с поиском столкновений с сеткой, когда позиция Mesh DrawModel () не является рабочим центромC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C ++ Raylib Проблема с поиском столкновений с сеткой, когда позиция Mesh DrawModel () не является рабочим центром

Сообщение Anonymous »

Я пытаюсь сделать игру, которая требует проверки столкновений с камерой игроков. При попытке справиться с столкновениями я обнаружил, что я не смог обнаружить столкновения с помощью модели, если только параметр позиции функции 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»