Я пытаюсь сделать игру, которая требует проверки столкновений с камерой игроков. При попытке справиться с столкновениями я обнаружил, что я не смог обнаружить столкновения с помощью модели, если только параметр позиции функции 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
C ++ Raylib Проблема с поиском столкновений с сеткой, когда позиция Mesh DrawModel () не является рабочим центром ⇐ C++
Программы на C++. Форум разработчиков
1752777506
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>
Подробнее здесь: [url]https://stackoverflow.com/questions/79705285/c-raylib-issue-with-finding-collisions-with-mesh-when-mesh-drawmodel-positio[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия