c++ - 为在 OpenGL 中使用基本物理和渲染寻找一个好的形状类设计

标签 c++ opengl rendering physics shapes

目前,我一直在研究一些OpenGL,我希望能学到尽可能多的东西。现在我正在编写一个形状类,我希望可以在我选择进行的其他项目中使用和派生它。然而,我已经意识到我需要考虑某些因素。其中之一是质量、体积和密度的集合 - 更重要的是它们如何应用于几何基元本身。

任何轴向对齐的球体或边界框都可能派生自此类,以及实际上将呈现到屏幕上的图元 - 2D 和 3D 都一样。我希望看看是否有人可以给我一些关于如何编写一个好的 Shape 类而不必“给出答案”的指示。我需要某种方向。

我身边的两个主要资源是尼可波拉斯(我想他的名字就是这样拼写的)Learning Modern Graphics Programming , 和 3D Math Primer for Graphics and Game Development书。至于渲染等方面的基础知识和高级概念,这些应该就足够了。

不过,我目前正在寻找的是关于如何构建此类的指南。我现在最不想做的就是按照教程进行操作,这些教程涉及从静态值在屏幕上绘制三角形,因为我只是那些不太了解这种方式的人之一;我通过实现自己的方法并同时依赖其他信息源边学边学。

到目前为止,这就是我所拥有的(注意 - 除了 ctor 和内联之外,这些方法都没有实现):

class Shape
    {
    public:
        Shape(float radius, glm::vec4 center_pos);
        virtual ~Shape(void) { }

        virtual void draw(void) = 0;
        void collide(Shape& s);
    public:
        inline void setRadius(float radius)
        {
            mRadius = radius;
            redetermineStructure();
        }

    public:
        glm::vec4 CenterPosition;
    protected:
        float mass(void);
        void redetermineStructure(void); //used to recalculate the dimensions and attributes of the primitive after a new value such as radius or position has been set.
    protected:
        float mRadius, mVolume, mDensity;
        glm::vec4 mLastPosition;
        int mHP;
    };

最佳答案

除非您已经知道您将需要什么(前期设计/原型(prototype)制作),否则很难给出具体的答案。

如果你边做边学,那么我建议一个好的方法是编写一些简单的实现来利用你的形状类:

  • 两个粒子之间的一维碰撞
  • 粒子与平面的一维碰撞
  • 钟摆
  • 1 个形状和 1 个平面之间的二维碰撞(边界检查)
  • 2 个形状/多个形状之间的二维碰撞(边界检查、动量传递)
  • 与上面的 3D 碰撞

...这应该相当快地公开您的形状类将需要的各种成员函数和内部存储。

关于c++ - 为在 OpenGL 中使用基本物理和渲染寻找一个好的形状类设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11481876/

相关文章:

c# - 在 Visual Studio 中将数据从 C# 传递到 C++

windows - 具有不同刷新率的 OpenGL 多头 vsync

java - 使用 Java 2D 的抗锯齿高度图边缘

c++ - openGL光照随相机旋转

java - 显示更多世界数据而不是在窗口调整大小时缩放的正交投影

html - IE8 中的高度渲染错误?

html - 从本地加载的文件渐进式呈现 HTML 的提示?

c++ - sizeof(function) 有意义吗?

c++ - 在调试中运行 DirectX 示例时出现问题, "Failed Creating the Direct3D Device"

c++ - std::cin 限制不能输入 LPCSTR