dsdf
This commit is contained in:
parent
a873c3c09c
commit
08c75b06c7
58
karo.cpp
58
karo.cpp
@ -78,6 +78,45 @@ static void CheckProgramLinkErrors(GLuint program) {
|
||||
}
|
||||
}
|
||||
|
||||
enum ContactGroup {
|
||||
CG_NONE = 0,
|
||||
CG_BOX = (1 << 1),
|
||||
CG_FLOOR = (1 << 2),
|
||||
};
|
||||
|
||||
PxFilterFlags FilterShaderExample(
|
||||
PxFilterObjectAttributes attributes0, PxFilterData filterData0,
|
||||
PxFilterObjectAttributes attributes1, PxFilterData filterData1,
|
||||
PxPairFlags& pairFlags, const void* constantBlock, PxU32 constantBlockSize)
|
||||
{
|
||||
// let triggers through
|
||||
if (PxFilterObjectIsTrigger(attributes0) || PxFilterObjectIsTrigger(attributes1))
|
||||
{
|
||||
pairFlags = PxPairFlag::eTRIGGER_DEFAULT;
|
||||
return PxFilterFlag::eDEFAULT;
|
||||
}
|
||||
// generate contacts for all that were not filtered above
|
||||
pairFlags = PxPairFlag::eCONTACT_DEFAULT;
|
||||
|
||||
// trigger the contact callback for pairs (A,B) where
|
||||
// the filtermask of A contains the ID of B and vice versa.
|
||||
if ((filterData0.word0 & filterData1.word1) && (filterData1.word0 & filterData0.word1)) {
|
||||
pairFlags |= PxPairFlag::eNOTIFY_TOUCH_FOUND;
|
||||
return PxFilterFlag::eDEFAULT;
|
||||
|
||||
}
|
||||
|
||||
return PxFilterFlag::eSUPPRESS;
|
||||
}
|
||||
|
||||
void SetupFiltering(PxShape* shape, PxU32 filterGroup, PxU32 filterMask)
|
||||
{
|
||||
PxFilterData filterData;
|
||||
filterData.word0 = filterGroup; // word0 = own ID
|
||||
filterData.word1 = filterMask; // word1 = ID mask to filter pairs that trigger a contact callback
|
||||
shape->setSimulationFilterData(filterData);
|
||||
}
|
||||
|
||||
static std::vector<Vertex> s_draw_lines;
|
||||
static std::vector<Vertex> s_draw_points;
|
||||
|
||||
@ -113,9 +152,10 @@ static void InitPhysics() {
|
||||
exit(3);
|
||||
|
||||
sceneDesc.cpuDispatcher = s_cpu_dispatcher;
|
||||
sceneDesc.filterShader = &FilterShaderExample;
|
||||
|
||||
if (!sceneDesc.filterShader)
|
||||
sceneDesc.filterShader = &PxDefaultSimulationFilterShader;
|
||||
//if (!sceneDesc.filterShader)
|
||||
// sceneDesc.filterShader = &PxDefaultSimulationFilterShader;
|
||||
|
||||
s_scene = s_physics->createScene(sceneDesc);
|
||||
if (!s_scene)
|
||||
@ -153,14 +193,20 @@ static void InitPhysics() {
|
||||
//m_scene->setVisualizationParameter(PxVisualizationParameter::eJOINT_LOCAL_FRAMES, enable ? 1.0f : 0.0f);
|
||||
m_scene->setVisualizationParameter(PxVisualizationParameter::eWORLD_AXES, enable ? 1.0f : 0.0f);
|
||||
|
||||
PxShape* shape;
|
||||
|
||||
auto floor_material = s_physics->createMaterial(1.0f, 1.0f, 0.0f);
|
||||
s_material = s_physics->createMaterial(1.0f, 1.0f, 0.6f);
|
||||
|
||||
auto floor = PxCreatePlane(*s_physics, PxPlane(PxVec3(0.f, 1.f, 0.f), 0.f), *floor_material);
|
||||
floor->getShapes(&shape, 1);
|
||||
SetupFiltering(shape, CG_FLOOR, CG_BOX | CG_FLOOR);
|
||||
s_scene->addActor(*floor);
|
||||
|
||||
|
||||
s_box1 = PxCreateDynamic(*s_physics, PxTransform(PxVec3(0.f, 5.0f, 0.f)), PxBoxGeometry(0.5f, 0.5f, 0.5f), *s_material, 1.f);
|
||||
s_box1->getShapes(&shape, 1);
|
||||
SetupFiltering(shape, CG_BOX, CG_FLOOR);
|
||||
s_scene->addActor(*s_box1);
|
||||
}
|
||||
|
||||
@ -223,6 +269,7 @@ int main() {
|
||||
glfwWindowHint(GLFW_STENCIL_BITS, 0);
|
||||
glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);
|
||||
|
||||
//GLFWwindow* window = glfwCreateWindow(1920, 1080, "Karo", glfwGetPrimaryMonitor(), NULL);
|
||||
GLFWwindow* window = glfwCreateWindow(800, 600, "Karo", NULL, NULL);
|
||||
if (!window) {
|
||||
std::cerr << "Failed to create window\n";
|
||||
@ -304,9 +351,12 @@ int main() {
|
||||
break;
|
||||
|
||||
case GLFW_KEY_E:
|
||||
for (int i = 0; i < 100; i++) {
|
||||
for (int i = 0; i < 1; i++) {
|
||||
|
||||
auto newbox = PxCreateDynamic(*s_physics, PxTransform(PxVec3(0.f, 5.0f * i, 0.f)), PxBoxGeometry(0.5f, 0.5f, 0.5f), *s_material, 1.f);
|
||||
PxShape* shape;
|
||||
newbox->getShapes(&shape, 1);
|
||||
SetupFiltering(shape, CG_BOX, CG_FLOOR | CG_BOX);
|
||||
s_scene->addActor(*newbox);
|
||||
s_count++;
|
||||
}
|
||||
@ -331,7 +381,7 @@ int main() {
|
||||
glViewport(0, 0, width, height);
|
||||
|
||||
glm::mat4 proj = glm::perspective(glm::radians(45.0f), (float)width / (float)height, 0.1f, 1000.0f);
|
||||
glm::mat4 view = glm::lookAt(glm::vec3(1.0f, 10.0f, 20.0f) * 10.0f, glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0, 1.0, 0.0));
|
||||
glm::mat4 view = glm::lookAt(glm::vec3(1.0f, 10.0f, 20.0f) * 1.0f, glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0, 1.0, 0.0));
|
||||
|
||||
glm::mat4 mvp = proj * view;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user